bashショートカットにCtrl + mとCtrl + qが使用されないのはなぜですか?

bashショートカットにCtrl + mとCtrl + qが使用されないのはなぜですか?

最近、私はbashショートカットを見直し、私のtmuxアクティベーションキーに適したショートカットを見つけようとしました。

私はbashショートカットには使用されないctrl + mのが面白いと思います。ctrl + qhttps://en.wikipedia.org/wiki/Bash_(Unix_shell)

なぜ使用されないのですか?ctrl + mとても便利だと思います。

これら2つの組み合わせを使用するように設計されていますかDIY (define it yourself)?それとも別の話がありますか?

答え1

Ctrl + Mは、ターミナル(RET)のEnterキーと同じ文字を送信します。プログラムはキーを区別できないため、キーを個別に構成することはできません。

Ctrl+Q が使用されました。XONデフォルトでは、Bashはこれを使用できませんが、tmuxは生の入力モードを使用するため、tmuxで使用できます。

GUIプログラムは修飾子Ctrlを使用し、ショートカットとしてCtrl + mを使用してmキーを押すとキーボードから読み取ることができますが、シェルまたはターミナルプログラムはCtrl +キーの組み合わせを0から26のASCII文字で受け取ります。

Ctrl+@ = 0
Ctrl+A = 1
Ctrl+B = 2

など。これを試して値を見ることができます

cat ctrlkeys <<EOF
^A^B^C^D^E^F
EOF
od -c ctrlkeys
0000000 001 002 003 004 005 006  \n

値を入力するには、Ctrl + [af]を押す前にCtrl + vを押して、その値が生の値として解釈されないようにします。

ascii(7) テーブルを見ると、テーブルの制御コードが表示され、左側には対応する文字 @..Z があります。例えば

015   13    0D    CR  '\r' (carriage ret)     115   77    4D    M

または

011   9     09    HT  '\t' (horizontal tab)   111   73    49    I

Bashより前の制御コードの解釈の次のステップはsttyです(ターミナル設定を変更して印刷します)。

stty -a
intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = <undef>; eol2 = <undef>; swtch = <undef>; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R; werase = ^W; lnext = ^V; flush = ^O;

lnextstartorとの意味についてはstty(1)を参照してくださいstop

readline(3) も参照してください。 bashや他のGNU cliプログラムはこのライブラリを使って入力行を制御し、もちろんbash(1)/ READLINE(bashのマニュアルページのreadlineセクション)を制御するからです。

注:XYZ(NUM)は、セクションNUMのマニュアルページXYZを意味するため、結果はですman NUM XYZ

関連情報