xtermのファンクションキーに連続していないキーシーケンスがある歴史的理由

xtermのファンクションキーに連続していないキーシーケンスがある歴史的理由

私はターミナルエミュレータとしてgnome-terminalを使用しており、ファンクションTERM=xterm-256colorキーを押したF1ときに送信されるキーシーケンスF2は次のように印刷されます。

$ infocmp -L1 | grep _f | sort -V
key_f1=\EOP,
key_f2=\EOQ,
key_f3=\EOR,
key_f4=\EOS,
# gap 4
key_f5=\E[15~,
# gap 5
key_f6=\E[17~,
key_f7=\E[18~,
key_f8=\E[19~,   # no gap 4 here
key_f9=\E[20~,
key_f10=\E[21~,
# gap 5
key_f11=\E[23~,
key_f12=\E[24~,
# gap 4
key_f13=\E[1;2P,
key_f14=\E[1;2Q,
key_f15=\E[1;2R, # no gap 5 here
key_f16=\E[1;2S,
# gap 4
key_f17=\E[15;2~,
# gap 5 
key_f18=\E[17;2~,

# gap …キーシーケンスに間隔(マーカーで表示)がある理由を知りたいです。 「欠けている」キーシーケンス(例\E[16~:)は、図に示すように使用されませんinfocmp -L1 | grep -F '\E[16~'

最新のキーボードはファンクションキーを4つのキーグループに分けているため、これらのグループ間の違いを理解できます。一部の歴史的なキーボードでは、一部のファンクションキーを5つのキーグループにグループ化しているため、これらのグループ間の違いを理解できます。ただし、時々(常にそうではない)4つのキーグループと時々(常にそうではない)5つのキーグループの間に間隔があり、一部のファンクションキーが1つまたは2つのキーグループのみで構成されることがあります。このレイアウトのキーボード。

これらのキーシーケンスの理由は何ですか?キーボードレイアウト(それぞれ4つまたは5つのファンクションキーを含む)間の互換性はほとんどないようです。なぜなら、あるレイアウトの空白が別のレイアウトの空白を破り、その逆の場合も同じだからです。

ベストアンサー1

gnome-terminal は、最も一般的に使用される xterm のキーボード構成を複製します。

次に、xterm は DEC VT220 と一致するようにキー割り当てを使用します。LK201キーボード。これらはほとんどのギャップを解消します。 F1-F4およびF13-F16で使用される他のエンコーディングは、VT220のエンコーディングではありません。 VT220のF1-F5は地元のデフォルトはファンクションキーです(通常はホストに何も送信しません)。

これに対してF1~F4コードは次のようになります。VT100テンキーの一番上の行X キーボード構成には適していません。テンキーの最初のキー(維持されました。 F13-F16は、この回避策をxtermの変更されたファンクションキーに適用します(例:移動する 修飾子;2xtermにキーシーケンスの一部を送信させます)。

一部のVT220キーには異なる名前があります(例:F16助けるただし、xtermはこれらの名前を使用しません(アプリケーションによって異なるため)。端末記述にこれらの名前を使用すると、リストにスペースが増えます。しかし、VT220特有の違いは、DECハードウェア端末のファンクションキーセットに関連しています。

$ infocmp -L1 | grep _f | sort -V
key_f1=\EOP,
key_f2=\EOQ,
key_f3=\EOR,
key_f4=\EOS,
# gap 4
key_f5=\E[15~,
# gap 5
key_f6=\E[17~,
key_f7=\E[18~,
key_f8=\E[19~,   # no gap 4 here
key_f9=\E[20~,
key_f10=\E[21~,
# gap 5
key_f11=\E[23~,
key_f12=\E[24~,
# gap 4
key_f13=\E[1;2P,
key_f14=\E[1;2Q,
key_f15=\E[1;2R, # no gap 5 here
key_f16=\E[1;2S,
# gap 4
key_f17=\E[15;2~,
# gap 5 
key_f18=\E[17;2~,

xterm-r6端末記述には、F1-F4(およびF13-F16)に対するこれらの変更はありませんが、予想される間隔が表示されます。

> infocmp -L1 xterm-r6 | grep key_f | sort -V
        key_f1=\E[11~,
        key_f2=\E[12~,
        key_f3=\E[13~,
        key_f4=\E[14~,
        key_f5=\E[15~,
...
        key_f6=\E[17~,
        key_f7=\E[18~,
        key_f8=\E[19~,
        key_f9=\E[20~,
        key_f10=\E[21~,
        key_f11=\E[23~,
        key_f12=\E[24~,
        key_f13=\E[25~,
        key_f14=\E[26~,
...
        key_f15=\E[28~,
        key_f16=\E[29~,
...
        key_f17=\E[31~,
        key_f18=\E[32~,
        key_f19=\E[33~,
        key_f20=\E[34~,
        key_find=\E[1~,

(gnome-terminalはほとんどすべての文字セット機能が不足しているため、実際にはVT220エミュレータではありませんが、xterm-imitatorです。)

おすすめ記事