1 | # Written from scratch by Tom Tromey (tromey@cns.caltech.edu)
|
---|
2 | #
|
---|
3 | # manpage -- find and print a manual page.
|
---|
4 | # usage: manpage section name [printing]
|
---|
5 | #
|
---|
6 | function manpage ()
|
---|
7 | {
|
---|
8 | local i h cmd zot sec
|
---|
9 | local num="$1"
|
---|
10 | local page="$2"
|
---|
11 | local printing="$3"
|
---|
12 | local mp
|
---|
13 |
|
---|
14 | mp="${MANPATH:-/usr/man}"
|
---|
15 | if [ "$#" -lt 2 ]; then return 1; fi # should print usage
|
---|
16 | if [ "$num" != "" ]; then
|
---|
17 | sec="${num%%[a-zA-Z]*}"
|
---|
18 | else
|
---|
19 | sec='[168234571lnpo]'
|
---|
20 | num="$sec"
|
---|
21 | fi
|
---|
22 | for i in $(echo "$mp" | tr : ' '); do
|
---|
23 | if [ ! -d "$i" ]; then continue; fi
|
---|
24 | file="$i"/man"$sec"/"$page"."$num"*
|
---|
25 | set $file
|
---|
26 | file="$1"
|
---|
27 | if [ -f "$file" ]; then
|
---|
28 | zot=$(sed 1q "$file")
|
---|
29 | cmd=${MANROFF:-"nroff -man - | col | cat -s"}
|
---|
30 | h=${zot##"'"'\"'}
|
---|
31 | if [ "$h" != "$zot" ]; then
|
---|
32 | while [ "$h" != "" ]; do
|
---|
33 | case "$h" in
|
---|
34 | *e) cmd="${MANEQN:-neqn} | $cmd";;
|
---|
35 | *r) cmd="refer | $cmd";;
|
---|
36 | *t) cmd="tbl | $cmd";;
|
---|
37 | *v) cmd="vgrind | $cmd";;
|
---|
38 | *) ;; # should print error
|
---|
39 | esac
|
---|
40 | h=${h%?}
|
---|
41 | done
|
---|
42 | fi
|
---|
43 | if [ "$printing" != "" ]; then
|
---|
44 | (cd "$i"; eval "$cmd") < "$file" | ${PAGER:-more}
|
---|
45 | else
|
---|
46 | (cd "$i"; eval "$cmd") < "$file" > /tmp/manpage-$$
|
---|
47 | ${PAGER:-more} /tmp/manpage-$$
|
---|
48 | rm -f /tmp/manpage-$$
|
---|
49 | fi
|
---|
50 | break
|
---|
51 | fi
|
---|
52 | done
|
---|
53 | }
|
---|
54 |
|
---|
55 | function whatis_internal ()
|
---|
56 | {
|
---|
57 | local j
|
---|
58 | for j in $(echo "$MANPATH" | tr : ' '); do
|
---|
59 | if [ -f "$j/whatis" ]; then
|
---|
60 | eval $2 -i -e "$1" $j/whatis
|
---|
61 | fi
|
---|
62 | done
|
---|
63 | }
|
---|
64 |
|
---|
65 | function whatis ()
|
---|
66 | {
|
---|
67 | local name=$(basename "$1")
|
---|
68 | whatis_internal "$name" "grep -w"
|
---|
69 | }
|
---|
70 |
|
---|
71 | function apropos ()
|
---|
72 | {
|
---|
73 | whatis_internal "$1" "grep -F"
|
---|
74 | }
|
---|
75 |
|
---|
76 | # Note: "-" and "-t" together not supported. This man could be
|
---|
77 | # made a lot better, but it does everything I want.
|
---|
78 | function man ()
|
---|
79 | {
|
---|
80 | local PAGER printing mpath MANROFF num
|
---|
81 | mpath="${MANPATH:-/usr/man}"
|
---|
82 | while true; do
|
---|
83 | case "$1" in
|
---|
84 | -) PAGER=cat
|
---|
85 | printing= ;;
|
---|
86 | -t)
|
---|
87 | MANROFF=${TROFF:-"ptroff -man -t"}
|
---|
88 | PAGER="${TCAT:-lpr}"
|
---|
89 | printing=yes ;;
|
---|
90 | -M)
|
---|
91 | mpath="$2"
|
---|
92 | shift;;
|
---|
93 | *) break;;
|
---|
94 | esac
|
---|
95 | shift
|
---|
96 | done
|
---|
97 | local MANPATH="$mpath"
|
---|
98 | case "$1" in
|
---|
99 | -f | -k)
|
---|
100 | local g a
|
---|
101 | if [ "$1" = "-f" ]; then
|
---|
102 | g="grep -w"
|
---|
103 | a=$(basename "$2")
|
---|
104 | else
|
---|
105 | g="grep -F"
|
---|
106 | a="$2"
|
---|
107 | fi
|
---|
108 | whatis_internal "$a" "$g"
|
---|
109 | ;;
|
---|
110 | [0-9npol] | [0-9][a-z]* | new | public | old | local)
|
---|
111 | if [ "$1" = "new" ]; then
|
---|
112 | num=n
|
---|
113 | elif [ "$1" = "public" ]; then
|
---|
114 | num=p
|
---|
115 | elif [ "$1" = "old" ]; then
|
---|
116 | num=o
|
---|
117 | elif [ "$1" = "local" ]; then
|
---|
118 | num=l
|
---|
119 | else
|
---|
120 | num="$1"
|
---|
121 | fi
|
---|
122 | shift
|
---|
123 | manpage "$num" "$1" "$printing"
|
---|
124 | ;;
|
---|
125 | *)
|
---|
126 | manpage "$num" "$1" "$printing"
|
---|
127 | ;;
|
---|
128 | esac
|
---|
129 | }
|
---|