日本語manをUTF-8化してless経由で表示させる
(2014/9/22)本記事は2007年6月時点のGentooにおける内容となる。他のディストリでは特に問題なくmanページが参照できる。
以下は以前の内容となる。
UTF-8エンコーディングで日本語manページをインストールしておくことで、環境変数の変更(参考)をせず、そのままless経由で日本語manページが見られるようになった。
(2007/9/26)下の作業は手順が面倒なので、ebuildファイルで自動化するようにした。→「UTF-8でman-pages-jaをインストールし、既存のEUC-JPなmanページもUTF-8に変換するebuild」
利点
- マニュアルページを読めるようにするまでに独自の面倒な手順が必要なくなる。
- 実行時、表示までの時間がわずかに短縮される。
問題点
準備
groffパッケージのバージョン1.19系では、EUC-JPなmanページをLANG/PAGER指定して見るときには問題なかったが、指定なしでUTF-8変換したものをless経由で表示する際に問題が起き、1.18.1.1に下げると問題なくなった。もし1.19系を使っている場合、1.18系に下げた上で、
ファイル名: /etc/portage/package.mask
>=sys-apps/groff-1.19
1.19系は使わないように指示しておく。
man-pages-jaとportage-man-pages-jaをUTF-8に変換してインストールしてみる
既に「man-pages-ja」パッケージがインストールされている場合、下のほうで、インストール済みのEUC-JPなmanページファイルを一括UTF-8変換する手順を紹介しているので、ここの手順で上書きインストールする必要はない。
流れとしては、ファイル展開後、インストールがされる前に、マニュアルページをUTF-8エンコーディングに変換する。emergeを使用してサスペンドしてもよいのだが、止めるタイミングが難しいので、ebuildコマンドを使ってみる。
- 「work/m*/manual/*/*/*.[1-9]」というのは、「man-pages-ja」のmanページの場所。
- 「work/p*/*/*.[1-9]」というのは、同時にインストールされる「portage-man-pages-ja」のmanページの場所。
$ su # ebuild /usr/portage/app-i18n/man-pages-ja/man-pages-ja-20070515.ebuild fetch unpack # cd /var/tmp/portage/app-i18n/man-pages-ja-* # for file in work/m*/manual/*/*/*.[1-9] work/p*/*/*.[1-9]; do mv ${file} ${file}.old; iconv -f eucjp -t utf8 ${file}.old > ${file}; rm ${file}.old -f; done # ebuild /usr/portage/app-i18n/man-pages-ja/man-pages-ja-20070515.ebuild compile install qmerge clean # rmdir /var/tmp/portage/app-i18n/
動作確認
適当なmanページで実験。下の例ではわざとフルパスでmanを実行している。なお、/etc/man.confは一切いじっていない。
$ /usr/bin/man man $ /usr/bin/man ebuild
インストール済みのEUC-JPなmanページをUTF-8へ変換
$ for file in /usr/share/man/ja/*/*.gz; do zcat ${file} | iconv -f utf8 -t utf8 >/dev/null 2>&1 || echo ${file}; done > /tmp/gz_list.txt $ for file in /usr/share/man/ja/*/*.bz2; do bzcat ${file} | iconv -f utf8 -t utf8 >/dev/null 2>&1 || echo ${file}; done > /tmp/bz2_list.txt
の両方を実行することで、gzip圧縮・bzip2圧縮ごとにUTF-8でないマニュアルページファイルがリストアップできる。そこで
$ su # for file in $(cat /tmp/gz_list.txt); do mv ${file} ${file}.old; zcat ${file}.old | iconv -f eucjp -t utf8 | gzip -9 > ${file}; rm ${file}.old; done # for file in $(cat /tmp/bz2_list.txt); do mv ${file} ${file}.old; bzcat ${file}.old | iconv -f eucjp -t utf8 | bzip2 > ${file}; rm ${file}.old; done # exit $ rm /tmp/gz_list.txt /tmp/bz2_list.txt -f
のように実行することで、元の圧縮形式・ファイル名のまま、エンコーディングをUTF-8に変換できる。もう一度UTF-8でないマニュアルページのリストアップを行い、
$ for file in /usr/share/man/ja/*/*.gz; do zcat ${file} | iconv -f utf8 -t utf8 >/dev/null 2>&1 || echo ${file}; done $ for file in /usr/share/man/ja/*/*.bz2; do bzcat ${file} | iconv -f utf8 -t utf8 >/dev/null 2>&1 || echo ${file}; done
両方とも何も出力されないことを確認できればOK。これでたまにチェックをしながら運用していけば、問題はないのではないかと思う。
関連記事:
使用したバージョン:
- man 1.6e-r3(USE=nls)
- groff 1.18.1.1(USE=X cjk)
- less 394(USE=unicode)
- man-pages-ja 20070515