  coreutils の日本語版 info マニュアルのインストール方法と
使用法を簡単に説明します。コマンドラインから "info coreutils-ja" と
打ち込むと、日本語 info が読めるようなら、coreutils-ja.info がすでに
きちんとインストールされています。「1 インストール」の項目を飛ばして、
「2 使用法」に進んでください。

目次
====
  1 インストール
    1.1 インストール、あるいは dir ファイルへの登録
    1.2 アンインストール
    1.3 /usr/share/info ディレクトリ以外へのインストール
    1.4 info ファイルの作成 (おまけ 1)
    1.5 html ファイルの作成 (おまけ 2)
    1.6 マニュアルの印刷 (おまけ 3)
  2 使用法
    2.1 日本語版 coreutils info マニュアルの呼び出し方
    2.2 info マニュアルにおける基本的なキー操作
    2.3 g コマンドのちょっと複雑な使用法


1 インストール
===============

1.1 インストール、あるいは dir ファイルへの登録
-----------------------------------------------

  インストール方法と言うより、coreutils-ja を info のトップレベル・
メニューに登録して、"info coreutils-ja" や "info cat-ja" などで 
日本語の info マニュアルが読めるようにする方法です。

  この登録をしないでも、coreutils-ja.info ファイルをカレントディレクトリに
置いて、

    info -f ./coreutils-ja.info

と打ち込めば、coreutis-ja の最初のページを開くことができます。さらに、
そのページをスクロールすると見ることのできるメニューをたどって
(あるいは、info の m コマンドを使って)、各コマンドの説明に飛ぶことが
できます。しかし、それでは不便でしょう。"info ls-ja" や "info cat-ja" で、
誰でも直接 ls や cat の日本語マニュアルが読めた方が便利です。そこで、
coreutils-ja.info を info のトップレベル・メニューに登録します。

  作業は、root ユーザになって行います。info のトップレベル・メニューが
記載されているファイルは、標準では /usr/share/info/dir です。
coreutils-ja.info を /usr/share/info ディレクトリにコピーしてください。

    cp coreutils-ja.info /usr/share/info
    cd /usr/share/info

  info ファイルは、gzip などで圧縮することができます。

  GNU の install-info コマンドで coreutils-ja.info を dir ファイルに
登録します (注 1)。install-info の書式はこうです。

    install-info [OPTION]... [INFO-FILE [DIR-FILE]]
 
  カレントディレクトリが /usr/share/info なら、具体的なコマンドは、
こうなります。

    install-info coreutils-ja.info dir

    注 1: debian のようにディストリビューション独自の install-info 
          コマンドが入っていることがあります。その場合は、マニュアルで
          使用法を調べるか、GNU の install-info (debian では、ginstall-info 
          という名前で入っている) を使ってください。

  圧縮ファイルの場合でも ".gz" まで指定する必要はありません。もちろん、
付けても構いません。これで、インストール完了です。"info dd-ja" などで
日本語マニュアルが読めるはずです。

1.2 アンインストール
--------------------

  coreutils-ja.info をアンインストールしたい場合は (登録から削除したい
場合は）、次のように --delete オプションを使います。

    install-info --delete coreutils-ja.info dir

  そして、coreutils-ja.info (または、coreutils-ja.info.gz) を消去します。

    rm coreutils-ja.info

1.3 /usr/share/info ディレクトリ以外へのインストール
----------------------------------------------------

  coreutils-ja.info は、一応 /usr/share/info ディレクトリにコピーする
ことを想定して、作ってありますが、info コマンドのサーチパスにある
ディレクトリなら、そこにコピーしても、たぶん問題なく使用できます。

  info コマンドの現在のサーチパスは、info 実行中に H キーを押せば、
見ることができます (info の古いバージョンでは h キーでした)。
/usr/local/share/info というディレクトリが存在すれば、
"/usr/share/info:/usr/local/share/info:." になっていると思います。
存在しなければ、たぶん "/usr/share/info:." だけです。また、環境変数 
INFOPATH によってサーチパスを /usr/share/info に追加することもできます
(環境変数 INFOPATH については、info info-stnd を参照してください)。

  coreutils-ja.info を /usr/share/info 以外に置く場合は、
install-info コマンドの引数の dir には、/usr/share/info/dir を
指定してもよく、info ファイルをコピーしたディレクトリ中の dir (たとえば、
/usr/local/share/info/dir) を指定してもよいでしょう。後者の場合、
info コマンドが、実行時に両方の dir を統合して、トップレベルのメニューを
作ってくれます。

  coreutils-ja.info を /usr/share/info/ja といった、info コマンドの
サーチパスにないディレクトリにコピーする場合は、環境変数 INFOPATH を
利用すればよいと思います。他にも方法がありますが、説明は省略します。

1.4 info ファイルの作成 (おまけ 1)
----------------------------------

  coreutils-ja.info の配布には、texi ファイルも含まれているかもしれ
ません。coreutils-ja.info が既に存在する場合、以下を実行する必要は
ありませんが、texi ファイルを修正して、自家特製の info ファイルを
作りたいこともあるかもしれません。そこで、念のため、texi ファイルから 
info ファイルを作成する方法を書いておきます。

  texinfo 6.3 から makeinfo の日本語対応が向上しました (UTF-8 対応が
進んだということだと思います。でも、日本語の禁則処理には未対応の
ようです)。そこで texinfo 6.3 に含まれる makeinfo を使用することを
想定しています。それ以前のバージョンの makeinfo では、行末の処理が
うまく行かないかもしれません。

  同一バージョンの次の 6 ファイルを一つのディレクトリに集めます。

    constants.texi           (英語日本語共通)
    fdl.texi                 (同上)
    version.texi             (同上)
    coreutils-ja.texi        (日本語に翻訳したもの)
    parse-datetime-ja.texi   (同上)
    perm-ja.texi             (同上)

  そのディレクトリで、makeinfo コマンドを実行します。

    makeinfo --no-split coreutils-ja.texi

  --no-split オプションを付けずに makeinfo を実行すると、複数に分割
された info ファイルが生成されます。しかし、この分割された info 
ファイルを info コマンドで表示すると、ページによっては白黒が反転して
しまうことがあります。ですから、makeinfo は --no-split を付けて実行した
方がよいでしょう。

  注意: makeinfo のバージョンによっては、日本語をうまく扱えないことが
        あります。たとえば、Debian jessie の makeinfo 5.2 がそうです。

1.5 html ファイルの作成 (おまけ 2)
----------------------------------

  info 形式のマニュアルの閲覧法は、あまり直感的とは言えません。
そこで、html 形式に変換したくなるかもしれません。それには、texi2html 
プログラムを使用します。

  texi2html がすでにインストールされているとします。たとえば、1 node
1 ファイルの形で html ファイルを作るには、次のようにします。

  まず、必要な texi ファイルがあることを確認してください。必要な texi 
ファイルは、info ファイルを作成する場合と同じで、次の 6 個です。

    constants.texi
    fdl.texi  
    version.texi
    coreutils-ja.texi
    parse-datetime-ja.texi
    perm-ja.texi

  上記の texi ファイルのあるディレクトリの直下に html ディレクトリを
作って移動し、texi2html コマンドを実行します。

    mkdir html
    cd html
    texi2html --split node ../coreutils-ja.texi

  node ごとではなく、章ごとに分割したかったら、"--split chapter" です。
texi2html の詳しい使い方については、"man texi2html" で調べてください。

  なお、makeinfo に --html オプションを付けても、texi ファイルから html 
ファイルを作ることができます。こちらについての詳細は、"info texinfo" の
"Generating HTML" をご覧ください。

1.6 マニュアルの印刷 (おまけ 3)
-------------------------------

  細田さんという方のおかげで、texinfo 6.3 以降なら、日本語の texi
ファイルから pdf が作れるようになりました。LuaTex 0.95 以降、または 
XeTeX 0.9998 以降 (後者の場合は、zhspacing も)、それに、texinfo-ja.tex
ファイルが必要だそうです。

  texinfo-ja.tex ファイルについては、ディストリビューションによっては、
texinfo 6.3 以降でも、/usr/share/texmf/tex/texinfo に texinfo.tex
と txi-ja.tex はあっても、texinfo-ja.tex が存在しないかもしれません。
そんなときは、texinfo の開発元から、texinfo パッケージをダウンロードして、
texinfo-ja.tex を取り出せばよいでしょう。

  texinfo-ja.tex を texi ファイル群と同じディレクトリに置き、
coreutils-ja.texi ファイルのヘッダに以下のような行を書きます。

    \input texinfo-ja        (\input texinfo を書き換える)
    @documentencoding UTF-8  (なければ追加)
    @documentlanguage ja     (同上)

  そして、LuaTex を使うなら、以下を実行します。

    $ PDFTEX=luatex texi2pdf coreutils-ja.texi

  これで pdf ファイルができるはずですが、筆者のところでは、「xkeyval 
がない」というエラーが出て、止まってしまいました。xkeyval.* は、
debian stretch では texlive-latex-recommended パッケージに
入っています。それを入れることで pdf ファイルの作成に成功しました。

  より詳しくは、細田さんのお書きになった記事をご覧ください。

    http://www.trueroad.jp/2016/05/14-01.html

2 使用法
=========
  
2.1 日本語版 coreutils info マニュアルの呼び出し方
--------------------------------------------------

  coreutils-ja.info のインストールが済んでいるなら、コマンドラインから、

    info coreutils-ja    (coreutils マニュアル全体の最初のページ)
    info chmod-ja        (chmod コマンドの info マニュアル)

のように打ち込めば、coreutils 全体や coreutils に属する個々のコマンドの
日本語 info マニュアルを開くことができます (注 1)。英語版のマニュアルを
読むには、"info coreutils" や "info chmod" とタイプします。

    注 1: なお、"info coreutils-ja 'chmod invocation'" といった
          呼び出し方もあります。一般に info コマンドの書式は、
          "info [OPTION]... [メニュー項目名] [メニュー項目名]..." 
          です。メニューが階層を持っているとき、メニュー項目の連鎖を
          指定することで、深いところにあるセクションを直接呼び出せる
          わけです。たとえば、"info mew copyright" とすれは、他の
          プログラムのマニュアルの Copyright セクションではなく、
          Mew プログラムの Copyright セクションを直接開くことができます。

  info マニュアルの読み方の基本は、「メニューの項目にカーソルを
合わせてリターンキーを押せば、そのページに飛ぶ。スペースで先へ進み、
バックスペースで後戻りする。q キーで終了する」です。もっと複雑な 
(便利な) 使い方については、以下で説明します。

  日本語版 coreutils info マニュアルの呼び出し方は、もう一つあります。
info プログラムを引数なしで実行すると (注 2)、info マニュアルの
トップレベル・メニューが開きます。そこで、coreutils-ja, chmod-ja 
などのメニュー項目を探して、カーソルを合わせ、リターンキーを押せば、
日本語マニュアルが表示されます。でも、キー操作を使った方が手間が
かかりません。トップレベル・メニューの画面で m キーを押すと、最下行に 
(Emacs でいうミニバッファに) 「メニュー項目:」(英語なら 「Menu item:」) 
というプロンプトが出ます。それに対して、コマンド名に -ja を付けて
打ち込み、リターンキーを押せばよいのです。たとえば、m キーを押して出た
「メニュー項目:」プロンプトに対して chmod-ja と打ち込めば、日本語版の 
chmod コマンドのマニュアルが、chmod だけなら、英語版のマニュアルが
表示されます。

    注 2: info マニュアルは info コマンドだけでなく、Emacs でも読めます。
          Emacs の info リーダーを呼び出すには、Emacs 上で C-h i、または 
          M-x info とタイプします。そうすると、info のトップレベル・
          メニューが開きます。古めの Emacs (たとえば、Emacs22) をご使用に
          なっている場合は、日本語が文字化けして、読めないかもしれません。
          Emacs23 以降なら、たぶん大丈夫です。Emacs の info リーダーの
          使い方は、info コマンドとほぼ同じです。

  coreutils-ja、chmod-ja などと -ja を付けるのは、info プログラムを
起動するときと、info のトップレベル・メニューにいるときだけです。
coreutils-ja であれ、dd-ja であれ、すでに日本語版の coreutils 
マニュアルのどれかを開いている場合は、-ja をコマンド名の後ろに付ける
必要がありません。と言うより、付けてはいけません。

  coreutils-ja の内部では、コマンドのメニューがあるページなら
(スクロールしないとメニューが見えませんが、coreutils-ja の最初の
ページもその一つです)、m に chmod などとコマンド名を続けて、リターン
キーを押すだけで、たいていの場合、そのコマンドの日本語マニュアルが
開きます (注 3)。また、g キーでノード (ほぼ章や節や項に当たります) 
に直接飛ぶ場合も、g キーを押すと最下行に出る「ノードへ移動:」(英語なら 
「Goto node:」) というプロンプトに対して chmod invocation などと
ノード名を打ち込んで、リターンキーを押せば、そのノードが開きます (注 4)。
メニューにリストされている項目のノード名は、たいていメニュー項目名 (英語) 
と同じです (注 5)。m の場合も g の場合も、タブで文字列の補完ができます。

    注 3: 厳密な言い方をすると、m ではメニュー項目名を指定します。
          ただし、メニュー項目名の先頭から、他の項目と区別するのに
          必要なだけの部分を指定すれば充分です。ですから、メニュー
          項目名が chmod invocation なら、chmod というコマンド名
          だけでよいことになります。とは言え、pr, sort、comm、tr、dir、
          rm, date, who コマンドのような例外もあります。たとえば、
          coreutils-ja の最初のページでは、sort で始まるメニュー項目名が
          二つあるので (sort invocation と Sorting the output)、m に 
          sort と続けただけでは足りません。sort に続けて、スペースを
          一回押し、それからタブを押してください。それで sort invocation
          と補完されるはずです。rm や tr などのコマンドについても
          同様です。date コマンドの場合は、coreutils-ja のメニューに 
          date invocation のほかに Date input formats という項目も
          あるので、"date inv" まで指定する必要があります。 

    注 4: m はメニューのあるところでしか使えませんが、g はたいてい
          どこでも使えます。しかし、ノード名はメニュー項目名と違って、
          省略を受付けません。そこで、g では、タブによる補完を多用する
          ことになります。

    注 5: メニュー項目名とノード名が違う場合もあります。たとえば、
          引数なしで info コマンドを実行したときに表示されるトップ
          レベル・メニューでは、日本語 cat マニュアルのメニュー項目名は 
          cat-ja ですが、ノード名は (coreutils-ja.info ファイルの) 
          cat invocation です。

  なお、m に続けるメニュー項目名では、たいていの場合、大文字小文字を
区別しません。g に続けるノード名の場合は、原則として大文字小文字の区別が
行われますが、ユーザが大文字で指定しようと、小文字で指定しようと、タブに
よる補完を使用すると、補完と同時に正しい表記に変更されます。
 
2.2 info マニュアルにおける基本的なキー操作
-------------------------------------------

  info プログラムではキー操作をコマンドと言います。スペースを押すのも、
q や n キーを押すのもコマンドの実行です。

  スペースで先へ進み、バックスペースで後へ戻ることができます 
(スクロールします)。矢印キーで上下左右にカーソルが動きます。
メニューの項目やクロスリファレンスにカーソルを合わせて、リターン
キーを押すと、その項目に飛びます。l キーを押すと、直前に開いていた
ノードに戻ります。q キーで info が終了します。それに m, g, n, p, ], [, 
u, t コマンドを知っていれば、たいてい用が足ります (そうしたコマンドの
動作については、下記を参照してください)。Emacs の info リーダーの
キー操作も、ほとんど同じです。

  ああ、二つ書き忘れました。C-l (Ctrl と l (エル) を同時に押します) と 
C-g も重要です。info プログラムは、バージョンによっては、日本語の
行末処理が上手ではありません。行末にゴミが入ることがあります。
そういうときは、C-l を押して画面を再描画すると、表示が正常になります。

  C-g の方は、コマンドを途中でキャンセルするときに使います。

  info 中でのキー操作の詳細は、"info info" や "info info-stnd" を
実行して、マニュアルを読んでください (残念ながら、英語です)。

  注意: ここでは、info 6.3 を使うことを想定して、基本的なコマンドのみを
挙げておきます。バージョンによっては、使えなかったり、動作が違ったり
することもあります。たとえば、古いバージョンの info では、'/', 's', 
'C-s' などで日本語の検索ができません (英語による検索はできます)。

    Space:           1 画面スクロール (最下部の 2 行が最上部に残る)。
    Backspace:       1 画面スクロールバック。
    Delete:	     info コマンドでは Backspace と同じ (Emacs の
                     info リーダーではたぶん無効)。
    矢印キー:        カーソルが上下左右に移動する。
    Return:          メニューやクロスリファレンスで、カーソル位置にある
                     項目へ飛ぶ。
    q:               info 終了。

    C-l:             画面の再描画。
    C-g:             コマンドのキャンセル。
    H:               コマンドの簡単な説明 (古いバージョンでは h)。

    n:               同一レベルの次のノードへ進む。
    p:               同一レベルの前のノードへ戻る。
    ]:               レベルが違っても、ドキュメントの次のノードに進む。
    [:               レベルが違っても、ドキュメントの前のノードに戻る。

    mメニュー項目名: 指定したメニュー項目に飛ぶ。
    gノード名:       指定したノードに飛ぶ。
    u:               一つ上のレベルのノードに移動する。
    t:               トップノードに飛ぶ。 
    d:               info マニュアル全体のトップレベル・メニューに飛ぶ。
    b:               現在のノードの先頭に戻る。
    e:               現在のノードの末尾に飛ぶ。

    l:               元のページ (すなわち、直前に読んでいたノード) に戻る。

    s または /:      指定した文字列で正規表現検索をする (Emacs の info
                     リーダーでは、/ は使えないが、s による検索はできる)。
		     同じ文字列の検索を続行するには、less や man とは違って、
		     n ではなく、s または / に続けてリターンを押す。
    ?:               逆方向への正規表現検索 (Emacs ではコマンドの簡単な説明)。
    C-s:             インクリメンタル検索をする。
    C-r:             逆方向のインクリメンタル検索。

    f または r:      クロスリファレンスをたどる (Emacs の info リーダーでは
                     クロスリファレンスをたどるのは f だけであり、r は l の
                     反対の動作をする)。
    i:               指定した文字列をインデックス中で探して、その参照箇所に
                     飛ぶ (coreutils-ja のインデックスは日本語化されて
                     いない。従って、日本語によるインデックス検索は、
                     今のところできない。英語によるインデックス検索は
                     可能)。
    ,:               i コマンドでインデックス検索をしているとき、i で
                     指定した文字列にマッチする次のインデックス項目の
                     参照箇所に飛ぶ。
    ESC C-f:         脚注があるとき、ウインドウを分割して、下のウインドウに
                     脚注を表示する (Emacs の info リーダーでは使えない)。
                     脚注のウインドウを消すには、本文のウインドウにカーソル
                     があることを確認して、C-x 1 とキーを押す (Ctrl と x の
                     同時押し。そして 1 (いち))。

2.3 g コマンドのちょっと複雑な使用法
------------------------------------

  "info ls-ja" を実行して、ls の日本語マニュアルを読んでいるとします。
そのとき、原文が読みたくなったら、どうしますか。info を一度終了して、
"info ls" を実行する。d コマンドで info のトップレベル・メニューに飛び、
m に続けて ls とタイプする。別の端末エミュレータから、"info ls " を
実行する。もちろんどれも正解です。特に 3 番目は、原文と翻訳を並べて
見ることができますから、有用な方法だと思います。

  しかし、日本語マニュアルを表示している現在の info から、ls の英語版
マニュアルに直接飛ぶこともできます。g コマンドをこんなふうに使います。

    g(coreutils)ls invocation

  g キーを押すと最下行に出るプロンプトに対して (coreutils)ls invocation
と打ち込むわけです。
 
  g コマンドの正規の使用法は、次のようなものです。

    g(ファイル名)ノード名

  上の書式中、同じマニュアル中での移動ならば (たとえば、coreutils-ja の
あるコマンドの説明から、coreutils-ja の他のコマンドの説明に飛ぶのならば)、
ファイル名は省略できます。また、他のマニュアル中のノードに飛ぶとしても、
そのマニュアルが /usr/share/info のような info のサーチパスの下にある
ファイルならば、そのサーチパスを基点とする相対パスで、ファイル名を指定する
ことができます (たとえば、/usr/share/info/ja/something.info.gz 
ならば、ja/something.info.gz)。しかも、info や info.gz のような拡張子は
省略できます。そこで、日本語マニュアルから ls の英語マニュアルに飛ぶ
コマンドは、

    g(coreutils)ls invocation 

でよいことになります。英語版 ls マニュアルから日本語版に戻るには、
l コマンドを使えば済みます。"g(coreutils-ja)ls invocation" と
打ち込んでもよいでしょう。

  なお、g コマンド書式中のファイル名は、絶対パスやカレントディレクトリ
からの相対パスで指定することもできます。

  ところで、前に「2.1 日本語版 coreutils info マニュアルの呼び出し方」の
  「注 1」で info コマンドの基本的な書式は、

      info [OPTION]... [メニュー項目名] [メニュー項目名]...

だと述べましたが、実は g コマンドに似たもう一つの書式もあります。

      info '(ファイル名) ノード名'

というもので (閉じカッコとノード名の間の空白はあってもなくても
構いません)、こんなふうに使います。

      info '(coreutils-ja) ls invocation'

2018-03-31 訳者

