是否有任何可以處理所有組合鍵的 linux 終端?
我喜歡在終端模式(
-nw
)下使用 emacs,但似乎大多數(全部?)終端無法處理某些組合鍵 - 例如,C-<RET>
或C-M-%
我知道這是因為大多數終端都模擬 VT-100,它沒有這些組合。是否有任何 linux 終端(最好是 KDE)可以處理這些組合鍵,或者這是所有終端的基本限制嗎?
當您在終端中按下一個鍵或組合鍵時,它會作為一個或多個字元的序列傳輸到終端中執行的應用程序。例如,當您按下 時
a
,應用程序會收到a
。當您按下Enter
時,應用程序會接收到字元CR
(又名^M
(發音為“control-emm”),又名字元號 13,又名\r
或\015
)。涉及Alt
的鍵組合通常作為字元ESC
(^[
又名 aka\e
或\033
)傳輸,後跟不帶Alt
.\e[
功能鍵和其他組合鍵作為以或開頭的轉義序列傳輸\eO
。轉義序列沒有完全標準化,終端通常會忽略某些鍵的某些屬性。例如,預設情況下,
Ctrl
++通常與+Shift
完全一樣傳輸。letter``Ctrl``letter
Ctrl
您可以通過在 shell 提示符下按+V
後跟該組合鍵,或者C-q
在C-h c
Emacs 中按該組合鍵來查看終端發送的組合鍵。使用某些終端仿真器,您可以為每個鍵配置轉義序列。在 Xterm 上,這是通過X 資源完成的。大多數設置從 X 啟動時讀取資源
~/.Xresources
,您可以使用xrdb -merge ~/.Xresources
.Term.VT100.translations: #override \n\ Ctrl ~Shift ~Meta <key>Return: string("\033[73;5~") \n\ Ctrl Shift ~Meta <key>percent: string("\033[37;6~")
ESC [ number1 ; number2 ~
一個常見的約定是使用帶有修飾符的功能鍵形式的轉義序列。number1
表示功能鍵(15
to24
forF5
toF12
— 由於歷史原因,F1 到F4
有不同的轉義序列)並number2
表示修飾符(2
forShift
,3
forMeta
,5
forCtrl
,7
forCtrl
+Meta
, and add 1 forShift
with at least one ofCtrl
orMeta
)。
input-decode-map
Emacs 通過或local-function-key-map
(或function-key-map
在 Emacs 23 之前)將轉義序列轉換為其內部鍵表示。(define-key local-function-key-map "\033[73;5~" [(control return)]) (define-key local-function-key-map "\033[37;6~" [(control ?L)])