たとえば、
"\e[1;5C"
"\e[Z"
"\e-1\C-i"
\e
私はescapeを表すものとC-
forなどいくつかの部分だけ知っていますが、Ctrlこの数字(1
)と文字()Z
は何ですか?;
、[
および記号は何を表しますか-
?
試行錯誤に過ぎませんか、それともbashキーコードの完全なリストとその構文が説明されていますか?
ベストアンサー1
これは、特定のキーを押すと端末から送信される一連の文字です。 bashやreadline自体とは何の関係もありませんが、特定のキーが押されたときに実行されるアクションを設定するには、特定のreadline
キーまたはキーの組み合わせで送信される文字の順序を知る必要があります。
このキーを押すと、A通常、端末はa
(0x61)文字を送信します。<Ctrl-I>
またはを<Tab>
押すと、通常^I
送信される文字もTAB
または\t
(0x9)として呼び出されます。ほとんどのファンクションキーとナビゲーションキーは、通常(または0x1b、8進数033)^[
とも呼ばれる(control-[)で始まる一連の文字を送信しますが、正確な順序は端末によって異なります。ESC
\e
キーまたはキーの組み合わせが端末に送信する内容を見つけるための最良の方法は、そのキーを実行してキーボードから入力することですsed -n l
。Enterこれにより、次の内容が表示されます。
$ sed -n l
^[[1;5A
\033[1;5A$
最初の行は、echo
端末装置によって実行されるローカル端末によって引き起こされます(端末装置の設定が影響を与える可能性があるため、信頼できません)。
2行目はで出力されますsed
。含まれていない$
、単に行の終わりがどこにあるかを示します。
上記は、Ctrl-Up(私が押したもの)6文字、、、、およびESC
(0x1b 0x5b 0x31 0x3b 0x35 0x41)を送信することを意味します。[
1
;
5
A
データベースは、複数のエンドポイントに対する複数の公開鍵のterminfo
複数のシーケンス(値ベース)を記録します。$TERM
たとえば、
TERM=rxvt tput kdch1 | sed -n l
rxvt
キーを押したときにどのエスケープシーケンスが送信されるかを知らせますDelete。
現在の端末を使用して、特定のシーケンスに対応するキーを見つけることができます(ここではinfocmpinfocmp
と仮定)。ncurses
$ infocmp -L1 | grep -F '=\E[Z'
back_tab=\E[Z,
key_btab=\E[Z,
このようなキーの組み合わせはCtrl-Upデータベースに対応する項目がないため、それらの送信内容を理解するには、その端末のソースコードやマニュアルを読んでterminfo
ください。sed -n l