Terminal

是否有任何可以處理所有組合鍵的 linux 終端?

  • March 26, 2020

我喜歡在終端模式(-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-qC-h cEmacs 中按該組合鍵來查看終端發送的組合鍵。

使用某些終端仿真器,您可以為每個鍵配置轉義序列。在 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表示功能鍵(15to 24for F5to F12— 由於歷史原因,F1 到F4有不同的轉義序列)並number2表示修飾符(2for Shift, 3for Meta, 5for Ctrl, 7for Ctrl+ Meta, and add 1 for Shiftwith at least one of Ctrlor Meta)。

input-decode-mapEmacs 通過或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)])

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