查找 Ctrl-' 的 OS X 终端组合键/转义序列

查找 Ctrl-' 的 OS X 终端组合键/转义序列

我的 Emacs 键绑定之一是C-',它在 GUI 中运行良好。然而,在终端中,它没有被识别。我知道我需要找出发送到终端的实际字符并将C-'其映射到 emacs 配置中。

遵循以下建议在哪里可以找到用于在 bash 中重新映射快捷键的终端键代码列表?sed -n l返回给我的是一个空行,即使没有结尾$。终端根本无法识别该C-'序列吗?

答案1

终端传输字节,而不是密钥。像Ctrl+这样的键和弦'必须编码为字节序列。除了不带修饰符或仅带 的可打印字符外Shift,大多数键和弦都没有对应的字符,而是作为转义序列传输,以转义字符(字节值为 27 的字符,可以像\e在 Emacs 字符串中一样编写)开头。但是许多键和弦没有传统的标准转义序列,并且许多终端要么不传输这些键和弦,要么删除有关修饰符的信息(仅将Ctrl+作为字符传输)。''

某些终端允许您为每个键和弦配置转义序列。在终端应用程序中,您可以通过键盘首选项执行此操作

对于Ctrl+ ',选择\033[39;5~\033[27;5;39~:这是两个新兴标准,libtermkey 方案和 xterm 方案。看使用终端时的键绑定问题了解更多信息。

Emacs 通过以下方式将转义序列转换为其内部键表示:input-decode-map或者local-function-key-map(或function-key-mapEmacs 23 之前)。将其中一个放入您的初始化文件中:

(define-key input-decode-map "\033[39;5~" [(control ?\')])
(define-key input-decode-map "\033[27;5;39~" [(control ?\')])

答案2

我尝试使用showkey并注意到这c-'与单独使用相同',在阅读了提到的答案并尝试了之后,我测试了键盘上的几乎所有按键showkey,发现大多数按键^key在按下控制键时都会有输出,^C例如按下c-c,但只有几个键不受按下 的影响c-,例如不仅'不受影响,,而且.按下时的点c-甚至没有打印一个点,它什么也没做,所以我认为你的绑定不是在终端中工作,因为它就像按普通键一样'什么也不做!但我无法解释为什么它可以在X“也许”下工作,因为它可以识别它。

我鼓励您尝试使用您的密钥,showkey --ascii并希望这个答案对您有所帮助。

相关内容