Ctrl-PageUpを押すとxterm-termiteが「5〜」を印刷するのはなぜですか?

Ctrl-PageUpを押すとxterm-termiteが「5〜」を印刷するのはなぜですか?

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シーケンスを使用します)。これにより、一部のプログラムが混乱する可能性があります(主に端末が正しく設定されていない場合)。

関連情報