将<Control>绑定到Emacs 23中的另一个键


1

我正在使用GNU Emacs 23.2。我想将[Control]绑定到密钥 ö 在我的(德国)键盘上。这样我就可以轻松触发 C- 用右手在前缀命令中。不幸的是我不知道该怎么做。 Emacs中的 global-set-key 在这里没有帮助,因为紧迫 C- 不是命令。

更新: 我在Win32和GNU / Linux上。我想在emacs中只有这个绑定 - 用emacs自己的方式实现。


你用的是什么操作系统?如何在该级别执行键盘映射?
Not Sure

更通常的方法是将Caps Lock设置为Ctrl。使用X11键盘选项可以轻松完成 "XkbOptions" "ctrl:nocaps"。对于Windows,您必须导入 注册表项 。 Emacs不是唯一一个方便的Ctrl键有用的程序。
ceving

Answers:


3

怎么样? 控制锁 键?

完全等同于的一个障碍 控制 是它需要知道它何时被按下以及何时被释放。 Emacs键盘事件(与鼠标事件不同)不会被分成“向下”和“向上”部分,这使我们难以在那里检测到“释放”。例如,唯一的显着区别 C-x C-o C-x o 是第二个角色之前的'控制'事件。但是,如果您“放开”部分通过键序列,这只是一个问题

此处的方法允许您将任何键绑定为 控制锁 在Emacs里面。我还为一些关键序列提供了一些简单的解决方法 控制 关键部分通过。


下面的代码为您提供了一个'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)

要使用它,只需按(并释放) ö 。下一个键就像是一样 控制 被压了。如果您输入的密钥是前缀密钥(例如,您已按下 X 要得到 C-X ) 然后 控制 将保留下一个键,依此类推,直到您按下非前缀键。

如果你经常使用它,你可能还想在你的中添加绑定 .emacs 对于没有“放手”的常见命令 控制 部分通过。例如,这个:

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

将使所有命令开始 C-x 4 可以在 C-x C-4 也是这样打字 öx4 f 会跑 find-file-other-window

您可能还会发现添加映射很有帮助(例如,对于资本 Ö )只是提供一个独立的 C-X

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

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


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.