Yos*_*ian 11 terminal-emulator terminal konsole tty
我喜欢在终端模式 ( -nw
)下使用 emacs ,但似乎大多数(所有?)终端无法处理某些组合键 - 例如,C-<RET>
或C-M-%
. 我知道这是因为大多数终端模拟 VT-100,它没有这些组合。是否有任何 linux 终端(最好是 KDE)可以处理这些组合键,或者这是所有终端的基本限制?
Gil*_*il' 17
当您按下终端中的一个键或组合键时,它会作为一个或多个字符的序列传输到终端中运行的应用程序。例如,当您按下 时a,应用程序会收到a
。当您按下 时Enter,应用程序会收到字符CR
(又名^M
(发音为“control-emm”),又名字符号 13,又名\r
或\015
)。涉及的键组合Alt通常以字符ESC
(^[
又名\e
或\033
)的形式传输,后跟不带 的键或键组合的序列Alt。功能键和其他组合键作为以\e[
或开头的转义序列传输\eO
。
转义序列没有完全标准化,终端通常会忽略某些键的某些属性。例如,Ctrl+ Shift+letter经常发送酷似Ctrl+letter默认。
你可以看到通过按组合键终端发送的内容Ctrl+V其次是组合键,在shell提示下,或C-q
或C-h c
之后在Emacs的组合键。
使用某些终端模拟器,您可以为每个键配置转义序列。在 Xterm 上,这是通过X resources完成的。大多数设置从~/.Xresources
X 启动时读取资源,您可以使用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~")
Run Code Online (Sandbox Code Playgroud)
一个常见的约定是使用ESC [ number1 ; number2 ~
带有修饰符的功能键形式的转义序列。number1
表示功能键(15
to 24
for F5to F12— 由于历史原因,F1 到F4有不同的转义序列)并number2
表示修饰符(2
for Shift,3
for Meta,5
for Ctrl,7
for Ctrl+ Meta,并加 1 forShift与至少之一Ctrl或Meta)。
Emacs 通过input-decode-map
或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)])
Run Code Online (Sandbox Code Playgroud)