はじめに
皆さんはman読書やってますか!?
ちなみに僕はあんまりやってないです。
でも,ちょっと時間のあるときにいつも使っているコマンドやツールのmanページを読むと,それまで知らなかった便利機能やオプションを知ることができていろいろ効率が上がったり,自分でツールを作る際の参考になったりしてとても良いと思います。
良いことであることは分かっているので,これを習慣化すればいいわけです。
時間があるとき(ただしPCの前にいない時)に僕が何をやるかというと,スマホをおもむろに取り出して,ニュースやTwitterなどを眺めていることが多いです。
そこで,スマホあるいはタブレットでmanページを読めるように,manページをpdf化してDropboxに保存することにしました。変換用のコマンドを元にシェルスクリプトを書いたのが以下となります。
man2pdf
# !/bin/bash
# written by Shotaro Fujimoto (https://github.com/ssh0)
# first edited: 2016-03-29
# =#=#=
# Convert man page to pdf file using ps2pdf
#
# You can change `${output_dir}`
# (Dropbox is useful; you can read the pdf documents anywhere)
#
# Example:
#
# ```
# man2pdf awk
# ```
# =#=
output_dir="$HOME/Dropbox/document/pdf/man"
if ret="$(command -p man -t "$1")"; then
echo "${ret}" | ps2pdf -sPAPERSIZE=a4 -sOutputFile="${output_dir}/$1".pdf - &&
(echo "[man2pdf] Succefully done" >&2 ;
echo "[man2pdf] outfile file is '${output_dir}/$1.pdf'" >&2)
fi
特に変わったことはしていませんが,$output_dir
にDropboxのフォルダを指定することで,Dropboxが使える端末ならどこからでもこのpdfを見ることができます。
ちょっとだけ解説すると,
man -t <command>
で標準出力にpostscript形式として変換されてmanページが出力されるので,これを受けとってps2pdf
コマンドを用いてpdfファイルに変換しています。
ps2pdf
コマンド自体はgs
コマンドのオプションを受け取ることができるそうなので,用紙サイズをA4にして出力しています。
実際にタブレットで表示すると以下のようになります。

補完を有効にして使い勝手を良くする
普通にmanコマンドを打つときにはTabキーを押すとコマンド名を補完してくれて便利なので,man2pdfコマンドに関しても,補完が使えるようにしておきます。
自分がZshを使っているのでZshに限って話を進めます。申し訳ありません。
~/.zshrcなどで
compdef _man man2pdf
などと書いていれば,manコマンド用の補完関数であるところの_man
をman2pdf
コマンドに関しても適用することができ,補完を利用することができるようになります。
問題点と今後の課題
日本語を含む場合にpdf化することができません。
man側の出力エンコーディングを以下のようにUTF8に指定すると,端末内では日本語が表示されるようになりますが,ps2pdfに食わせようとするとエラーが走ります。
man -R UTF8 -t man
フォントがないというだけの問題のような気もしますが,今のところ解決していません。
もしこういった事情(文字コード,gs
スクリプトのフォントなど)についてご存知の方いたら,アドバイスよろしくお願いいたします(本題)。