画面上の特定のキーストロークを表す一連の文字をどのようにエクスポートできますか?私は、バインドが入力として取るものは何ですか?たとえば、「s」は「s」キーの明白なキー入力を表します。 「S」は「shift+s」を意味します。しかし、他のより複雑な組み合わせの表現は私には明確ではなく、それによる計画はやや曖昧に見えます。
周りを見回しています。以前は、特定の状況で「tab」と「shift + tab」の表現が何であるかを尋ねました。しかし、答えが見つかりません。だから、全体的な流れを理解しようとするのが最善だと思います。私も見たことがあるこれしかし、今は私にとって効果的です。
この画面で従うべき構成/規則を説明できる人はいますか?キーの組み合わせ表現をエクスポートするルールは何ですか?画面によって異なりますか?それとも他のソフトウェアと共有されますか?たぶん別のGNUソフトウェアがありますか?これはどこで録音されましたか?
ベストアンサー1
screen
キー入力を処理せずに端末デバイスから読み取られた文字や文字シーケンスを処理する端末アプリケーションなどのスキームはありません。
ターミナル(または同様のターミナルエミュレータxterm
)は、キーストロークを文字または文字シーケンスに変換し、それをライン(ターミナルエミュレータの場合は行は仮想です)を介してシステムに送信します。エンドデバイスの回線規律はこれを多少変更することができます(例:CRをLFに変更)。
screen
端末に何かを入力するときにどの文字または文字シーケンスが表示されるかを確認するには、次のようにしますod
。
od -tc
たとえば、ターミナルを入力すると、ターミナルod -tc
デバイスは文字を読み取り、標準出力に表示します(出力をリダイレクトしない場合はターミナルデバイスに表示)。印刷可能方法。
たとえば、次は入力時の出力です。 (Up Enter Ctrl+D後者はod
入力の終わりを示します):
0000000 033 [ A \n
0000004
Up3つの文字ESCが[
送信され、に変更されました。A
\r
\n
screen
実際にホスト端末を次に設定します。生のモードでは、行ルールは変換を実行せず、文字が特別に処理されないようにします(上記で004
送信された文字などCtrl+D)。
このモードで端末が送信する内容を確認するには:
$ stty raw; stty min 1 time 10; dd count=1 2> /dev/null | od -tc; stty sane
0000000 033 [ A
0000003
\n
byの出力はforの出力od
に変換されていません(改行なので、端末に出力するときにカーソルだけ下に移動し、キャリッジリターン()が必要な行の先頭に移動しません)。\r\n
\n
\r
上記では、端末を次のように設定しました。生のread
モードだけでなく、文字が受信されると、1/1000秒後に端末デバイスでタイムアウトが発生するように設定します(そうしないと、1
戻りを完了する前に多くの文字を入力する必要があるため)。read
od
すべての端末を押すと、またはまたはTabとも呼ばれるTAB ASCII文字が送信されます。すべての端末が同じコンテンツを送信するわけではありません(たとえば、一部の端末は送信し、一部は送信し、一部は送信しません)。\t
^I
C-I
\011
Shift+TabESC
[
Z
\t
terminfoデータベースは$TERM
関数kcbt
(背面ラベル、しかし必ずしも転送されるわけではありませんShift-Tab)。
現在の端末の場合:
$ tput kcbt | od -tc
0000000 033 [ Z
0000003