From 3f5c71b3f0f427dc2092d63bf3241b27d5a16b02 Mon Sep 17 00:00:00 2001 From: ziro Date: Mon, 11 May 2020 07:05:24 +0700 Subject: [PATCH] + Switched from ranger to lf (Lighter file manager) --- .config/lf/lfrc | 64 +++++++++++++++++ .config/lf/scripts/draw_img.sh | 67 ++++++++++++++++++ .config/lf/scripts/previewer | 6 ++ .config/lf/scripts/scope | 124 +++++++++++++++++++++++++++++++++ 4 files changed, 261 insertions(+) create mode 100644 .config/lf/lfrc create mode 100755 .config/lf/scripts/draw_img.sh create mode 100755 .config/lf/scripts/previewer create mode 100755 .config/lf/scripts/scope diff --git a/.config/lf/lfrc b/.config/lf/lfrc new file mode 100644 index 0000000..b6b95a4 --- /dev/null +++ b/.config/lf/lfrc @@ -0,0 +1,64 @@ +# Config +set preview true +set previewer ~/.config/lf/scripts/previewer +#set previewer ~/.config/lf/scripts/scope +set icons true +set color256 +set hidden true +set ignorecase true +set smartcase true + +# Custom Functions +cmd open ${{ + case $(file --mime-type "$f" -bL) in + text/*|application/json) $EDITOR "$f";; + video/*|image/*/application/pdf) xdg-open "$f" & disown;; + *) xdg-open "$f" ;; + esac +}} + +cmd mkdir $mkdir -p "$(echo $* | tr ' ' '\ ')" + +cmd touch $touch "$(echo $* | tr ' ' '\ ')" + +cmd q :quit + +cmd chmod $chmod "$*" "$f" + +# printf "Mode Bits: " +# read ans +# +# for file in "$fx" +# do +# chmod $ans $file +# done + +# Remove built-in functions +map d + +# Basic Functions +map set hidden! +map dD delete +map dd cut +map p paste +map y copy +map open +#map mf mkfile +#map mr sudomkfile +map md mkdir +#map ms $mkscript +map ch chmod +map bg setwallpaper +map o open_config +map r rename +map H top +map L bottom +map R reload +map C clear +map U unselect +map [[ top +map ]] bottom +# Other Function +map V push :!nvim +# Preview +#map - $ $XDG_CONFIG_HOME/lf/draw_img.sh $f diff --git a/.config/lf/scripts/draw_img.sh b/.config/lf/scripts/draw_img.sh new file mode 100755 index 0000000..5a70d5e --- /dev/null +++ b/.config/lf/scripts/draw_img.sh @@ -0,0 +1,67 @@ +#!/usr/bin/env bash + +clear_screen() { + printf '\e[%sH\e[9999C\e[1J%b\e[1;%sr' \ + "$((LINES-2))" "${TMUX:+\e[2J}" "$max_items" +} + +# Get a file's mime_type. +mime_type=$(file -bi "$1") + +# File isn't an image file, give warning. +if [[ $mime_type != image/* ]]; then + lf -remote "send $id echoerr 'Not an image'" + exit +fi + +w3m_paths=(/usr/{local/,}{lib,libexec,lib64,libexec64}/w3m/w3mi*) +read -r w3m _ < <(type -p w3mimgdisplay "${w3m_paths[@]}") +read -r LINES COLUMNS < <(stty size) + +# Get terminal window size in pixels and set it to WIDTH and HEIGHT. +export $(xdotool getactivewindow getwindowgeometry --shell) + +# Get the image size in pixels. +read -r img_width img_height < <("$w3m" <<< "5;${CACHE:-$1}") + +((img_width > WIDTH)) && { + ((img_height=img_height*WIDTH/img_width)) + ((img_width=WIDTH)) +} + +((img_height > HEIGHT)) && { + ((img_width=img_width*HEIGHT/img_height)) + ((img_height=HEIGHT)) +} + +# Variable needed for centering image. +HALF_HEIGHT=$(expr $HEIGHT / 2) +HALF_WIDTH=$(expr $WIDTH / 2) +HALF_IMG_HEIGHT=$(expr $img_height / 2) +HALF_IMG_WIDTH=$(expr $img_width / 2) +X_POS=$(expr $HALF_WIDTH - $HALF_IMG_WIDTH) +Y_POS=$(expr $HALF_HEIGHT - $HALF_IMG_HEIGHT) + +clear_screen +# Hide the cursor. +printf '\e[?25l' + +# Display the image. +printf '0;1;%s;%s;%s;%s;;;;;%s\n3;\n4\n' \ + ${X_POS:-0} \ + ${Y_POS:-0} \ + "$img_width" \ + "$img_height" \ + "${CACHE:-$1}" | "$w3m" &>/dev/null + +# Wait for user input. +read -ern 1 + +# Clear the image. +printf '6;%s;%s;%s;%s\n3;' \ + "${X_POS:-0}" \ + "${Y_POS:-0}" \ + "$WIDTH" \ + "$HEIGHT" | "$w3m" &>/dev/null + +clear_screen diff --git a/.config/lf/scripts/previewer b/.config/lf/scripts/previewer new file mode 100755 index 0000000..26e013d --- /dev/null +++ b/.config/lf/scripts/previewer @@ -0,0 +1,6 @@ +#!/bin/sh +case "$1" in + *.png|*.jpg|*.jpeg|*.mp4|*.mkv) mediainfo "$1";; + *) bat "$1";; + *.md) glow -p -s dark "$1";; +esac diff --git a/.config/lf/scripts/scope b/.config/lf/scripts/scope new file mode 100755 index 0000000..566b508 --- /dev/null +++ b/.config/lf/scripts/scope @@ -0,0 +1,124 @@ +#!/bin/sh + +set -C -f -u +IFS=$'\n' + +# ANSI color codes are supported. +# STDIN is disabled, so interactive scripts won't work properly + +# This script is considered a configuration file and must be updated manually. + +# Meanings of exit codes: +# code | meaning | action of ranger +# -----+------------+------------------------------------------- +# 0 | success | Display stdout as preview +# 1 | no preview | Display no preview at all +# 2 | plain text | Display the plain content of the file + +# Script rguments +FILE_PATH="${1}" # Full path of the highlighted file + +FILE_EXTENSION="${FILE_PATH##*.}" +FILE_EXTENSION_LOWER=$(echo ${FILE_EXTENSION} | tr '[:upper:]' '[:lower:]') + +# Settings +HIGHLIGHT_SIZE_MAX=262143 # 256KiB +HIGHLIGHT_TABWIDTH=8 +HIGHLIGHT_STYLE='pablo' +PYGMENTIZE_STYLE='autumn' + + +handle_extension() { + case "${FILE_EXTENSION_LOWER}" in + # Archive + a|ace|alz|arc|arj|bz|bz2|cab|cpio|deb|gz|jar|lha|lz|lzh|lzma|lzo|\ + rpm|rz|t7z|tar|tbz|tbz2|tgz|tlz|txz|tZ|tzo|war|xpi|xz|Z|zip) + atool --list -- "${FILE_PATH}" + bsdtar --list --file "${FILE_PATH}" + exit 1;; + rar) + # Avoid password prompt by providing empty password + unrar lt -p- -- "${FILE_PATH}" + exit 1;; + 7z) + # Avoid password prompt by providing empty password + 7z l -p -- "${FILE_PATH}" + exit 1;; + + # PDF + pdf) + # Preview as text conversion + pdftotext -l 10 -nopgbrk -q -- "${FILE_PATH}" - + mutool draw -F txt -i -- "${FILE_PATH}" 1-10 + exiftool "${FILE_PATH}" + exit 1;; + + # BitTorrent + torrent) + transmission-show -- "${FILE_PATH}" + exit 1;; + + # OpenDocument + odt|ods|odp|sxw) + # Preview as text conversion + odt2txt "${FILE_PATH}" + exit 1;; + + # HTML + htm|html|xhtml) + # Preview as text conversion + w3m -dump "${FILE_PATH}" + lynx -dump -- "${FILE_PATH}" + elinks -dump "${FILE_PATH}" + ;; # Continue with next handler on failure + esac +} + +handle_mime() { + local mimetype="${1}" + case "${mimetype}" in + # Text + text/* | */xml) + # Syntax highlight + if [ "$( stat --printf='%s' -- "${FILE_PATH}" )" -gt "${HIGHLIGHT_SIZE_MAX}" ]; then + exit 2 + fi + if [ "$( tput colors )" -ge 256 ]; then + local pygmentize_format='terminal256' + local highlight_format='xterm256' + else + local pygmentize_format='terminal' + local highlight_format='ansi' + fi + highlight --replace-tabs="${HIGHLIGHT_TABWIDTH}" --out-format="${highlight_format}" \ + --style="${HIGHLIGHT_STYLE}" --force -- "${FILE_PATH}" + # pygmentize -f "${pygmentize_format}" -O "style=${PYGMENTIZE_STYLE}" -- "${FILE_PATH}" + exit 2;; + + # Image + image/*) + # Preview as text conversion + # img2txt --gamma=0.6 -- "${FILE_PATH}" && exit 1 + exiftool "${FILE_PATH}" + exit 1;; + + # Video and audio + video/* | audio/*|application/octet-stream) + mediainfo "${FILE_PATH}" + exiftool "${FILE_PATH}" + exit 1;; + esac +} + +handle_fallback() { + echo '----- File Type Classification -----' && file --dereference --brief -- "${FILE_PATH}" + exit 1 +} + + +MIMETYPE="$( file --dereference --brief --mime-type -- "${FILE_PATH}" )" +handle_extension +handle_mime "${MIMETYPE}" +handle_fallback + +exit 1