web-dev-qa-db-ja.com

GNU画面のターミナルエスケープシーケンス

そのため、ターミナル(より正確にはターミナルエミュレーター)のエスケープシーケンスの概念と、それらがscreen bindkeyコマンドにどのように関連しているかについてはかなり混乱しています。インターネットで見つけたサンプルの.screenrcファイルを見ていましたが、次の構成が見られました。

# switch windows with F3 (prev) and F4 (next)
bindkey "^[OR" prev
bindkey "^[OS" next

# switch layouts with Ctrl+F3 (prev layout) and Ctrl+F4 (next)
bindkey "^[O1;5R" layout prev
bindkey "^[O1;5S" layout next

たとえば、シーケンス^[0RF3を意味し、シーケンス^[01;5RCtrl+F3を意味する理由がわかりません。そのようなシーケンスの表はありますか?

また、これらのシーケンスは、リセットの場合は$PS1、フォアグラウンドブラックの場合は\[\033[0m\]のように、ターミナルプロンプトで色を構成するために使用されるシーケンスを思い出させます(たとえば、\[\033[30m\] env変数を使用)。これらの2つの「コードシーケンス」の間には実際に何らかの関係がありますか、それとも私の純粋な想像ですか?

2
eciii

良い質問。

はい、これらはANSIエスケープコードです。

VT100のANSIエスケープコードのリストはここで確認できます: http://www.braun-home.net/michael/info/misc/VT100_commands.htm しかし、より迅速な方法があります-ターミナルエミュレータプレス Control-v その後 Control-F3 たとえば、次のように表示されます。

$ ^[[1;5R

man bashには、次のように書かれています。

   quoted-insert (C-q, C-v)
          Add the next character typed to the line verbatim.  This
          is how to insert characters like C-q, for example.

^[自体が Escapequoted-insertの出力で、この答えを調べることができます https://unix.stackexchange.com/a/108014/72304 この表記がどこから来ているかを学ぶことができます。

それをよりよく理解するために-すでに知っているように 色を選択するためのANSIエスケープコードEscapeキーを使用します。リテラルEscapeを入力するには、いくつかの方法があります。たとえば、EscapeがASCIIテーブル:で\ 033であることがわかっているので、8進表記を使用できます。

printf "\033[1;34mThis is a blue text.\n\033[0m"

printfの一部の実装が理解できる\eバックスラッシュエスケープを使用することもできます。

printf "\e[1;34mThis is a blue text.\n\e[0m"

ただし、quoted-insertを使用してリテラルEscapeを挿入することもできます-\eの代わりにカーソルを置き、削除して、を押します。 Control-v 次にを押します Escape。あなたはこれを得るでしょう:

printf "^[[1;34mThis is a blue text.\n^[[0m"

ターミナルエミュレータでこれを行うと、^[は単一の文字として扱われることに注意してください。上記の行をコピーしてターミナルエミュレータに貼り付けると、1文字ではなく2文字になるため、機能しません。

0