xzless: Support compressed standard input
authorJonathan Nieder <jrnieder@gmail.com>
Sun, 9 Aug 2009 18:22:12 +0000 (13:22 -0500)
committerLasse Collin <lasse.collin@tukaani.org>
Sun, 9 Aug 2009 19:27:22 +0000 (22:27 +0300)
It can be somewhat confusing that

less < some_file.txt

works fine, whereas

xzless < some_file.txt.xz

does not.  Since version 429, ‘less’ allows a filter specified in
the LESSOPEN environment variable to preprocess its input even if
it comes from standard input, if $LESSOPEN begins with ‘|-’.  So
set $LESSOPEN to take advantage of this feature.

Check less’s version at runtime so xzless can continue to work
with older versions.

src/scripts/xzless.in

index 6639943..a3da697 100644 (file)
@@ -46,7 +46,13 @@ if test "${LESSMETACHARS+set}" != set; then
        LESSMETACHARS="$space$tab$nl'"';*?"()<>[|&^`#\$%=~'
 fi
 
-LESSOPEN="|$xz -cdfq -- %s"
+if test "$(less -V | { read ver && echo ${ver#less }; })" -ge 429; then
+       # less 429 or later: LESSOPEN pipe will be used on
+       # standard input if $LESSOPEN begins with |-.
+       LESSOPEN="|-$xz -cdfq -- %s"
+else
+       LESSOPEN="|$xz -cdfq -- %s"
+fi
 export LESSMETACHARS LESSOPEN
 
 exec less "$@"