
Linux Backspace/Delete mini-HOWTO

Vigna Sebastiano

vigna@acm.org

anonymous - 日本語訳
????????                                                               
???? v1.4              7 December 2000                                 
Updated for Red Hat 7.0 and Helix Gnome conflicts.                     
???? v1.3              18 October 2000                                 
Name change.                                                           
???? v1.2              15 October 2000                                 
Updated. Added "What If Nothing Works" section.                        
???? v1.1              13 September 2000                               
Added tcsh fixes                                                       
???? v1.0              5 September 2000                                
First release                                                          
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

????
1. はじめに
2. どのようにしてキー入力が動作 (Action) になるのか
3. なぜ (ときどき) 動かないのか
4. X
5. アプリケーションを書く時に何をすべきか
6. あなたのシステムですべきこと
    6.1. やらねばならないこと
        6.1.1. 微妙にずれてるアレの検出
        6.1.2. 各エミュレータの分別
        6.1.3. 端末データベースの修正
        6.1.4. シェル動作の修正
       
       
    6.2. 実践方法
    6.3. tcsh向けの修正
   
   
7. 何をやってもダメな場合
8. 結論
9. 日本語訳について

1. はじめに

早い遅いの違いはあったろうが、 Linux ユーザなら誰でも次のような状況にハ
マったことがあるだろう。コンソール上や X 上で、Backspace キーと Delete
キーが効かなくなってしまうという現象だ。この文書は、こういったことがな
ぜ起こるのかを説明し、その対処法を紹介する。ここに示されている考えは、
基本的にはどのディストリビューションにも適用できる。ただしシステムの設
定ファイルは各ディストリビューションによってかなり違うので、ここでは読
者が自分自身でどのファイルを修正すればよいのかがわかるだけの情報を、必
要に応じて提供しようと思う。

ここで言う Backspace キーとは、1 文字分もどってそのカーソル上にある文字
を消去するものとする。一方 Delete キーは現在のカーソル上にある文字をカ
ーソルを動かさずに消去するものとする。もしこの 2 つの機能が入れ換わって
いたほうがいいと思うなら - ほとんどのキーボードの Backspace キーの表面
には左向きの矢印 (??) が書かれているのだが - この文書は直接の解は与えな
い。が、確実に役に立つ情報が得られるだろう。

もうひとつの仮定は、変更する部分はローカルな (そのユーザだけの) ファイ
ルだけにしたい、ということだ。ディストリビューション標準の設定はどこも
変更すべきではない。最後にもうひとつ。この文書ではアプリケーションが正
しいイベントを受け取れるようにシステムを設定する方法を説明する。もしお
使いのアプリケーションが風変りなやり方でそのイベントを解釈するようなら
ば、とりうる唯一の修正方法はアプリケーションの設定を変更することだけだ
。
   
   
    ????: この Mini-HOWTO の最初のリリース以降、事情は更に複雑になって
    きた。同一の端末エミュレータ (Red Hat 7.0 や 7.0 より前の Helix/Red
    Hat における gnome-terminal など) でも、ディストリビューションが違
    うと別の ASCII 文字列を生成することがある。この不一致のため、今や端
    末データベースはそれらが記述するとされている端末エミュレータにさえ
    合致していない。以下の議論の基盤をしっかりさせるため、我々は基本的
    に Debian キーボードガイドライン (http://www.debian.or.jp/Documents
    /debian-policy-ja/policy.ja.html/ch10.html#s10.8)で示されている設定
    を正しい設定として扱う。

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

2. どのようにしてキー入力が動作 (Action) になるのか

キーボード上のあるキーが押されると、いくつものハードやソフトの部品が協
力して、その実際のキーで意図された意味 (文字を表示するとか) を実行する
。とりあえずここでは (ハードウェアの部分はいじれないので) ソフトの側、
それもコンソール出力に関連したイベントに注目してみよう。

 1. キーを叩くと生のキーボードスキャンコードが生成され、これがキー番号に
    変換される。i386 上のシステムでは、普通 BackSpace キーのキー番号は
    14 番になり、Delete キーは 111 番になる。
   
 2. キー番号は、キーボードライブラリによってキーシンボル (keysym) に変換
    される。これにはユーザがロードしたキー定義ファイルが使われる。キー
    ボードデータベース (例えば RedHat なら /usr/lib/kbd/ 以下) を覗くと
    、たぶん何種類もの違ったコンピュータやレイアウト、そして違った解釈
    (2 つの Alt キーに別々の働きをさせたい人もいる) のキー定義ファイル
    があるのがわかるだろう。Linux コンソールのレイアウトでは、keysym の
    Delete はキー番号の 14 番に割り当てられており、 Remove が 111 番に
    なっている。ヘンだと思うかもしれないが、 Linux コンソールは VT100
    端末をエミュレートするためこうなっているのだ。
   
 3. まだ先がある。コンソール上のアプリケーションは ASCII 文字列を読む。
    keysym ではない。だからコンソールは keysym を読んで、その内容をきち
    んとエンコードした ASCII 文字列に変換してやらなくてはならない。たと
    えば Linux コンソールでは Delete の keysym が ASCII コードの 127 番
    (DEL) にマップされている。一方 Remove keysym はエスケープシーケンス
    になる。BackSpace keysym は ASCII コードの 8 番 (BS) になる。
   
 4. 最終段階は、ある意味ちょっと遡ることになる - それぞれのキーによって
    生成された ASCII 文字列をキー特性 (key capability) に戻すのだ。ここ
    では端末データベースが用いられる。このデータベースには、それぞれの
    端末に応じた、文字列からキー特性 (要するに keysym の一部) への対応
    表が入っている。
       
        ????: まずいのは、"標準" とされている端末データベースには 2 つ
        の種類があるということだ - termcap と terminfo だ。ディストリビ
        ューションにもよるが、どちらか片方だけを使っているかもしれない
        し、アプリケーションにもよるかもしれない。解説は主に新しい
        terminfo 向けだが、文中の対応策では両方を考慮している。
   
    たとえば Linux コンソールでは、F1 キーはエスケープ文字 + [[A という
    文字列を生成する。端末データベースにあるコンソールの項目を参照する
    と、これは key_f1 というキー特性に変換されることがわかる (この項目
    を実際に見てみたければ、infocmp linux と打ってみるといい)。GNU の
    termcap マニュアルには、端末データベースに関する非常に徹底した優れ
    た説明が載っている。普通、Linux のアプリケーションは、より新しい形
    式である terminfo データベースを使う。これは ncurses パッケージに含
    まれているものだ。
   
    たぶんここまで来ればもうそんなに驚かないだろうが、terminfo データベ
    ース中の Linux コンソールのエントリでは、 DEL を kbs (バックスペー
    スキー) 特性に対応させている。そしてエスケープに続く [3~ という文字
    列を kdch1 ("delete-one-char" キー) 特性に対応させている。これまで
    は Backspace キーが DEL を出力するのを見て奇妙に思っていたかもしれ
    ないが、端末データベースはすべてを正しく元に戻しているのであって、
    正しい振る舞いをしているアプリケーションなら DEL を kbs キー特性と
    して解釈するのだ。だからカーソルの左にあるキャラクタを消すというわ
    けだ。
   

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

3. なぜ (ときどき) 動かないのか

これで基本的なことは分かってもらえただろうか。キーボードとコンソールア
プリケーションの間にはボトルネックがある。つまり、 ASCII 文字列でしかや
り取りできない部分があるのだ。だから、特殊キーをやり取りするには、まず
keysym から ASCII 文字列に変換し、しかるのちにキー特性へ変換するという
作業が必要になる。コンソールが異なれば、キーの変換方式も変わってくる。
というわけで、端末データベースの出番となるわけだ。端末データベースを作
成すればシステムは問題なく動作するだろうが、小さな問題が 1 つ残る。つま
り、端末データベースがいつも正しく設定されているとは限らないし、全員が
同じデータベースを使うわけでもないということだ。

アプリケーションは、データベースに登録されたエントリのうちのどれを使う
かを、何らかの方法で知る必要がある - これは TERM 環境変数を適切に設定す
ることで実現する。だが時に、端末エミュレータと TERM によって示されたデ
ータベースエントリの内容との間に不一致があることがある。

もっと言えば、多くのアプリケーションは端末データベースを使わない (か、
少なくとも全部は使わない)。そして、 BS や DEL の ASCII コードを勝手に解
釈する - つまりデータベースを見ずに、それらが本来持つべき意味を割り当て
るのだ (通常ならば当然このセマンティクスの意味は、カーソルの前あるいは
下で文字を削除することだ)。その結果我々の美しいシステムは完全に壊れてし
まうわけだ (全ての Linux ユーザーが苦い経験をしたことがあるように)。例
えば bash は DEL を backward-delete-char すなわちバックスペースすべきと
想定する。だからインストールしたばかりのコンソールの上では Backspace キ
ーは予想通りの動作をする。2 回のあべこべが重なりあったからだ! 当然、
Delete キーは動かない。これは bash が端末データベースを見ていないので、
kdch1 特性であることがわからないからだ。

どれだけ物事がこんがらがってしまっているかを表す一例として、 Red Hat デ
ィストリビューション (多分他のにも) に含まれている fix_bs_and_del スク
リプトを考えてみよう。それはその場しのぎに BackSpace keysym を
Backspace キーに割り当て、Delete keysym を Delete キーに割り当てる。こ
れでシェルが動くようになった! でも今度は不幸なことに keysym 生成と端末
データベースの正しい組み合わせに頼っているプログラムが全てまったく動か
なくなってしまう。 Delete keysym が DEL にマップされ、それが今度は
terminfo データベースの kbs キー特性にマップされてしまうために、両方の
キーがバックスペースを発生させてしまうからだ。
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

4. X

X 環境下においても大きな違いはない。X Window System という新しいレイヤ
ーは、スキャンコードをコンソール上より多種かつ正確な keysym に翻訳して
アプリケーションに渡してくれるのだ (これが XEmacs では問題が発生しない
理由だ - X はキーコード 14 を keysym BackSpace に割り当て、キーコード
111 を keysym Delete に割り当てる。こうすることで目的の動作を関連付ける
ことが容易になる)。当然だが端末エミュレータプログラム (X の世界では通常
VT100 エミュレータを指す) は X Keysym を ASCII 文字列に割り振らねばなら
ない。結果としてまた例の問題と再会することになる。

もっと詳しく言うと、普通 xterm はコンソールとまったく同じように振る舞う
(つまりまったく同じ ASCII 文字列を出力する)。しかし例えば、 7.0 より前
の Red Hat についてくる gnome-terminal は、Backspace で BS を、Delete
で DEL を出力する。これを知ったらほんとに笑えるだろうが、 xterm と
gnome-terminal はデフォルトで端末データベースの同じエントリを使うのだ。
ここでは kbs 特性は ASCII DEL に割り当てられている。というわけで、本来
まともな振る舞いをするアプリケーションのはずが、 gnome-terminal 上では
Backspace と Delete で同じ動作をしてしまうことになる。こういうときは次
の一行
bash$ export TERM=gnome                                                
でまともなアプリケーションなら問題を解決できる。ええと、いつもこうって
わけではないのだが。システムに gnome という名前の端末データベースエント
リがない場合もあるかもしれないから。とくに最新のものじゃないデータベー
スの場合は。

いずれにせよこれが常に解決策であるとは限らない - 例えばもし 7.0 以降の
Red Hat ディストリビューションを使っているなら、 gnome-terminal はコン
ソールのような動作をするだろう。しかし気を付けよう - もし Helix ディス
トリビューションを使うようにデスクトップをアップグレードすると、
gnome-terminal が 7.0 より前の Red Hat のような振る舞いをするようになる
。

以下の議論を簡単にするために、標準をコンソールのように振る舞う VT100 エ
ミュレータ、アレゲを Backspace に対して BS を、Delete に対して DEL を出
力する VT100 エミュレータ、と定義する。従って、例えば Debian ディストリ
ビューションの xterm は常に標準であり続けたが、 Red Hat では標準からア
レゲに、そしてアレゲから標準にと何度か切り替わった。gnome-terminal の履
歴はよりいっそう異常になっている。
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

5. アプリケーションを書く時に何をすべきか

コンソールアプリケーションを書くときには、ユーザーに親切に。そして標準
入力から何が来るのかを、以下の処理フローを使って理解するように努めるこ
と。

 1. 正しい terminfo エントリを開き、その文字シーケンスが現在の端末上で特
    殊な意味を持つのかどうかを探そう。もしそうなら、その terminfo セマ
    ンティクスを使う。
   
 2. 行送り、改行、タブ、そしてもちろん BS と DEL は、ASCII のもともとの
    意味で使う。お祈りも役に立つかもしれない。
   

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

6. あなたのシステムですべきこと

繰り返すが、システムを直そうとする人々が混乱する主な原因は、たいてい間
違った箇所を直そうとしているからだ。正常に作動しているように見える部分
は偶然そう見えるだけなことも多いので、ある箇所が壊れていると思って修理
をすすめると、正しい設定を間違った設定に変更してしまうことがよく起こり
がちだ。
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

6.1. やらねばならないこと

6.1.1. 微妙にずれてるアレの検出

綺麗な解決法への最初のステップは、まずどの端末が異常でどれが正常かをは
っきりと知ることだ。普通、端末は全てコンソールのように振る舞うので、そ
の場合は全体を正常にするための変更は最小で済む。だがもしアレゲ端末 (例
えばアレゲバージョンの gnome-terminal) を使っている場合は、特殊な扱いが
必要となる。

次の C の一行プログラム
void main(void) {int c; while(c = getchar()) printf("%d 0x%02X\n", c, c);} 
が役に立つかもしれない。この 1 行を ascii.c という名のファイルに記録し
、gcc ascii.c -o ascii でコンパイルした後、./ascii とタイプして実行し、
何かキーを押してから RETURN を押してみよ。このプログラムは 10 進法と 16
進法で、発生した ASCII 文字列を表示する (stty erase ^- を最初に行ってお
けば、実際のコード全てが得られる)。これで Backspace が何をするか簡単に
見られるようになった。もしそれが DEL (127) を出力するならそれは標準的な
端末、もし BS (8) ならばアレゲ端末、ということになる。
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

6.1.2. 各エミュレータの分別

アレゲ端末エミュレータを使っている場合は、それらを標準的なものと区別せ
ねばならない。理論上はこれは可能なはずだ。なぜなら端末データベースには
異なったシーケンスを持つ端末のためのエントリが数種類あるからだ。

ここで我々が取るアプローチは、gnome エントリをすべてのアレゲ端末に、
xterm エントリをすべての標準端末に用いる、というものである。このやり方
は大抵のディストリビューションでうまくいく (5.0 以前の Red Hat のような
xterm エントリがアレゲな一部例外を除く)。

だが、gnome-terminal はデフォルトで xterm と同じエントリを使用する。よ
ってもし一方がアレゲで、もう一方がそうでない場合、それらを分離するため
の方法を探す必要がある。理論的には gnome-terminal の termname オプショ
ンでユーザは TERM 変数をより相応しい名前に変更することが可能なはずだが
、現在 gnome-terminal 1.2.1 においてこのオプションは動作しない。

ここで一つよいアイデアを。gnome-terminal は COLORTERM 変数を
gnome-terminal に設定することを利用するのだ。だから、簡単なテストをシェ
ルの設定ファイルに追加すれば、 TERM 変数を修正することが可能だ。
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

6.1.3. 端末データベースの修正

次の問題は端末データベースにアレゲ端末向けの gnome エントリが存在しない
可能性があることだ (これは termcap と terminfo のいくつものバージョンで
起こりうる)。最近の terminfo データベースには gnome エントリがあるはず
だが、いずれにせよ gnome-terminal は基本的には xterm で、例のキー二つが
違うだけだ。だから、ちょっとした仕掛けで正しいエントリを新たに生成する
ことは可能なはずだ。
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

6.1.4. シェル動作の修正

bash など多くのプログラムで入力行を読むのに使用されている readline ライ
ブラリは、指定したシーケンスを認識するようにカスタマイズすることが可能
だ。この変更は TERM 変数によって制御することも可能なので、一度端末の分
別が済めば、より細かいチューニングをキーボードに施すことができる。

さらに、もし less などの raw 行入力を行うアプリケーションを正常に動作さ
せたければ、アレゲ端末エミュレータでは削除文字は BS であり、 DELではな
いのだとシェルに理解させなければならない (標準端末なら Backspace キーは
既に DEL を発信しているから、何もする必要はない)。これは stty コマンド
を用いることで実現可能だ。
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

6.2. 実践方法

┌──────────────────────────────────┐
│                                ????                                │
├──────────────────────────────────┤
│これらの修正方法には幾つか欠点がある。まず、これらは特定の端末でしか│
│機能しない。また、理論上 (実際に起こることは稀なのだが) これらは他の│
│端末の readline ライブラリを混乱させる可能性がある。もっとも、これら│
│の制限はほとんどの場合は問題にならない。                            │
└──────────────────────────────────┘

まず infocmp gnome として、既に gnome エントリが terminfo データベース
に存在しているかどうかを確認する (termcap は後で修正する)。エントリが存
在しなければ、以下のコマンド
bash$ tic <(infocmp xterm |\                                           
        sed 's/xterm|/gnome|/' |\                                      
        sed 's/kbs=\\177,/kbs=^H,/' |\                                 
        sed 's/kdch1=\\E\[3~,/kdch1=\\177,/')                          
を用いれば ~/.terminfo に正しいエントリが作成される。もし同じコマンドが
root により実行されると、グローバルデータベースにエントリが作成される
(この動作は TERMINFO を ~/.terminfo に設定すれば変更できる)。もし xterm
エントリが既にアレゲである場合は (例えば 5.0 以前の Red Hat の場合)、こ
のスクリプトはそのエントリを変更せずにそのままコピーしてくれる。これは
望みどおりの動作だろう。

次に以下の一行を ~/.inputrc [1] に追加する。
"\e[3~": delete-char                                                   
この一行は readline ライブラリに、標準 Delete キーを標準的なエミュレー
タでどのように扱うかを指示する。運がよければ他の端末とは干渉しないだろ
う。だが、次にライブラリに対し DEL 文字がアレゲ端末上で何を意味するか説
明せねばならない。例えば以下の 3 行を ~/.inputrc に追加する。
$if term=gnome                                                         
DEL: delete-char                                                       
$endif                                                                 
もし xterm がアレゲである場合も、それに対応する 3 行を追加せねばならな
い。一方もしアレゲな端末エミュレータがなければ、この作業は必要ない。こ
れらの変更は /etc/inputrc ファイルを変更すればグローバルに有効になる。

TERM 変数が正しく設定されていれば、条件付き割り当てを使うことでアレゲ端
末を正しく動作させることは可能だ。これを確かめるにはいくつもの方法があ
る。まず gnome-terminal での TERM 変数のデフォルト値は xterm だから、も
しアレゲ端末が存在しないければ、我々は何もしないでよい。だが、もし
xterm をデフォルトにしているアレゲ端末が存在する場合、TERM 変数を正しく
設定する方法を見つけなければならない - gnome-terminal がこれに当てはま
るとしよう。

もっとも簡単に TERM 変数の設定を行うには、 gnome-terminal を --termname
=gnome 引数付きで起動すればよい。これは GNOME パネル上のラウンチャーに
正しいコマンドラインを設定することなどで可能だ。もし古いバージョンを使
っている場合、この方法は動作しないかもしれない。その場合以下の数行を
if [ "$COLORTERM" = "gnome-terminal" ]                                 
then                                                                   
    export TERM=gnome                                                  
fi                                                                     
~/.bashrc 設定ファイル [2] に追加すればよい。この割り当ては
gnome-terminal 上でのみ実行され、 TERM 変数を正しく設定する。
   
   
    ????: 端末を gnome に設定すると、 ls は色表示を行わなくなる。多くの
    バージョンの ls は gnome-terminal の色特性を知らないためだ。これを
    避けるには、 ~/.dircolors 設定ファイルを dircolors --print-database
    >~/.dircolors として作成し、設定ファイルに TERM=gnome という一行を
    追加すればよい。

アレゲな端末エミュレータ向けの termcap エントリを動的に作成させることも
できる。以下に手順を説明する。いつものように、 ~/.bashrc に追加する:
if [ "$TERM" = "gnome" ]                                               
then                                                                   
    export TERMCAP=$(infocmp -C gnome | grep -v '^#' | \               
                    tr '\n\t' '  ' | sed 's/\\  //g' | sed s/::/:/g)   
fi                                                                     

最後に、削除キーにより生成される文字を端末デバイスに教えてやらねばなら
ない。削除キーは通常バックスペースであると期待されているために、標準的
な端末エミュレータではこれは DEL 文字になる。だからまずそのようにセット
してから、各アレゲ端末用の条件文を追加していく。いつも通り ~/.bashrc に
追加する:
stty erase ^?                                                          
                                                                       
if [ "$TERM" = "gnome" ]                                               
then                                                                   
    stty erase ^H                                                      
fi                                                                     
もし全ての端末エミュレータがアレゲならば、削除文字を条件なしで設定して
ももちろん構わない。
   
   
    ????: 一部のディストリビューションは、既にこの修正をシステムワイド
    な /etc/inputrc 設定ファイルなどに施していることがある。この場合 ~
    /.inputrc から不要になった行を削除することもできる。

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

6.3. tcsh向けの修正

tcsh の場合、修正は全部 ~/.tcshrc に施す必要がある。以下のように bash
の場合と似ている -
bindkey "^[[3~" delete-char                                                                  
                                                                                             
if ($?COLORTERM) then                                                                        
   if ($COLORTERM == "gnome-terminal") then                                                  
      setenv TERM gnome                                                                      
   endif                                                                                     
endif                                                                                        
                                                                                             
stty erase ^?                                                                                
                                                                                             
if ($?TERM) then                                                                             
   if ($TERM == "gnome") then                                                                
      setenv TERMCAP \                                                                       
       "`infocmp -C gnome | grep -v '^#' | tr '\n\t' '  ' | sed 's/\\  //g' | sed s/::/:/g`" 
      bindkey "\177" delete-char                                                             
      stty erase ^H                                                                          
   endif                                                                                     
endif                                                                                        
二つ目の部分は全てのアレゲ端末用に複製せねばならない。当然、termcap が
既に存在するなら作成する必要はない。
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

7. 何をやってもダメな場合

最初にすることは、どの ASCII コードが発生しているかを C の 1 行プログラ
ムを使って確認することだ。

どのシーケンスが発生しているかわかったら、現在の terminfo エントリを
infocmp を使って確認する必要がある (大量の情報が表示されるが恐れないよ
うに!)。そして kbs と kdch1 特性が正しいシーケンス (対応するキーから発
生するもののこと) と一致することを確認する。さらに、stty -a を用いて、
削除文字は Backspace キーによって生じるものであることを確認せねばならな
い (^H は BS を意味し、^? は DEL を意味することに注意)。

もし不一致があった場合、いくつかの理由が考えられる - TERM 変数の値が違
う、端末データベースのエントリが違う、 X の端末エミュレーションが違う、
などだ。ここまでで、あなたが自分で調査を進めるに十分な情報を得てくれた
ことを期待する。
   
   
    ????: もし各アプリケーションが異なる動作をする場合、それらのいくつ
    かは端末データベースを正しく活用していて、残りはそれができていない
    可能性が高い。一部のアプリケーションで各キーが正しい動作をしたとし
    ても、それはそのアプリケーションが端末データベースを正しく使用して
    いることを保証するわけではない - 覚えているだろうか？それは偶然動い
    ているだけかもしれない。もしそれらを個別にチェックしたければ ne
    (http://ne.dsi.unimi.it/) エディタを試してみるとよい。ne は kbs と
    kdch1 を含む端末特性の全てを利用し、予想される意味はそれ以外が全て
    適用外だった場合にしか利用されない。

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

8. 結論

ここまでで推奨してきた修正で、書いた文章を消すにあたっての問題の多くの
部分が解決されるだろう (とはいえ、新しい文章を書くための助けにはならな
い:))。

全体の設定の中で小さいバグがある。gnome-terminal から xterm を開始した
場合、TERM に gnome が設定されてしまう。この不便さは、もちろん無害だし
、 gnome-terminal を TERM の適切な設定とともに実行することが可能になれ
ば解消されるだろう。

もう一つ、効果的な解決法のない、ちょっといらただしい問題は、リモートか
らの接続に関係するものだ。端末データベースとつじつまの合わないホストに
接続した場合には、手動で設定をおこなう必要がある。

最後に一言言っておくべきこととしては、これらの修正は壊れたアプリケーシ
ョン (たとえば、kbs キー特性を無視するアプリケーション) には通用しない
。こうした場合にはどうしようもない。なぜなら一つの壊れたアプリケーショ
ンに合わせた修正をすると、他の行儀の良いアプリケーションを壊すことにな
るからだ。
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

9. 日本語訳について

この日本語訳は、匿名によるバザール的翻訳が可能かどうかという実験の一環
として、 2 ちゃんねる掲示板 Linux 板の連作で訳そう! mini-HOWTOs (http:/
/cocoa.2ch.net/test/read.cgi?bbs=linux&key=983252852) スレッドに書き込
んだ匿名の有志が行いました。複数の寄稿者により翻訳され、原著者の承諾も
得ていますが、匿名であるため訳者名は掲載しません。

この文書は、商用・非商用を問わず、自由に複製・頒布することができます。
その際は、LDP ライセンス (http://www.linuxdoc.org/manifesto.html) に従
ってください。

ご質問、および修正・提案等は、調整役の二之宮祐樹 <gm@debian.or.jp> また
は JF ML <JF@linux.or.jp> にお願いします。

????

[1] 古いバージョンの bash では、 INPUTRC を正しく設定する必要があること
    を覚えておこう。例えば                                             
    export INPUTRC=~/.inputrc                                          
    という行を ~/.profile (またはそれ以外のログインシェルのみが読み込む
    ファイル) に追加する。                                             
[2] より正確には、ログインシェルだけでなく全てのシェルに読み込まれるシ 
    ェル設定ファイルに、だ。どれが正しいファイルかは、 bash のスタート 
    アップシーケンスに依存する。                                       
