groff-1.20 と 日本語 man

標準では ja_JP.UTF-8 な環境で文字化けする日本語 man 。標準で入る groff のバージョンでは日本語対応がイマイチだったり、マニュアルが EUCエンコーディングされていたりするのが原因だったりするようだ。

解決策としては groff のバージョンを古いものに戻すというものがあって、ウチの場合もそうしていた。具体的には /etc/portage/package.mask に >=groff-1.20 なんて書いてあえて古いバージョンの groff を使い、その上で man-pages-ja を入れて man.conf の設定で対処するというものなんだけど、たまたま検索していたら最近の groff でも対処出来るとの記事を見つけた。


コレを読むとこういうことのようだ。

  1. groff-1.20 未満にして今までと同じようにする
  2. むしろ 1.20.1-r2 に上げてしまう


ふむ。今までは前者でやってきたけど、バージョンをあげてしまっても解決するらしい。将来的にはそちらの方が望ましいので、この機会にやってみる。


まず groff-1.20.1-r2 のマスクを外す。標準ではキーワードマスクされている。

$ sudo vi /etc/portage/package.keywords
=sys-apps/groff-1.20.1-r2               ~amd64            ←追加


んで emerge する。 LINGUAS="ja" を忘れてはいけない。(普通は /etc/make.conf に書いてる)

$ LINGUAS="ja" sudo emerge -av1 groff


次に /etc/man.conf の設定を見直す。自分の環境では設定済。

そして/etc/man.confのJNROFF行などをEUCロケールで起動するように書き替える
#JNROFF /usr/bin/groff -Tnippon -mandocj
JNROFF LANG=ja_JP.EUC-JP LC_ALL=ja_JP.EUC-JP /usr/bin/groff -Tnippon -mandocj

http://2chnull.info/r/linux/1255956757/134-134


最後に、 alias に追加。 man で英語マニュアル、 jman で日本語マニュアルを出力するようにさせる。

alias man='LANG=en_US LC_ALL=en_US /usr/bin/man'
alias jman="/usr/bin/man -P \"cat | nkf -w | less\""

http://2chnull.info/r/linux/1255956757/139-139

日本語のマニュアルは実際結構古いことが多いので、コマンドで使い分けるというこの発想はイイですね。


あとは実際にやってみる。

$ man emerge
とか
$ jman emerge


よしよし。以前と同様ちゃんと表示できるようになってる!