前回に引き続きFreeBSDの日本語マニュアル。
まだ課題が残っているので、jmanで困っていない人はjmanを使えば良いと思います。
前提条件
以下の条件を満たす人向け。
- FreeBSD 9以降を使っている。
- 環境変数
LANG
にja_JP.UTF-8
を指定している - パッケージの依存関係で、ja-groff(ports/japanese/groff)ではなくgroff(ports/textproc/groff)をインストールしたい
準備
以下のパッケージをpkgngもしくはportsからインストールする
- groff(ports/textproc/groff)
-
ja-nkf(ports/japanese/nkf)(標準のiconvを使うように修正) - ja-man-doc(ports/jamanese/man-doc)
※ ja-man-docは、/usr/doc/ja_JP.eucJP/man で make installしても良い。
インストール
必要なファイルは、https://gist.github.com/false-git/7183d616527e8efda181 にあります。
ディレクトリの準備
好きなところにディレクトリを作成する。
% mkdir jman
% cd jman
ファイルを揃える
上記gistから、スクリプトを持ってきます。
% fetch https://gist.githubusercontent.com/false-git/7183d616527e8efda181/raw/3751937e803e86b296f635798d5793ae082d753b/makejman.sh
実行する
% sudo ./makejman.sh
rootで実行するので、不安な人はファイルの中身を見ながら1ステップずつ実行してください。
中身の説明
/usr/local/bin/man の作成
cp /usr/bin/man /usr/local/bin/
cd /usr/local/bin
patch < $PDIR/man.path
/usr/bin/man を /usr/local/bin/ にコピーし、パッチをあてます。
以前のものと同じです。
mdoc.local の修正
cd /usr/local/share/groff/site-tmac
V=`uname -r|sed 's/-.*//'`
echo ".ds default-operating-system FreeBSD\\~$V" >> mdoc.local
cat $PDIR/mdoc.local.add >> mdoc.local
この修正により、以下のような行がmdoc.localに追加されます。
.ds default-operating-system FreeBSD\~10.1
.if "\*[locale]"ja.UTF-8" \{\
.mso mdoc_ja.local
.mso ja.tmac
.\}
default-operating-system は、uname -r から持ってきています。
これは、manページのフッタに表示されます。
ハードコードしてしまうので、FreeBSDのバージョンが変わるとおかしくなります。(オリジナルのmanはどうやって解決しているのだろう?)
その後の.if
で、localeがja.UTF-8
のときのみmdoc_ja.localとja.tmacを読み込むようにしています。
localeは、manコマンドからgroffに渡されるのですが、ja.tmacの中で上書きされてしまうため、groffのオプションに-mjaを付ける代わりに、ここで読み込みます。
mdoc_ja.local の作成
tar xzOf $PDIR/tmac-20030521_2.tar.gz tmac-20030521_2/mdoc/ja.eucJP | iconv -f euc-jp -t utf-8 | sed s/japanese-iso-8bit/utf-8/ | /usr/local/bin/preconv > mdoc_ja.local
FreeBSDのja-groffの配布物であるtmac-20030521_2.tar.gz から、ja.eucJPを取り出し、preconvを使ってgroffが読めるコードに変換しています。
シンボリックリンクの生成
ln -s /usr/share/man/ja /usr/share/man/ja_JP.UTF-8
ln -s /usr/local/man/ja /usr/local/man/ja_JP.UTF-8
manコマンドは、以下の順で探すため、jmanが検索する ja はそのままでは検索されないため、リンクを張る。
-
lang_country.charset
(ja_JP.UTF-8
) -
lang.charset
(ja.UTF-8
) -
en.charset
(en.UTF-8
)
元に戻す方法
- /usr/local/bin/man を削除する
- /usr/local/share/groff/site-tmac/mdoc_ja.local を削除する
- /usr/local/share/groff/site-tmac/mdoc.local の 最後の5行を削除する
- /usr/share/man/ja_JP.UTF-8 を削除する
- /usr/local/man/ja_JP.UTF-8 を削除する
※ /usr/local/share/groff/site-tmac/mdoc.local のみオリジナルのファイルを修正するので、必要であればインストールの前にバックアップしてください。もし、なくしてしまっても、groffを再インストールすれば復元されます。
解決する問題
- UTF-8の環境で、日本語のマニュアルが表示できます。
- manページのヘッダ/フッタも正しく表示されます。
- 「書式」セクションも正しくフォーマットされます。
解決しない問題
man patch すると、以下のようになります。
ちなみに、jmanだと以下のようになります。
どうも、まだ割り付けに問題があるようです。
jgroffには、EUCの文字が改行で区切られている場合には、改行を空白に変換せずに結合するようなパッチがあたっているそうなので、その辺の問題かも知れません。
追記
patch のマニュアルが正しく整形されない理由がわかりました。
man コマンドがgroffに渡すオプションのうち、tmacを指定するのは -mtty-char
と -man
です。
-man
の指定により、/usr/local/share/groff/current/tmac/an.tmac
が読まれます。
an.tmac
は、単にandoc.tmac
を読んでいるだけです。
andoc.tmac
は、処理対象のファイルがDd
を含めばdoc.tmac
を、TH
を含めばan-old.tmac
を読みます。
今回手を入れたのは、doc.tmac
の方だけでしたが、日本語のpatch.1 は古い形式で書かれていたため、an-old.tmac
が読まれることになり、結果としてja.tmac
が読まれないため、割り付けがおかしくなったのでした。
an-old.tmac
を読むと、doc.tmac
と同じようにman.local
を最後に読み込むようになっているので、/usr/local/share/groff/site-tmac/man.local
に以下を追加することで、正しくフォーマットされるようになりました。
.if "\*[locale]"ja.UTF-8" \{\
.mso ja.tmac
.\}
mdocではなくmanの場合に、mdoc_ja.localの各種定義が必要かどうかわからなかった(patch.1は正常にフォーマットできているように見えるため)ため、まだ上記インストールスクリプトには取り込んでいません。
セクション3で.TH
が含まれるファイル(math, zlib等)を見ても問題なさそうだったの、上記スクリプトに含めました。
他に、このやり方で崩れるマニュアルがあったら教えてください。