在 VT100/xterm 终端(Mac OS X 的终端)中向 Emacs 发送“C-(”?
Posted
技术标签:
【中文标题】在 VT100/xterm 终端(Mac OS X 的终端)中向 Emacs 发送“C-(”?【英文标题】:Send "C-(" to Emacs in VT100/xterm terminal (Mac OS X's Terminal)? 【发布时间】:2011-05-19 06:42:57 【问题描述】:是否可以通过 VT100/xterm 终端(Mac OS X 终端)以任何方式将密钥“C-(”发送到 Emacs?是否可以发送转义序列来实现等效?
我怀疑根本问题是不存在将控制与字符“(”(以及使用 shift 产生的其他此类字符)结合起来的概念。
注意:使用 Cocoa Emacs 不是一种选择。需要“C-(”的原因是 paredit.el 在其他组合键中使用它,最好不要重新映射它(因为将它放在“C-(”)上是有意义的。
【问题讨论】:
【参考方案1】: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 + 括号)——只能映射函数、箭头和其他一些键。 iTerm2 将允许您重新映射任意键以转义序列。 4 岁多,还在救人。好人@ak2 :)以上是关于在 VT100/xterm 终端(Mac OS X 的终端)中向 Emacs 发送“C-(”?的主要内容,如果未能解决你的问题,请参考以下文章