Terminal

在哪裡可以找到在 bash 中重新映射快捷方式的終端鍵程式碼列表?

  • June 2, 2021

例如:

"\e[1;5C"
"\e[Z"
"\e-1\C-i"

我只知道點點滴滴,比如\e代表 escape 和C-for Ctrl,但是這些數字 ( 1) 和字母 ( Z) 是什麼?;[標誌是什麼-

是否只有反複試驗,或者是否有完整的 bash 鍵程式碼列表及其語法解釋?

這些是您按下給定鍵時終端發送的字元序列。與 bash 或 readline 本身無關,但如果您想配置readline在給定按鍵時執行某些操作,您將想知道給定鍵或組合鍵發送的字元序列。

按鍵時A,一般終端會發送a(0x61)字元。如果按<Ctrl-I>or <Tab>,則通常發送的^I字元也稱為TABor \t(0x9)。大多數功能鍵和導航鍵通常發送以 (control-[) 開頭的字元序列^[,也稱為ESCor \e(0x1b, 033 octal),但確切的序列因終端而異。

找出一個鍵或組合鍵為您的終端發送什麼的最佳方法是執行sed -n l並鍵入它,然後Enter在鍵盤上鍵入。然後你會看到類似的東西:

$ sed -n l
^[[1;5A
\033[1;5A$

第一行是echo終端設備做的本地終端造成的(可能不可靠,終端設備設置會影響它)。

第二行由 輸出sed$不包括在內,它只是為了告訴你行尾在哪裡。

上面這意味著Ctrl-Up(我已經按下)發送 6 個字元ESC, [, 1, ;,5A(0x1b 0x5b 0x31 0x3b 0x35 0x41)

數據庫記錄多個終端的多個公共鍵的terminfo多個序列(基於$TERM值)。

例如:

TERM=rxvt tput kdch1 | sed -n l

會告訴您按鍵後發送的轉義序列是rxvt什麼Delete

您可以使用目前終端查找與給定序列對應的鍵infocmp(此處假設ncurses為 infocmp):

$ infocmp -L1 | grep -F '=\E[Z'
   back_tab=\E[Z,
   key_btab=\E[Z,

像這樣的鍵組合Ctrl-Up在數據庫中沒有對應的條目terminfo,因此要找出它們發送的內容,請閱讀相應終端的原始碼或文件,或者使用上述sed -n l方法進行嘗試。

引用自:https://unix.stackexchange.com/questions/76566