ENDキーにterminfoエントリがないのはなぜですか?

ENDキーにterminfoエントリがないのはなぜですか?

DebianシステムでENDキーを押すと、次のようになります^[[F

$ showkey -a

Press any keys - Ctrl-D will terminate this program

^[[F     27 0033 0x1b
         91 0133 0x5b
         70 0106 0x46

しかし、なぜこのキーとコードはありませんか?用語情報

$ infocmp -1 | grep end
kend=\EOF,

それにもかかわらず、呪い。で正しく識別するように管理するにはどうですかKEY_END

TERMはいxterm-256color

kendしかし、endjustの代わりにandを持つ動機は何ですかend? (khomeおよびと同じhome

編集する

Johan Myréenが自分の意見で述べたように、khomeこの文字列はHomeキーを押して生成されるシーケンスです。しかし、Debianでホームボタンを押すとhome

$ showkey -a

Press any keys - Ctrl-D will terminate this program

^[[H     27 0033 0x1b
         91 0133 0x5b
         72 0110 0x48
$ infocmp -1 | grep home
    home=\E[H,
    khome=\EOH,

ベストアンサー1

Johan Myréenの答えは似ていますが、問題ではありません。使用するほとんどの端末エミュレータではノーマルそしてアプリケーション特殊キーモードです。端末の説明は次のとおりです。一つフルスクリーンアプリケーションで使用されるモードに対応するモードです。その他のアプリケーション(例:インタラクティブシェル)通常使用する画面を初期化しません。アプリケーションモデル。バッシュがその例です。

存在するノーマルモード、xtermなどの端末伝送escape[(CSI)アプリケーションモードでは、キーボードが送信されますescapeO(SS3)。 terminfo構文では、脱出するはい\E。だからinfocmpアプリケーションパターンを使って説明を見てみましょう。これhome送信された機能到着端末、カーソルの移動方法を教えてください。位置(左上隅)とkhome(送る~からキーボードを使用する端末)。

フルスクリーンアプリケーション(例:ncursesを使用するアプリケーション)可能キーボードの初期化に使用される端末機能文字列を送信します。一部の端末記述は端末をアプリケーションモードに切り替えますが、一部ではありません。

何かの目的を指します。kend比較的end命名規則は次のとおりです。 terminfo では、規則に従って次に始まるすべての名前を指定します。K特殊キー(ファンクションキー、カーソルキー、キーパッドキー)を参照して、そのキーがアプリケーションが読み取る文字列であることを明確にします。例えば、kcub1(カーソルを後ろに)とは違うcub1(カーソルを1列後ろに移動します)。

ncurses はキーを次のように識別します。KEY_END使用しているアプリケーションが呼び出すのでkeypadsmkxこの関数は(「キーボード転送モードの開始」を意味するニーモニック)を使用して端末を初期化します。実際には、アプリケーションモードが開いたり開いたりしない場合があります。 Linuxコンソールの端末記述はありませんが、xtermの説明はあります。

原則として、以下を使用できます。tputモード切り替え(および他の結果を得るshowkey):

$ showkey -a

Press any keys - Ctrl-D will terminate this program

^[[H     27 0033 0x1b
         91 0133 0x5b
         72 0110 0x48
^C        3 0003 0x03
^D        4 0004 0x04
$ tput smkx
$ showkey -a

Press any keys - Ctrl-D will terminate this program

^[OH     27 0033 0x1b
         79 0117 0x4f
         72 0110 0x48

問題は、cursesは文字列の名前を1つだけ認識することです。 xterm などの一部の端末は、編集キーボードで別の名前のキーを使用して古いハードウェア端末をエミュレートします。以下のxterm FAQでは、「Home」キーの名前を「Insert」として指定できます。

追加資料:

おすすめ記事