在Emacs 23中为multi-term取消绑定Emacs键

4
我正在尝试为emacs 23设置multi-term,但是......
(setq term-unbind-key-list '("C-z" "C-x" "C-c" "C-h" "C-y"))

我看到的所有推荐解决按键绑定冲突的网站都不起作用——例如,我仍然无法在 man 页面中使用 C-z。是 Emacs 23 发生了什么变化?我该如何正确地解除绑定?

1个回答

4
变量term-unbind-key-list只会影响键位映射term-raw-map中的绑定。你可以通过查看函数multi-term-keystroke-setup的文档来了解这一点(不知道为什么变量本身没有提供这些信息...)

`term-char-mode'的按键设置。

默认情况下,term-char-mode的按键绑定会与用户的按键冲突。因此,此函数将在term-raw-map中取消某些键的绑定,并在term-raw-map中绑定某些按键。

所以......很可能C-z仍然被绑定到suspend-frame,因为这是Emacs默认情况下的行为。
如果要将C-z绑定到终端中通常的按键(suspend-job),可以执行以下操作:
(require 'multi-term)
(add-to-list 'term-bind-key-alist '("C-z" . term-stop-subjob))

这使绑定实现了你想要的功能(我猜测)。

谢谢Trey。这非常有帮助。您知道term-unbind-key-listterm-bind-key-alist列表是为“字符模式”、“行模式”还是两者都定义行为的吗?我问这个问题的原因是因为我喜欢在Emacs终端上在两个不同的键盘快捷方式集之间切换的能力。例如,在一个模式中,C-n将移动到缓冲区中的上一行,就像在常规Emacs中一样,而在另一个模式中,C-n将被发送到终端)。使用这些列表,multi-term是否可以实现这一点? - Amelio Vazquez-Reina

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