#!/bin/bash # # lessfile/lesspipe # $Id: lessopen,v 1.4 1998/05/12 09:37:46 torin Exp $ # # Less filter for viewing non text files. # # Written by: Behan Webster # Many Modifications by Darren Stalder ########## # Modified by Marek Podmaka ########## # # combined lessfile and lesspipe to avoid duplication of decode stage # shell is sure icky. I'm real tempted to rewrite the whole thing in Perl # # Unfortunately, this means that I have filename dependencies sprinkled # throughout the code. If you don't want lessfile to be called that, # you'll need to change the LESSFILE envar below. # # Usage: eval $(lessfile) or eval $(lesspipe) # # less passes in: # $1 filename to be viewed with less (used by LESSOPEN) # and possibly (if used by lessfile) # $2 filename that was created during LESSOPEN TMPDIR=${TMPDIR:-/tmp} BASENAME=$(basename $0) LESSFILE=lessfile if [ $# -eq 1 ] ; then # we were called as LESSOPEN # generate filename for possible use by lesspipe umask 077 if [ $BASENAME == $LESSFILE ]; then TMPFILE=$(tempfile -d $TMPDIR -p lessf); fi # possibly redirect stdout to a file for lessfile ( if [ $BASENAME == $LESSFILE ]; then exec > $TMPFILE; fi # Decode file for less case $(echo $1 | tr '[:upper:]' '[:lower:]') in *.arj) if [ -x /usr/bin/unarj ]; then unarj l $1; else echo "No unarj available"; fi ;; *.tbz|*.tar.bz2) tar tjvf $1 ;; *.bz) if [ -x /usr/bin/bunzip ]; then bunzip -c $1; else echo "No bunzip available"; fi ;; *.bz2) if [ -x /usr/bin/bunzip2 ]; then bunzip2 -dc $1; else echo "No bunzip2 available"; fi ;; *.rar|*.r0?) rar l $1 ;; *.deb) echo "$1:"; dpkg --info $1; echo -e '\n*** Contents:'; dpkg-deb --contents $1 ;; *.gif|*.jpeg|*.jpg|*.pcd|*.png|*.tga|*.tiff|*.tif) if [ -x /usr/bin/identify ]; then /usr/bin/identify $1; else echo -e "No identify available\nInstall ImageMagick to browse images"; fi ;; *.lzh) if [ -x /usr/bin/lha ]; then lha v $1; else echo "No lha available"; fi ;; *.rpm) if [ -x /usr/bin/rpm ]; then echo "$1:"; rpm -q -i -p $1; echo -e '\n*** Contents:'; rpm -q -l -p $1; else echo "rpm isn't available, no query on rpm package possible"; fi ;; *.tar.gz|*.tgz|*.tar.z) tar tzvf $1 ;; # Note that this is out of alpha order so that we don't catch the gzipped tar files. #' *.gz|*.z) gzip -dc $1 ;; *.tar) tar tvf $1 ;; *.zip) if [ -x /usr/bin/unzip ]; then unzip -v $1; else echo "No unzip available"; fi ;; *.zoo) if [ -x /usr/local/bin/zoo ]; then zoo v $1; else echo "No zoo available"; fi ;; esac ) 2>/dev/null if [ $BASENAME == $LESSFILE ]; then if [ -s $TMPFILE ]; then echo $TMPFILE; fi fi elif [ $# -eq 2 ] ; then # # we were called as LESSCLOSE # delete the file created if we were lessfile # if [ $BASENAME == $LESSFILE ]; then if [ -f $2 -a -O $2 ]; then rm -f $2; else echo "Error in deleting $2" > /dev/tty; fi fi elif [ $# -eq 0 ] ; then # # must setup shell to use LESSOPEN/LESSCLOSE # # I have no idea how some of the more esoteric shells (es, rc) do things. # If they don't do things in a Bourne manner, send me a patch and I'll incorporate it. # # first determine the full path of lessfile/lesspipe # if you can determine a better way to do this, send me a patch, I've not shell-scripted for many a year FULLPATH=$(FOO=$(command -v $0); cd $(dirname $FOO);pwd)/$BASENAME case "$SHELL" in *csh) if [ $BASENAME == $LESSFILE ]; then echo "setenv LESSOPEN \"$FULLPATH '%s'\";" echo "setenv LESSCLOSE \"$FULLPATH '%s' '%s'\";" else echo "setenv LESSOPEN \"| $FULLPATH '%s'\";" echo "setenv LESSCLOSE \"$FULLPATH '%s' '%s'\";" fi ;; *) if [ $BASENAME == $LESSFILE ]; then echo "export LESSOPEN=\"$FULLPATH '%s'\";" echo "export LESSCLOSE=\"$FULLPATH '%s' '%s'\";" else echo "export LESSOPEN=\"| $FULLPATH '%s'\";" echo "export LESSCLOSE=\"$FULLPATH '%s' '%s'\";" fi ;; esac else echo "Usage: eval \$($BASENAME)" exit fi