我通过 SSH 连接到无头 Ubuntu 服务器(无 X)并运行 Emacs。在我的 ~/.emacs 文件中,我使用“s”(Super)修饰符定义了一个键盘快捷键。当我在 GUI 中运行 Emacs 时,此快捷键有效,但通过 SSH 无效。我搜索了解释,但尚未找到。我假设 Super 键未通过 SSH 链接传递?
答案1
Emacs 的 GUI 版本可以使用 X11 协议监听任何按键。终端版本有更多限制 - 它只能接收终端程序转发的按键;修饰键只能用作修饰键,不能用作单独的键;最后,Super 键只是不是由任何模拟器转发,只是因为它通常被认为是保留给操作系统用于诸如窗口管理之类的事情。
答案2
如果你确实需要使用终端仿真器中不太标准的修饰键,emacs 有以下键绑定:
C-x @ S event-apply-shift-modifier
C-x @ a event-apply-alt-modifier
C-x @ c event-apply-control-modifier
C-x @ h event-apply-hyper-modifier
C-x @ m event-apply-meta-modifier
C-x @ s event-apply-super-modifier
因此,在您的情况下,请使用C-x @ s
超级修饰符。
答案3
终端仿真器将某些修饰键转换为序列,并将这些序列转发给终端程序。通常这些修饰键不包括Super
(Win键)。
不过,终端仿真Konsole
器会将此修饰符转换为序列^X@s
。因此,在 Emacs 中,您可以添加一个条目来local-function-key-map
将其映射到event-apply-super-modifier
。但是这样的条目已经存在,所以无需执行任何操作,只需使用Konsole
,您的s-
绑定就会起作用,即使通过 SSH 也是如此!
需要注意的是:像这样的绑定C-x s-o
将不起作用,因为 Emacs 会将其视为C-x C-x @ s o
。