【发布时间】:2012-09-11 02:42:28
【问题描述】:
我最近升级到 Emacs24,我的一些自定义键绑定因此而损坏。
根据the fine manual,,可以使 Emacs 停止将功能键与其 ASCII 控制代码混为一谈(例如,可以将 C-m 和 RET 绑定到不同的东西,或者 C-i 和 @987654325 @, 等等)。这一直是我对 Emacs 的一大不满,即如此宝贵的“第一级”键盘快捷键被浪费在了我已经在键盘上有专用键的事情上。在我的情况下,我想将它们绑定到不同的东西,以通过模仿 gedit 来“现代化”键绑定。在 Emacs23 中,这运行得很好:
(global-set-key (kbd "C-i") 'goto-line)
(global-set-key (kbd "C-m") 'comment-or-uncomment-region)
(global-set-key (kbd "C-d") 'kill-whole-line)
;; Fix some stuff broken by the above
(global-set-key [delete] 'delete-char)
(global-set-key (kbd "TAB") 'indent-for-tab-command)
(global-set-key (kbd "RET") 'newline)
然后,我升级到 Emacs24,它坏了,有点。它仍然“有效”,因为C-m 肯定做一件事,RET 做另一件事,但问题是返回键在终端模式或迷你缓冲区中不再正常运行。在这两种情况下,返回键都没有激活我刚刚输入的命令,而是简单地将光标向下移动到下一行,我无法激活我输入到 minibuffer 或终端的命令。
具有讽刺意味的是,Emacs24 对删除的行为进行了很多更改,并且在此过程中他们将 C-d 与 DEL 解耦,因此实际上现在可以安全地将 C-d 绑定到某个东西而无需绑定 DEL回到预期的行为,所以如果我可以为我的返回键实现类似的“它只是工作”行为,而C-m 绑定到其他东西,那就太好了。
因此,我可以设想两种可能的解决方案来解决这个问题。可能看起来像这样:
(global-set-key (kbd "C-m") 'comment-or-uncomment-region)
(global-set-key (kbd "RET") 'do-what-i-expect-the-return-key-to-do-in-any-mode)
或者,这样的东西会更好:
(setq decouple-ascii-control-codes-from-function-keys t)
但我不知道有任何此类变量或函数可以在这种情况下帮助我。
我曾多次尝试使用模式挂钩来恢复终端和迷你缓冲区模式中的正确绑定,但我似乎无法正常工作。救命!
谢谢。
【问题讨论】:
标签: emacs key-bindings emacs23 emacs24