当我使用 xterm 时,键盘序列 Ctrl+/ 会生成 Ctrl-_。这是showkey -a
先点击Ctrl+ Shift+ -,然后点击Ctrl+的结果/。我使用的是美国 ANSI 键盘。
[ ~ ] showkey -a
Press any keys - Ctrl-D will terminate this program
^_ 31 0037 0x1f
^_ 31 0037 0x1f
我想真正得到^/
(或者任何它看起来像的东西),因为我在 Emacs 中有一个与 C-/ 相关的自定义绑定,如果我启动 Emacs GUI,它工作得很好,但当我运行时根本不起作用,emacs -nw
因为它只接收 C -_(执行“撤消”操作)。
我不需要搞乱 xmodmap (实际密钥映射没问题)。我研究了 vt100 翻译,例如我已经有以下内容(来自文档这里等):
XTerm*VT100.translations: #override \n\
<Key> Prior: scroll-back(1, halfpage) \n\
<Key> Next: scroll-forw(1, halfpage)
但是我可以使用翻译来获取不同的密钥而不是运行命令吗?我尝试添加一行,仅Ctrl <Key> /:
使用 usinginsert()
来覆盖,但这不起作用。我尝试过使用string("0xffe4") string("0x2f")
, 这给了我斜线,但是尝试输入 Ctrl 却奇怪地失败了......我通过查看 得到了 Ctrl_R 的键符号xev
,但我不确定这是正确的使用方法。
我还查看了modifyOtherKeys
它的文档这里,但将其设置为 1 并没有帮助,将其设置为 2 几乎破坏了一切。
什么是拦截C-/并将其变成C-_,我可以克服它吗?
重要说明:我不是 root,也没有相关系统的任何超级用户权限。东西在这个问题看起来相关,但任何调用loadkeys
都会给我一个与权限有关的错误。
答案1
感谢 Stéphane Chazelas,我能够执行以下操作并解决问题 - 我将其放入Ctrl <Key> /: string("0x1b") string("/")
vt100.translations 资源中,如下所示:
XTerm*VT100.translations: #override \n\
<Key> Prior: scroll-back(1, halfpage) \n\
<Key> Next: scroll-forw(1, halfpage) \n\
Ctrl <Key> /: string("0x1b") string("/")
这使得Ctrl+/传输“ESC-/”(它使用转义,转义是 0x1b 或 27,我真的很想念)。然后我可以在 Emacs 中添加另一个绑定来处理这个问题,就像我当前的 C-/ 绑定一样。这样,我现在可以按键盘上的Ctrl+并使 Emacs 接收 M-/(Emacs 符号) 1,以便它在 GUI 和终端中的行为相同。/
1 Emacs 在 M-/ 上已经默认绑定到“dabbrev-expand”。因为我从来没有使用过它,所以我毫不犹豫地推翻它。