xterm-termiteの使用中にCtrl-PageUpを押すと、画面に「5〜」の文字が表示されます。なぜこれですか?
Linuxコンソールで同じキーを押したときにログインしてすぐに押すと、コマンド履歴から戻って「cd exp2111 /」が印刷されます。
ベストアンサー1
これは、端末のプロトコル(および疑似端末などxterm
)によるものです。それらは単に入力(たとえば、キーを押す)または印刷された出力(通常のテキスト)にデータバイトを送信します。
ただし、通常のASCII文字(またはUTF-8コード拡張子)を使用してすべての操作を実行できるわけではありません。たとえば、キーに共通の文字がない場合、通常は次のエスケープシーケンスで送信されます。
<esc> '[' (<keycode>) (';'<modifier>) '~'
たとえば、ウィキペディアでこれらのシーケンスをたくさん見つけることができます。https://en.wikipedia.org/wiki/ANSI_escape_code#Terminal_input_sequences
たとえば、vt シーケンスは次のようになります。
<esc>[5~ - PgUp
したがって、予想通り、端末は PageUp コードを送信します。これは絶対に正確です。
だから本当の質問は:なぜ端末の印刷コードはこのようなのですか?誤った端末設定(TERM
)など、いくつかの理由が考えられます。ただし、通常、受信プログラムはそれを解釈できないため、画面にそのまま表示されることがあります。たとえば、PageUpは一般的にbash
認識されますが、シェルユーティリティ(たとえばcat
)は認識されないため、フォアグラウンドプロセスがこの場合はcat
エコー(つまりコード)を取得しますが、bashがフォアグラウンド(したがって入力を待っている)の場合はシーケンスを正しく解釈します)。
注:PageUpは通常プログラムに送信され、擬似端末(スクロールなど)では使用されません。ただし、これは設定で変更され、前景プログラムの表示モードによって変わることがあります。
注:一部のオペレーティングシステムは異なるエスケープシーケンスを使用できます(私の記憶が正しい場合、macos端末は別のPageUpシーケンスを使用します)。これにより、一部のプログラムが混乱する可能性があります(主に端末が正しく設定されていない場合)。