在VT100/xterm终端(Mac OS X的终端)中向Emacs发送“C-(”?

10
有没有任何方式可以通过VT100/xterm终端(Mac OS X Terminal)向Emacs发送键盘按键“C-(”?是否存在一种可发送的转义序列以达到相同的效果?
我怀疑根本问题在于控制字符与括号(和其他使用Shift产生的字符)的组合概念不存在。
注意:不考虑使用Cocoa Emacs。需要“C-(”是因为paredit.el等插件使用它作为其中一个键盘组合键,最好不要重新映射它(因为将其映射到“C-(”上是有意义的)。
1个回答

16

由于VT100终端没有与(相对应的^(控制字符,因此无法执行此操作。但是,xterm具有所谓的“modifyOtherKeys”模式,允许发送类似于该组合键的唯一键码。

要启用它,请设置modifyOtherKeys资源,例如在~/.Xdefaults中:

XTerm*vt100.modifyOtherKeys: 1

因此,按下Ctrl+(将发送以下按键码:

^[[27;6;40~

不过那种方式有点繁琐,因此还引入了另一种键码的格式,可以通过设置 formatOtherKeys 属性来启用:

XTerm*vt100.formatOtherKeys: 1

因此,Ctrl+( 发送:

^[[40;6u
在这两个键码中,40是括号 ( 的十进制 ASCII 码,6代表 Ctrl 键。
请参考 man xterm http://invisible-island.net/xterm/ctlseqs/ctlseqs.html 获取更多信息。不清楚 Terminal.app 是否支持其中任何内容。

谢谢,这几乎是正确的。拼图的一部分是找到生成“C-(”的转义代码,你提供了它——我设法验证它在MacOS X的终端中也可以工作。现在,我注意到MacOS X的终端不幸地没有提供将任意键(在这种情况下是Ctrl +圆括号)映射到转义序列的功能,只能映射函数、箭头和其他一些键。 - Markus Miller
1
iTerm2 可以让你将任意键重新映射为转义序列。 - Daniel Szmulewicz
已经超过4年了,仍然在拯救人们的生命。好人@ak2 :) - zeusdeux

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接