File: lessopen

package info (click to toggle)
jless 332iso240-1
  • links: PTS
  • area: main
  • in suites: hamm
  • size: 1,228 kB
  • ctags: 1,482
  • sloc: ansic: 16,120; sh: 190; makefile: 142; awk: 7
file content (115 lines) | stat: -rw-r--r-- 3,313 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
#!/bin/sh
#
# lessfile/lesspipe
#
# Less filter for viewing non text files.
#
# Written by: Behan Webster <behanw@pobox.com>
# Many Modifications by Darren Stalder
#
# 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
    TMPFILE=`mktemp $TMPDIR/$LESSFILE.XXXXXX`

      # possibly redirect stdout to a file for lessfile
    ( if [ $BASENAME = $LESSFILE ]; then exec > $TMPFILE; fi

      # Decode file for less
      case "$1" in
	*.arj|*.ARJ)
	    if [ -x /usr/bin/unarj ]; then unarj -v $1; else echo "No unarj available"; fi ;;

        *.deb)
	    echo "$1:"; dpkg --info $1; /bin/echo -e '\n*** Contents:'; dpkg-deb --contents $1 ;;

	*.gif|*.jpeg|*.jpg|*.pcd|*.png|*.tga|*.tiff|*.tif)
	    if [ -x /usr/X11R6/bin/identify ]; then /usr/X11R6/bin/identify $1;
	    else /bin/echo -e "No identify available\nInstall ImageMagick to browse images"; fi ;;

        *.tar.gz|*.tgz|*.tar.Z)
	    tar tzvf $1 ;;

	*.gz|*.Z|*.z)
	    gzip -dc $1 ;;

        *.tar)
	    tar tvf $1 ;;

        *.zip|*.ZIP)
	    if [ -x /usr/bin/unzip ]; then unzip -v $1; else echo "No unzip 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 $0) = $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