Tại sao không Ctrl + m và Ctrl + q được sử dụng trong các phím tắt bash?


15

Gần đây tôi đã xem xét các phím tắt bash và cố gắng tìm một phím thích hợp cho khóa kích hoạt tmux của mình.

Tôi thấy thú vị rằng ctrl + mctrl + qkhông được sử dụng trong các phím tắt bash, theo https://en.wikipedia.org/wiki/Bash_(Unix_shell) .

Tại sao chúng không được sử dụng? Tôi cảm thấy ctrl + mkhá tiện dụng.

Là hai kết hợp dự định thiết kế để DIY (define it yourself)sử dụng? Hay là có một câu chuyện khác?


1
Sử dụng ALT + mthậm chí còn thuận tiện hơn imho.
Rolf

Câu trả lời:


16

Ctrl + M gửi cùng ký tự (RET) làm phím Enter trong thiết bị đầu cuối. Các chương trình không có cách nào để phân biệt chúng, vì vậy các phím này không thể được cấu hình riêng.

Ctrl + Q đã được sử dụng cho XON theo mặc định, do đó Bash không thể được sử dụng, nhưng bạn vẫn có thể sử dụng nó trong tmux, vì tmux sử dụng chế độ nhập liệu thô.

Một chương trình GUI có thể đọc từ bàn phím, Phím m đã được nhấn bằng phím sửa đổi Ctrl và sử dụng Ctrl + m làm phím tắt, nhưng trình bao hoặc bất kỳ chương trình đầu cuối nào nhận được tổ hợp Ctrl + Phím giống như các ký tự ascii từ 0 đến 26

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

và như thế. Bạn có thể thử điều này để xem các giá trị

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

Để nhập các giá trị, nhấn Ctrl + v trước Ctrl + [af] để làm cho chúng không bị hiểu là giá trị thô.

Khi bạn nhìn vào bảng ascii (7), bạn có thể thấy các mã điều khiển trong một bảng có các ký tự tương ứng @ .. Z ở bên trái. Ví dụ

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

hoặc là

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

Lớp tiếp theo diễn giải mã kiểm soát trước khi bash là stty (thay đổi và in cài đặt đầu cuối)

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;

xem stty (1) để biết ý nghĩa của lnexthoặc startstop.

Đồng thời xem readline (3) là bash và các chương trình GNU cli khác sử dụng thư viện đó để kiểm soát các dòng đầu vào và tất nhiên là bash (1) / READLINE, phần readline của trang hướng dẫn bash.

Lưu ý: XYZ (NUM) có nghĩa là XYZ trang thủ công từ phần NUM, do đó, kết quả của man NUM XYZ.


1
Bash có một ràng buộc mặc định cho Cs (XOFF), vì vậy họ cũng có thể đặt một cho Cq.
Gilles 'SO- đừng trở nên xấu xa'

Trên thực tế, theo mặc định, thư viện GNU Readline mà Bash sử dụng liên kết C-qvới điều tương tự như C-v, một bản sao của hàm Emacs quoted-insertrất hữu ích để tìm ra mã thoát được tạo bởi các khóa và tổ hợp phím. Đây là phần có liên quan của hướng dẫn Readline: tiswww.case.edu/php/chet/readline/readline.html#SEC9
ssokolow
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.