この質問は実際にここ。キーの組み合わせをマッピングするときに、異なる端末(rxvtやxtermなど)が異なる値を使用する理由は何ですか? rxvtまたはxtermの場合、どのようにキーシーケンスの値を見つけて簡単に.inputrcファイルに追加できますか?
答え1
ヒステリーの歴史的理由から。ハードウェアメーカーは、常に同じキーの共通の単一制御シーケンスを標準化しておらず、ガラスターミナルがターミナルエミュレータに置き換えられたとき、ソフトウェアライターも標準化していません。
Ctrl+ 次にkeyを入力して、特定の端末でキーが生成する制御シーケンスを確認できますV(ほとんどのシェルまたは同じコマンド入力で)。ほとんどのキーは、エスケープ文字と印刷可能文字を含む制御シーケンスを生成します。 +はエスケープ文字が文字通り挿入されるようにします。cat
hexdump
CtrlV
幸いなことに、さまざまな端末で送信される制御シーケンス間にはほとんど衝突がありません。主な例外は、一部の端末はを送信し、^H
他の端末はを送信することです。多くの端末には、2つのバックスペース/削除モードを切り替えるオプションがあります。Backspace^?
Delete^?
Backspace^[[3~
Delete
答え2
ザイルズが言ったこと。言及された特定のケースでは、VT100およびVT220端末(現在の端末エミュレータがエミュレートしようとしている)には修飾子と矢印キーの組み合わせのキーコードがないため、エミュレータは独自のキーコードを導入します。
xtermとrxvtがなぜ違うのかよくわかりませんが、おそらく同時に独立して導入された可能性があります。 xtermは実際にもともと今日より短いコードを使用していましたが、これは問題が発生し、最終的に変更されました。
最近、ほとんどの端末エミュレータ、特にさまざまなデスクトップ環境(OS Xを含む)で使用されているエミュレータは、xtermをエミュレートしようとします。しかし、Rxvt-unicodeはまだrxvtの伝統を継承しています。
答え3
関心のあるキーは.inputrc
通常、制御文字、特に次に終わる文字です。脱出する一般に^[
、、で表される文字は、などで表されることも\e
あります\E
。\033
見つける方法キーボードから送信されたキーはよく知られています。lnext
(リテラルの後)文字(通常^V
)を使用します。lnext
次の文字の解釈を抑制するには、この文字を押してから特殊キーを押します。これにより、ターミナルドライバは読み取り可能な形式で文字をエコーできます。
なぜある端末タイプが他の端末タイプとどのように異なるかはよく知られていない。どちらも、名目上、Digital Equipment(DEC)と同じハードウェア端末ファミリに基づく端末エミュレータですxterm
。rxvt
1970年代と1980年代には他の多くの種類のハードウェア端末が製造されていましたが、VT100とそれ以降の製品が最も人気がありました。
一般に、VT100にはファンクションキーがないことが知られています。キーボードは、IBM PC キーボードの数字キーパッドとサイズがほぼ同じです。一番上の行にはPF1からPF4までのラベルが付けられています。一般的なコンセプトはファンクションキーデフォルトのQWERTYキーボードの上部または左側の数字キーのセットなど、この領域の外側にキーボードの他の領域があります。
VT220は、番号付きファンクションキーF6〜F20を追加してVT100の設計を拡張します。 F1-F5がありますが、これはローカル機能のため、通常はプログラミングには使用できません。プログラミングに便利です。 DECによって割り当てられたエスケープシーケンスを送信します。送信されたエスケープシーケンスのいくつかの標準化がありますが、到着端末(ECMA-48)、送信されたシーケンスには対応する標準はありません。~からターミナル。ルールのみがあり、ホストターミナル機能と「同じ」特殊キーは同じエスケープシーケンスを送信する必要があります。これは、端末がローカルエコーモードに設定されている場合に特に便利です。
xtermが1980年代後半または1990年代初めに最初に開発されたとき、誰かがF1-F5に同様のエスケープシーケンスを割り当てることによってVT220ファンクションキーの概念を拡張しました。 F21-F24キー割り当ては後で表示されます(2002年)、同様の方法を使用します。
1990年代半ばには明確なxterm
計画はありませんでした。修正済みキー(使用などcontrol)shiftRxvt開発者は、rxvt
拡張に別のアプローチを使用することにしました。決定的な特殊キー用に送信された文字列の文字。これは、ホストツーエンド機能に対応しないキーを導入し、必ずしも伝統的な方法で終わらないために問題になります。決定的な文字($
例:)。
拡張機能では、番号付け範囲を拡張してxterm
番号付けキーを追加することを選択しました。これはうまくいきましたが、より良い解決策が提案されました(shiftcontrolパッチ#94、1999)Jeffrey Altmanによって書かれ、最後のDEC VTxxxターミナルシリーズ(VT525)に実装されました。修飾子を数字でエンコードし、範囲シーケンスをエスケープします。数年後(2002年パッチ番号167)、誰かが他のホストからターミナルへのエスケープと混同される可能性がある問題を指摘し、この問題を回避するために方法を変更しました。
KonsoleおよびVTE(GNOME Terminal)開発者は、1999年にxtermで使用されたスキームをコピーします。滞在するxterm
ここで端末記述も更新される。これにより多くのバグレポートが作成されました。
参考までに: