diff --git a/.config/lf/lfrc b/.config/lf/lfrc new file mode 100644 index 0000000..4d9857e --- /dev/null +++ b/.config/lf/lfrc @@ -0,0 +1,65 @@ +# Luke's lf settings + +# Basic vars +set shell sh +set previewer ~/.config/lf/scope +set shellopts '-eu' +set ifs "\n" +set scrolloff 10 + +# cmds/functions +cmd open ${{ + case $(file --mime-type $f -b) in + text/troff) man ./ $f;; + text/*) $EDITOR $fx;; + image/x-xcf|image/svg+xml) setsid gimp $f >/dev/null 2>&1 & ;; + image/*) rotdir $f | setsid sxiv -ai >/dev/null 2>&1 & ;; + audio/*) mpv --input-ipc-server=/tmp/mpvsoc$(date +%%s) $f ;; + video/*) setsid mpv --input-ipc-server=/tmp/mpvsoc$(date +%%s) $f -quiet >/dev/null 2>&1 & ;; + application/pdf) setsid zathura $fx >/dev/null 2>&1 & ;; + *) for f in $fx; do setsid $OPENER $f >/dev/null 2>&1 & done;; + esac +}} + +cmd rename %[ -e $1 ] && printf "file exists" || mv $f $1 + +cmd delete ${{ + set -f + printf "%s\n\t" "$fx" + printf "delete?[y/n]" + read ans + [ $ans = "y" ] && rm -rf $fx +}} + +cmd moveto ${{ + set -f + clear; echo "Move to where?" + dest="$(cut -d' ' -f2- ~/.config/directories | fzf)" && + eval mv -iv $fx $dest && + notify-send "🚚 File(s) moved." "File(s) moved to $dest." +}} + +cmd copyto ${{ + set -f + clear; echo "Copy to where?" + dest="$(cut -d' ' -f2- ~/.config/directories | fzf)" && + eval cp -ivr $fx $dest && + notify-send "📋 File(s) copied." "File(s) copies to $dest." +}} + +# Bindings +map c $lf -remote "send $id cd $(cut -d' ' -f2 ~/.config/directories | fzf)" +map J $lf -remote "send $id cd $(cut -d' ' -f2 ~/.config/directories | fzf)" +map gh +map g top +map D delete +map C copyto +map M moveto +map a push %mkdir +map r push :rename +map shell +map R reload +map x $$f +map X !$f +map o &mimeopen $f +map O $mimeopen --ask $f diff --git a/.config/lf/scope b/.config/lf/scope new file mode 100755 index 0000000..2406199 --- /dev/null +++ b/.config/lf/scope @@ -0,0 +1,126 @@ +#!/bin/sh + +set -C -f -u +#IFS=$'\n' +IFS="$(printf '%b_' '\n')"; IFS="${IFS%_}" + +# 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 arguments +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 + 1) man ./ "${FILE_PATH}" | col -b ;; + 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