`pdfman` converts UNIX manual pages to PDF documents using Ghostscript's
`ps2pdf`(1) or Apple's `pstopdf`(1) command (included in macOS up to version 13
-"Ventura") and displays them by calling `open`(1) on the resulting PDF file.
+"Ventura") and displays them by calling `xdg-open`(1) or `open`(1) on the
+resulting PDF file.
This enhances the useability of the manual pages quite a bit, because you now
can make use of your preferred PDF file viewer and all of its functionality.
The `pdfman` script makes use of the following tools, which need to be available
on the local system in the default search `$PATH`:
-- `open`(1)
+- `xdg-open`(1) _or_ `open`(1).
- Either `ps2pdf`(1) of the Ghostscript suite _or_ `pstopdf`(1) which was
included in Apple macOS up to version 13 "Ventura".
# Enable verbose mode.
VERBOSE="-p"
;;
+ "-F")
+ # Force creating a PDF!
+ FORCE="-F"
+ ;;
"-T")
# Force using man(1)!
shift
man "$@"
exit $?
;;
- "--help")
- echo "Usage: pdfman [-v] [-T] [<section>] <topic> ..." >&2
- echo " pdfman <man(1) options> <arguments> ..." >&2
- echo " pdfman {--help|--version>}" >&2
+ "--help"|"-h")
+ echo "Usage:" >&2
+ echo " $0 [-v] [-F] [<section>] <topic> ..." >&2
+ echo " $0 -T [<section>] <topic> ..." >&2
+ echo " $0 <man(1) options> <arguments> ..." >&2
+ echo " $0 {-h|--help|--version>}" >&2
+ echo >&2
+ echo " -F Force PDF mode, even when not running on an interactive terminal"
+ echo " -T Always use the man(1) command."
+ echo " -v Enable verbose status messages." >&2
echo >&2
- man --help
+ man -h >&2
exit 2
;;
"--version")
echo "pdfman, version 1" >&2
- man --version
+ man --version 2>/dev/null
exit 2
;;
-*)
exit $?
fi
-# Make sure there is a terminal available ...
-if [[ ! -t 1 ]]; then
+# Fall back to the man(1) command when "force mode" is not active and no
+# terminal is connected to stdout:
+if [[ -z "$FORCE" ]] && [[ ! -t 1 ]]; then
man "$@"
exit $?
fi
-# Make sure required tools are available ...
-if ! command -v open >/dev/null; then
+
+# Detect "opener" to use ...
+if command -v xdg-open >/dev/null; then
+ open_command=xdg-open
+elif command -v open >/dev/null; then
+ open_command=open
+else
man "$@"
exit $?
fi
man "$@"
exit $?
fi
-[[ -n "$VERBOSE" ]] && echo "Using ${ps_to_pdf_function#*_}(1) ..."
+
+[[ -n "$VERBOSE" ]] && echo "Using ${ps_to_pdf_function#*_}(1) and ${open_command}(1) ..."
# Try to move old cache directory ...
if [[ -d "$HOME/.pdfman" && ! -d "$CACHE" ]]; then
fi
[[ -n "$VERBOSE" ]] && echo "Opening \"$PDF\" ..."
- open "$PDF"
+ $open_command "$PDF"
done