当前位置:  开发笔记 > 开发工具 > 正文

为什么这些prog模式键绑定在emacs-lisp-mode中不起作用?

如何解决《为什么这些prog模式键绑定在emacs-lisp-mode中不起作用?》经验,为你挑选了1个好方法。

我的Emacs设置中有几行:

;; swap defaults
(define-key prog-mode-map (kbd "RET") 'newline-and-indent)
(define-key prog-mode-map (kbd "C-j") 'newline)

这在我尝试的其他编程模式中可以正常工作.但在Emacs Lisp模式下,RET仍然受到约束newlineC-j仍然受到约束newline-and-indent.即使在将键绑定代码移动到我的Emacs初始化的最开始之后,我仍然观察到这种令人困惑的行为.如果我为Emacs Lisp的模式创建单独的键绑定语句,我没有任何问题.

;; swap defaults for most programming modes
(define-key prog-mode-map (kbd "RET") 'newline-and-indent)
(define-key prog-mode-map (kbd "C-j") 'newline)

;; swap defaults in Emacs Lisp mode too
(define-key emacs-lisp-mode-map (kbd "RET") 'newline-and-indent)
(define-key emacs-lisp-mode-map (kbd "C-j") 'newline)

为什么是这样?如果重要,我在OS X 10.8.3上使用Emacs 24.3.

PS我最近了解到electric-indent-mode,这可能会完成与这些键绑定非常相似的东西.然而,这个谜团仍然存在.



1> lunaryorn..:

看看emacs-lisp-mode-mapin 的定义lisp-modes.el:

(defvar emacs-lisp-mode-map
  (let ((map (make-sparse-keymap "Emacs-Lisp"))
        (menu-map (make-sparse-keymap "Emacs-Lisp"))
        (lint-map (make-sparse-keymap))
        (prof-map (make-sparse-keymap))
        (tracing-map (make-sparse-keymap)))
    (set-keymap-parent map lisp-mode-shared-map)
    …
    map))

关键是set-keymap-parent电话.虽然Emacs Lisp Mode继承自Prog Mode,但它的keymap不是继承自prog-mode-map,而是从以下定义的另一个keymap 继承lisp-modes.el:

(defvar lisp-mode-shared-map
  (let ((map (make-sparse-keymap)))
    (define-key map "\e\C-q" 'indent-sexp)
    (define-key map "\177" 'backward-delete-char-untabify)
    map)
  "Keymap for commands shared by all sorts of Lisp modes.")

这个键映射也不会继承prog-mode-map,因此绑定prog-mode-map确实对Emacs Lisp模式没有任何影响.

这可以说是Emacs中的一个错误.

更新: 我写信给邮件列表.

更新2: 相应的错误报告

更新3:该错误已得到修复.在当前快照构建中,您的键绑定应该按预期工作.作为早期版本的Emacs的解决方法,您可以在以下代码中使用以下代码段init.el:

(unless (keymap-parent lisp-mode-shared-map)
  (set-keymap-parent lisp-mode-shared-map prog-mode-map))

现在lisp-mode-shared-map将继承prog-mode-map,有效地复制错误修复.

推荐阅读
mylvfamily
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有