LoginSignup
11
13

More than 5 years have passed since last update.

man読書のためのman2pdf

Last updated at Posted at 2016-04-06

はじめに

皆さんはman読書やってますか!?

ちなみに僕はあんまりやってないです。

でも,ちょっと時間のあるときにいつも使っているコマンドやツールのmanページを読むと,それまで知らなかった便利機能やオプションを知ることができていろいろ効率が上がったり,自分でツールを作る際の参考になったりしてとても良いと思います。

良いことであることは分かっているので,これを習慣化すればいいわけです。

時間があるとき(ただしPCの前にいない時)に僕が何をやるかというと,スマホをおもむろに取り出して,ニュースやTwitterなどを眺めていることが多いです。

そこで,スマホあるいはタブレットでmanページを読めるように,manページをpdf化してDropboxに保存することにしました。変換用のコマンドを元にシェルスクリプトを書いたのが以下となります。

man2pdf

dotfiles/man2pdf at master · ssh0/dotfiles

#!/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にして出力しています。

実際にタブレットで表示すると以下のようになります。

ファイル 2016-04-06 20 27 51.png

補完を有効にして使い勝手を良くする

普通にmanコマンドを打つときにはTabキーを押すとコマンド名を補完してくれて便利なので,man2pdfコマンドに関しても,補完が使えるようにしておきます。

自分がZshを使っているのでZshに限って話を進めます。申し訳ありません。

~/.zshrcなどで

compdef _man man2pdf

などと書いていれば,manコマンド用の補完関数であるところの_manman2pdfコマンドに関しても適用することができ,補完を利用することができるようになります。

問題点と今後の課題

日本語を含む場合にpdf化することができません。

man側の出力エンコーディングを以下のようにUTF8に指定すると,端末内では日本語が表示されるようになりますが,ps2pdfに食わせようとするとエラーが走ります。

man -R UTF8 -t man

フォントがないというだけの問題のような気もしますが,今のところ解決していません。

もしこういった事情(文字コード,gsスクリプトのフォントなど)についてご存知の方いたら,アドバイスよろしくお願いいたします(本題)。

11
13
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
13