Đó là các chuỗi ký tự được gửi bởi thiết bị đầu cuối của bạn khi bạn nhấn một phím nhất định. Không có gì để làm với bash hoặc readline mỗi se, nhưng bạn sẽ muốn biết chuỗi ký tự mà một tổ hợp phím hoặc khóa đã gửi sẽ gửi nếu bạn muốn định cấu hình readline
để làm gì đó khi nhấn phím đã cho.
Khi bạn nhấn Aphím, thông thường các thiết bị đầu cuối sẽ gửi a
ký tự (0x61). Nếu bạn nhấn <Ctrl-I>
hoặc <Tab>
, sau đó thường gửi ^I
ký tự còn được gọi là TAB
hoặc \t
(0x9). Hầu hết các phím chức năng và điều hướng thường gửi một chuỗi các ký tự bắt đầu bằng ^[
(control- [), còn được gọi là ESC
hoặc \e
(0x1b, 033 bát phân), nhưng chuỗi chính xác thay đổi từ thiết bị đầu cuối sang thiết bị đầu cuối.
Cách tốt nhất để tìm hiểu những gì một tổ hợp phím hoặc khóa gửi cho thiết bị đầu cuối của bạn, được chạy sed -n l
và nhập nó theo sau Entertrên bàn phím. Sau đó, bạn sẽ thấy một cái gì đó như:
$ sed -n l
^[[1;5A
\033[1;5A$
Dòng đầu tiên được gây ra bởi thiết bị đầu cuối cục bộ echo
được thực hiện bởi thiết bị đầu cuối (nó có thể không đáng tin cậy vì cài đặt thiết bị đầu cuối sẽ ảnh hưởng đến nó).
Dòng thứ hai là đầu ra của sed
. Điều $
này không được bao gồm, nó chỉ cho bạn biết nơi kết thúc của dòng.
Trên phương tiện rằng Ctrl-Up(mà tôi đã ép) gửi 6 ký tự ESC
, [
, 1
, ;
, 5
và A
(0x1B 0x5b 0x31 0x3b 0x35 0x41)
Cơ terminfo
sở dữ liệu ghi lại một số chuỗi cho một số khóa chung cho một số thiết bị đầu cuối (dựa trên $TERM
giá trị).
Ví dụ:
TERM=rxvt tput kdch1 | sed -n l
Sẽ cho bạn biết chuỗi thoát nào được gửi bằng rxvt
cách nhấn Deletephím.
Bạn có thể tra cứu khóa nào tương ứng với một chuỗi đã cho với thiết bị đầu cuối hiện tại của bạn với infocmp
(ở đây giả sử ncurses
infocmp):
$ infocmp -L1 | grep -F '=\E[Z'
back_tab=\E[Z,
key_btab=\E[Z,
Các kết hợp chính như Ctrl-Upkhông có các mục tương ứng trong terminfo
cơ sở dữ liệu, vì vậy để tìm hiểu những gì chúng gửi, hãy đọc nguồn hoặc tài liệu cho thiết bị đầu cuối tương ứng hoặc thử với sed -n l
phương pháp được mô tả ở trên.
bind -p
.