
私が試してみたところ、.inputrc の「TAB」と「Ci」は同じ意味のようで、一方にバインドしたものは、もう一方にもバインドされます。元々は同じもので、この動作は昔から受け継がれてきたものだとわかっていますが、今日では、端末エミュレーターを除いて、すべての X アプリケーションで Ci と TAB の押下が区別されます。
では、TAB キーを押すとターミナル コマンド (たとえば、「complete」) を実行し、「Ci」を押すと別のコマンドを実行する方法はありますか?
(同じ質問は、Cm と ENTER、Cz、Cd、および元のバインディング以外の方法で送信し、これらの貴重なキーバインディングに独自のコマンドを適用したいすべての制御シーケンスに適用されます)
ちなみに、キー入力からシェルの解釈までのプロセスを少し説明していただければ、理解しやすくなります。今のところ、キーボード イベントは Xmodmap によって変換され、次に .inputrc によって変換され、その結果がシェルまたはこれに似たものによって解釈されることを理解しています。
答え1
xmodmap
との間には直接的な関係はありません.inputrc
。
ターミナルエミュレーターに応じて、ターミナル経由で送信されるキーを変更する方法はいくつかあります。そのいくつかは次のとおりです。
ただし、通常の状況では、ほとんどすべての端末がそのように設定されているため、文字control/Iが送信されます。tab
を使用するとxkb
、(原理的には)キーボードの動作を変更できます。次に、X アプリケーションはキーの押下と解放のイベントを検出し、それをキー シンボルに変換します。 xev
はイベントを表示するのに便利です。X で実行されている端末エミュレーターは一連のイベントを取得し、それを (X ライブラリ呼び出しを使用して) 文字に変換できます。tab
その場合、A は単なる別の文字になります。
xmodmap
このプロセスにおける の役割は、X キーボード構成へのアドホックな変更となるでしょう。
を使用している場合xterm
、translations
リソースは多くの設定可能性を提供します。これは、X ツールキットでは、xtermの組み込みアクションにさまざまなキーの組み合わせを関連付けることができます。デフォルトのキーバインディングは、マニュアルこれらのバインディングを上書きしたり追加したりすることができます。情報($HOME/.Xdefaults
たとえば、簡単に混乱する可能性がありますが)を設定できる場所はいくつかあります。たとえば、XAPPLRESDIR
環境変数を設定して、カスタマイズされた app-defaults ファイルを含むユーザー ディレクトリを指すようにします。 という名前のディレクトリにXTerm
、次の値を入力して の結果を変更できますctrl/I。
*VT100*translations: #override \n\
Ctrl ~Shift<Key>I:string("??")
tabキーには独自の特別なキーシンボルがあるため、この変換の影響を受けません。