我使用的是 GNU Emacs 23.2。我想将 [Control] 绑定到ö我的(德语)键盘上的键。这样我就可以C-用右手舒适地触发前缀命令。不幸的是,我不知道该怎么做。Emacsglobal-set-key
在这里帮不上忙,因为按下C-不是一个命令。
更新:我使用的是 Win32 和 GNU/Linux。但我只想在 emacs 中进行此绑定 - 通过 emacs 自己的方法实现。
答案1
那钥匙呢Control lock?
完全等效于 的一个障碍Control是,它需要知道何时按下和何时释放。Emacs 键盘事件(与鼠标事件不同)不会分为“按下”和“弹起”部分,这使得我们很难在那里检测到“释放”。例如,和 之间唯一显着的区别C-x C-o是C-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