Mengapa Ctrl + m dan Ctrl + q tidak digunakan dalam pintasan bash?

15

Baru-baru ini saya telah meninjau kunci pintasan bash, dan mencoba menemukan yang sesuai untuk kunci aktivasi tmux saya.

Saya menemukan itu menarik ctrl + mdan ctrl + qtidak digunakan dalam pintasan bash, menurut https://en.wikipedia.org/wiki/Bash_(Unix_shell) .

Mengapa tidak digunakan? Saya merasa ctrl + mcukup berguna.

Apakah kedua kombinasi ini dimaksudkan oleh desain untuk DIY (define it yourself)penggunaan? Atau ada cerita lain?

Zen
sumber
1
Menggunakan ALT + mimho bahkan lebih nyaman.
Rolf

Jawaban:

16

Ctrl + M mengirimkan karakter yang sama (RET) sebagai tombol Enter di terminal. Program tidak memiliki cara untuk membedakannya, sehingga tombol-tombol ini tidak dapat dikonfigurasi secara terpisah.

Ctrl + Q sudah digunakan untuk XON secara default, jadi itu tidak bisa digunakan oleh Bash, tetapi Anda masih bisa menggunakannya di tmux, karena tmux menggunakan mode input mentah.

Program GUI dapat membaca dari keyboard, bahwa Kunci m telah ditekan dengan pengubah Ctrl dan menggunakan Ctrl + m sebagai jalan pintas, tetapi shell atau program terminal apa pun menerima kombinasi Ctrl + Key seperti halnya karakter ascii dari 0 hingga 26

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

dan seterusnya. Anda dapat mencoba ini untuk melihat nilainya

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

Untuk memasukkan nilai, tekan Ctrl + v sebelum Ctrl + [af] untuk membuatnya tidak diinterpretasikan sebagai nilai mentah.

Ketika Anda melihat tabel ascii (7), Anda dapat melihat kode kontrol dalam tabel dengan karakter yang sesuai @ .. Z di sebelah kiri. Sebagai contoh

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

atau

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

Lapisan berikutnya yang menginterpretasikan kode kontrol sebelum bash adalah stty (ubah dan cetak pengaturan terminal)

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;

lihat stty (1) untuk arti dari lnextatau startdan stop.

Juga lihat readline (3) sebagai bash dan program cli GNU lainnya menggunakan perpustakaan itu untuk mengontrol jalur input dan tentu saja bash (1) / READLINE, bagian readline dari halaman manual bash.

Catatan: XYZ (NUM) berarti halaman manual XYZ dari bagian NUM, jadi hasilnya man NUM XYZ.

pengguna4098326
sumber
1
Bash memiliki pengikatan default untuk Cs (XOFF), jadi mereka bisa juga meletakkannya untuk Cq.
Gilles 'SANGAT berhenti menjadi jahat'
Sebenarnya, secara default, pustaka GNU Readline yang digunakan Bash mengikat C-qhal yang sama dengan C-v, klon dari fungsi Emacs quoted-insertyang berguna untuk mencari tahu kode escape yang dihasilkan oleh kunci dan kombo kunci. Inilah bagian yang relevan dari manual Readline: tiswww.case.edu/php/chet/readline/readline.html#SEC9
ssokolow