绑定Emacs 23 中的另一个键

绑定Emacs 23 中的另一个键

我使用的是 GNU Emacs 23.2。我想将 [Control] 绑定到ö我的(德语)键盘上的键。这样我就可以C-用右手舒适地触发前缀命令。不幸的是,我不知道该怎么做。Emacsglobal-set-key在这里帮不上忙,因为按下C-不是一个命令。

更新:我使用的是 Win32 和 GNU/Linux。但我只想在 emacs 中进行此绑定 - 通过 emacs 自己的方法实现。

答案1

那钥匙呢Control lock

完全等效于 的一个障碍Control是,它需要知道何时按下和何时释放。Emacs 键盘事件(与鼠标事件不同)不会分为“按下”和“弹起”部分,这使得我们很难在那里检测到“释放”。例如,和 之间唯一显着的区别C-x C-oC-x o第二个字符之前的“control-up”事件。但是,这只有在您“放开”整个按键序列时才会成为问题

这里的方法允许您像Control lock在 Emacs 中一样绑定任何键。我还提供了一些简单的按键序列解决方法,这些方法可以Control在按键过程中释放按键。


以下代码为您提供了“Control Lock”绑定,该绑定可按住修饰键一整个键序列。下面的示例将其绑定到ö,但您可以将其绑定到任何您喜欢的对象。

(defun read-control-sequence (prompt)
  (let (keys)
    (setq extra-keyboard-modifiers ?\C-a)
    (setq keys (read-key-sequence-vector (or prompt "[Control lock]")))
    (setq extra-keyboard-modifiers 0)
    keys))

(define-key key-translation-map [?ö] 'read-control-sequence)

要使用此功能,只需按下(然后释放)ö。下一个键将表现为control按下。如果您输入的键是前缀键(例如,您按下x来获取C-x),control则将保持按下状态以等待下一个键,依此类推,直到您按下非前缀键。

如果您经常使用此功能,您可能还想在您的.emacs常用命令中添加绑定,这些命令不会control在中途“放手”。例如,这个:

(global-set-key (kbd "C-x C-4")
                (lookup-key (current-global-map)
                            (kbd "C-x 4")))

将使所有以 开头的命令也C-x 4可用C-x C-4,以便输入ö x 4 f即可运行find-file-other-window

您可能还会发现添加映射(例如,添加到 capital Ö)以提供独立的功能很有帮助C-x

(define-key key-translation-map [?Ö] [(control ?x)])

上述所有代码都可以像往常一样通过将其添加到文件中并重新启动 Emacs 来安装,或者在每个顶级表达式后.emacs键入。您应该发现这种方法与 Emacs 的其余部分或多或少无缝集成。C-x C-e

答案2

不可能,control是一个修饰键,由操作系统/窗口管理器处理。

请参阅SO上的这个问题:在 Windows 上的 emacs 中将 Caps Lock 映射到 Control

相关内容