MinaTech

innocent at every scene

gnupackに日本語manページを入れる

LinuxとWindowsを行き来する際、同じ環境が使えて嬉しい Cygwin と Emacs。これをまとめて使えるようになっているWindows向けパッケージgnupackを愛用してます。(この場を借りて感謝。)
最近、manページを参照することが多いので、gnupackなCygwinに日本語のmanページを入れました。ネット上に情報がいろいろありますが、バージョン違いだったりで混乱したので、自分用のまとめメモとして情報を残します。(間違っている部分があればツッコミお願いします。)

対象は、gnupack 9.01です。Windows7 64bit上でやってみます。まずはmintty.exeを実行して、bashを起動し、デフォルトの言語コードを確認します。

# echo $LANG
ja_JP.cp932

minitty.exeのタイトルバーのアイコンをクリック→「Options」→「Text」の “Locale” と “Characterr set”で言語コードの設定を変えれますが、ここを変更すると結果が変わってしまうので、一旦このまま行きます。
manが入っていないので入れます。

# apt-cyg install man

manとgroffが入りました。バージョンを確認してみます。

# man --version
man, version 1.6g
# groff --version
GNU groff version 1.21

lvは元々入っていたので、このまま使います。これもバージョンを確認しておきます。

# lv
# lv v.4.51 (Jan.16th,2004)

JM Projectから最新のroff ページのアーカイブをダウンロードします。私が使ったのは man-pages-ja-20120815.tar.gz です。JM Projectのトップページに「JM で配布する manpage の文字コードを EUC-JP に UTF-8 に変更しました。」との注意書きがありました。この注意書きの内容が、Cygwinに日本語manページを入れる際にどういった影響を与えるのか分からず、悪戦苦闘するハメになりました・・・。よく覚えておきましょう。
このファイルをbash上で解凍し、インストールします。WindowsのCドライブは、bashから/cでアクセスできます。逆にWindowsからbashのhomeフォルダにアクセスするには、gnupackをインストールしたフォルダの下のhomeになります。ここでは頑張って(?)、bash内でやってみます。

# cp -v /c/Users/xxxx/Downloads/man-pages-ja-20120815.tar.gz ~
# cd ~
# tar xvf man-pages-ja-20120815.tar.gz
# cd man-pages-ja-20120815

日本語manページをインストールする前に「make config」してインストール用の情報を設定する必要があります。この際に、Cygwinのbashから見たユーザー名とグループ名が必要になります。コマンドを調べるのが面倒だったので、ファイルを作って、「ls -la」で表示してみました。

# touch hoge.txt
# ls -la hoge.txt
-rw-r--r-- 1 xxxx None 0 8月   31 01:25 hoge.txt

ユーザー名が「xxxx」、グループ名は「None」だと分かりました。では「make config」します。

# make config

途中でいろいろ質問されます。解凍したmanファイル群はUTF-8なので、「Install directory」は「/usr/share/man/ja_JP.UTF-8」とします。manが環境変数LANGを参照してこのフォルダにアクセスしているようなので、このフォルダ名は間違えてはいけません。「compress manual」には「gzip」を選んでみました。「uname of page owner」には上記で判明したユーザー名(例では「xxxx」)、「group of pae owner」にはグループ名(例では「None」)を入力します。後はデフォルトでOKだと思うので、全部returnで進めていきます。終わったら「make install」します。ユーザー名とグループ名が間違っていた場合は、「make install」でエラーが出ます。この場合は「make config」からもう一度やり直せばOKです。「make install」が終わったら、狙った場所にインストールされているか、念のため確認してみます。

# make install
# ls -la /usr/share/man/*.UTF-8
drwxr-xr-x+ 1 tama None 0 8月  31 01:33 /usr/share/man/ja_JP.UTF-8/

無事インストールできました。manコマンドを実行すると、この中のファイルが解凍され、groffに渡って、更にlessやlvに渡ります。どのようなパイプで繋がっているかは、以下の方法で確認できます。

# man -d man
(中略)
man: 
not executing command:
  (cd "/usr/share/man/ja" && (echo ".pl 11i"; /usr/bin/gunzip -c '/usr/share/man/ja/man1/man.1.gz') | /usr/bin/tbl | /usr/bin/groff -Tnippon -mandocj | /usr/bin/less -isrR)

ja_JP.cp932なbashでUTF-8のmanページを表示するために、groffのオプションとページャーを変える必要があります。
まずはgroffのオプションを変えてみます。vimで「/etc/man.conf」を開き、JNROFFの行を変更します。念のため、オリジナルのJNROFFの行はコメントアウトして残しておきます。

#JNROFF      /usr/bin/groff -Tnippon -mandocj
JNROFF      /usr/bin/groff -Dutf8 -Tutf8 -mandoc 2>/dev/null

-Dutf8は入力ファイル(manページ)がUTF-8であること、-Tutf8は出力をUTF-8で行うことをそれぞれ指定しています。 「-mandocj」が「-mandoc」になっていることを注意してください。原因不明なのですが、この指定方法だとなぜかWarningが出ます。それを無かったことにするため、/dev/nullへ標準エラー出力をリダイレクトするようにしてあります。
次にページャーを変更します。lvは多言語に強いようで、lessの代わりに使います。manが使うページャーは環境変数PAGERで決まるようです。

# export PAGER='lv -c -Os'

lvは受け取ったデータがUTF-8であることを自動判定できるようです。ここでは出力コードだけ指定します。bashはja_JP.cp932で動いていますので、「-Os」オプションを付けます。また、入力データにはエスケープシーケンスが含まれているので、それを解析できるように -c オプションも付けます。
manには/usr/share/man/ja_JP.UTF-8を参照してほしいのですが、bashの言語コードはja_JP.cp932なので、うまく参照してくれません。manを実行する際に、環境変数LANGを一時的に変える必要があります。面倒なので、alias指定にしておくといいかもしれません。

# alias man='LANG=ja_JP.UTF-8 man'
# man ls

これで日本語のmanページをCygwinのbashで表示できるようになります。環境変数PAGERとmanのalias指定は、.bashrcの中にでも書いておくと毎回入力する必要がなく便利です。

■参考にさせてもらったサイト
http://nukino.github.com/blog/2012/02/04/Cygwinman/
http://oldmacuser.blog75.fc2.com/blog-entry-53.html

Linuxコマンド ビギナーズブック Linuxコマンド ビギナーズブック
大津 真

翔泳社 2007-05-31
売り上げランキング : 253034

Amazonで詳しく見る by G-Tools

コメントを残す

メールアドレスが公開されることはありません。

*