我最近升级到 Emacs24,我的一些自定义键绑定因此而损坏。
根据精美的手册,可以使 Emacs 停止将功能键与其 ASCII 控制代码混为一谈(例如,可以拥有C-m
并RET
绑定到不同的东西,或C-i
和TAB
,等等)。这一直是我对 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 中不再正常运行。在这两种情况下,返回键都没有激活我刚刚输入的命令,而是简单地将光标向下移动到下一行,我无法激活我输入到 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)
但我不知道有任何此类变量或函数可以在这种情况下帮助我。
我曾多次尝试使用模式挂钩来恢复终端和迷你缓冲区模式下的正确绑定,但我似乎无法得到任何工作。帮助!
谢谢。