.inputrc の TAB と Ci のマッピングを別々にする

.inputrc の TAB と Ci のマッピングを別々にする

私が試してみたところ、.inputrc の「TAB」と「Ci」は同じ意味のようで、一方にバインドしたものは、もう一方にもバインドされます。元々は同じもので、この動作は昔から受け継がれてきたものだとわかっていますが、今日では、端末エミュレーターを除いて、すべての X アプリケーションで Ci と TAB の押下が区別されます。

では、TAB キーを押すとターミナル コマンド (たとえば、「complete」) を実行し、「Ci」を押すと別のコマンドを実行する方法はありますか?

(同じ質問は、Cm と ENTER、Cz、Cd、および元のバインディング以外の方法で送信し、これらの貴重なキーバインディングに独自のコマンドを適用したいすべての制御シーケンスに適用されます)

ちなみに、キー入力からシェルの解釈までのプロセスを少し説明していただければ、理解しやすくなります。今のところ、キーボード イベントは Xmodmap によって変換され、次に .inputrc によって変換され、その結果がシェルまたはこれに似たものによって解釈されることを理解しています。

答え1

xmodmapとの間には直接的な関係はありません.inputrc

ターミナルエミュレーターに応じて、ターミナル経由で送信されるキーを変更する方法はいくつかあります。そのいくつかは次のとおりです。

  • Xキーボードの設定を変更する(日本語
  • 特定のイベントで送信されるキーコードを変更する(xmodマップ
  • translationsxterm で使用されるリソースなど、端末固有のもの。

ただし、通常の状況では、ほとんどすべての端末がそのように設定されているため、文字control/Iが送信されます。tab

を使用するとxkb、(原理的には)キーボードの動作を変更できます。次に、X アプリケーションはキーの押下と解放のイベントを検出し、それをキー シンボルに変換します。 xevはイベントを表示するのに便利です。X で実行されている端末エミュレーターは一連のイベントを取得し、それを (X ライブラリ呼び出しを使用して) 文字に変換できます。tabその場合、A は単なる別の文字になります。

xmodmapこのプロセスにおける の役割は、X キーボード構成へのアドホックな変更となるでしょう。

を使用している場合xtermtranslationsリソースは多くの設定可能性を提供します。これは、X ツールキットでは、xtermの組み込みアクションにさまざまなキーの組み合わせを関連付けることができます。デフォルトのキーバインディングは、マニュアルこれらのバインディングを上書きしたり追加したりすることができます。情報($HOME/.Xdefaultsたとえば、簡単に混乱する可能性がありますが)を設定できる場所はいくつかあります。たとえば、XAPPLRESDIR環境変数を設定して、カスタマイズされた app-defaults ファイルを含むユーザー ディレクトリを指すようにします。 という名前のディレクトリにXTerm、次の値を入力して の結果を変更できますctrl/I

*VT100*translations:    #override \n\ 
    Ctrl ~Shift<Key>I:string("??")

tabキーには独自の特別なキーシンボルがあるため、この変換の影響を受けません。

関連情報