diff --git a/private_dot_config/lf/executable_scopelf.sh b/private_dot_config/lf/executable_scopelf.sh new file mode 100644 index 0000000..aa35aca --- /dev/null +++ b/private_dot_config/lf/executable_scopelf.sh @@ -0,0 +1,127 @@ +#!/bin/sh + +set -C -f -u +IFS=$'\n' + +## This is a minimal version of rangers scope.sh preview script, written for lf + +# 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 + 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 + diff --git a/private_dot_config/lf/lfrc b/private_dot_config/lf/lfrc index 5681b9d..691153d 100644 --- a/private_dot_config/lf/lfrc +++ b/private_dot_config/lf/lfrc @@ -1,3 +1,51 @@ +# interpreter for shell commands +set shell sh + +# set '-eu' options for shell commands +# These options are used to have safer shell commands. Option '-e' is used to +# exit on error and option '-u' is used to give error for unset variables. +# Option '-f' disables pathname expansion which can be useful when $f, $fs, and +# $fx variables contain names with '*' or '?' characters. However, this option +# is used selectively within individual commands as it can be limiting at +# times. +set shellopts '-eu' + +# set internal field separator (IFS) to "\n" for shell commands +# This is useful to automatically split file names in $fs and $fx properly +# since default file separator used in these variables (i.e. 'filesep' option) +# is newline. You need to consider the values of these options and create your +# commands accordingly. +set ifs "\n" + +# leave some space at the top and the bottom of the screen +set scrolloff 10 + +# Use the `dim` attribute instead of underline for the cursor in the preview pane +set cursorpreviewfmt "\033[7;2m" + +# use enter for shell commands +map shell + +# show the result of execution of previous commands +map ` !true + +# mkdir command. See wiki if you want it to select created dir +map a :push %mkdir"" + +# use '' key for 'delete' command map delete + +set drawbox true +set info size +set dircounts + +# preview script from ranger +set previewer ~/.config/lf/scopelf.sh +map i $~/.config/lf/scopelf.sh $f | less -R + +# use S for opening a shell map S $zsh +# clear mark from files after pasting +map p : paste; clear +