It’s not a new concept, but here is my take on it:
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
|
function man {
# We can get the actual path to the man command here, so we can override
# it with our function name.
MAN=`which man`
# Change these two if you are not on OS X.
CACHE_DIR="${HOME}/Library/Caches/manpages"
OPEN="open"
# If we don't have any arguments, use the nice man error message
if [ ! $1 ]; then
$MAN
return
fi
# If we have an argument that clashes with what we are wanting to be
# able to do, pass the whole command through.
for ARG in $*; do
case $ARG in
-[dfkKwtWP])
$MAN $*
return;;
esac
done
# Make sure our cache directory exists.
mkdir -p $CACHE_DIR
# Get the man page(s) that match our query.
MAN_FILES=`$MAN -w $*`
for MAN_FILE in $MAN_FILES; do
# Get the name of the man file, and the section.
MAN_PAGE=`basename "$MAN_FILE" | cut -d \. -f 1-2 | sed 's/\./(/' | sed 's/$/)/'`
# Our PDF will be in this location
PDF_FILE="${CACHE_DIR}/${MAN_PAGE}"
# If we actually have a man file that matches
if [ -n "$MAN_FILE" ]; then
# See if the man file is newer than our cached PDF, and if it is,
# then generate a new PDF. This works even if $PDF_FILE does not
# exist.
if [ $MAN_FILE -nt $PDF_FILE ]; then
$MAN -t $* | pstopdf -i -o "$PDF_FILE"
fi
# Then display the file.
$OPEN "$PDF_FILE"
fi
done
}
|