summary refs log tree commit diff stats
path: root/ranger/data/scope.sh
diff options
context:
space:
mode:
Diffstat (limited to 'ranger/data/scope.sh')
-rwxr-xr-xranger/data/scope.sh59
1 files changed, 59 insertions, 0 deletions
diff --git a/ranger/data/scope.sh b/ranger/data/scope.sh
new file mode 100755
index 00000000..30ae18ea
--- /dev/null
+++ b/ranger/data/scope.sh
@@ -0,0 +1,59 @@
+#!/bin/bash
+
+# This script is called whenever you preview a file.
+# Its output is used as the preview.  ANSI color codes are supported.
+
+# NOTES: This script is considered a configuration file.  If you upgrade
+# ranger, it will be left untouched. (You must update it yourself)
+# NEVER make this script interactive. (by starting mplayer or something)
+
+# 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
+# 3    | fix width  | success. Don't reload when width changes
+# 4    | fix height | success. Don't reload when height changes
+# 5    | fix both   | success. Don't ever reload
+
+# Meaningful aliases for arguments:
+path="$1"    # Full path of the selected file
+width="$2"   # Width of the preview pane (number of fitting characters)
+height="$3"  # Height of the preview pane (number of fitting characters)
+
+# Find out something about the file:
+mimetype=$(file --mime-type -Lb "$path")
+extension=$(echo "$path" | grep '\.' | grep -o '[^.]\+$')
+
+# Other useful stuff
+maxln=200                                   # print up to $maxln lines
+function have { type -P "$1" > /dev/null; } # test if program is installed
+
+case "$extension" in
+	# Archive extensions:
+	7z|a|ace|alz|arc|arj|bz|bz2|cab|cpio|deb|gz|jar|lha|lz|lzh|lzma|lzo|\
+	rar|rpm|rz|t7z|tar|tbz|tbz2|tgz|tlz|txz|tZ|tzo|war|xpi|xz|Z|zip)
+		atool -l "$path" | head -n $maxln && exit 3
+		exit 1;;
+	pdf)
+		pdftotext -q "$path" - | head -n $maxln && exit 3
+		exit 1;;
+	# HTML Pages:
+	htm|html|xhtml)
+		have lynx   && lynx   -dump "$path" | head -n $maxln && exit 5
+		have elinks && elinks -dump "$path" | head -n $maxln && exit 5
+		;; # fall back to highlight/cat if theres no lynx/elinks
+esac
+
+case "$mimetype" in
+	# Syntax highlight for text files:
+	text/* | */xml)
+		(highlight --ansi "$path" || cat "$path") | head -n $maxln
+		exit 5;;
+	# Ascii-previews of images:
+	image/*)
+		img2txt --gamma=0.6 --width="$width" "$path" && exit 4 || exit 1;;
+esac
+
+exit 1