如何重新加载次模式的定义,以便在emacs中每次更改后加载它。这将大大改善开发次要模式的工作流程。
例如,在以下次要模式中,匿名函数中存在错误,使用键Cx Xe重新加载次模式的定义,然后在缓冲区中禁用和启用次模式不使用新定义。
(define-minor-mode bb-sample-mode
"Minor mode for sample projects"
:init-value nil
:lighter "bb-sample"
:keymap
'(([f1] . '(lambda()
(interactive)
(message "laksdjflskj")))))
答案 0 :(得分:1)
易:
(define-key bb-sample-mode-map [f1]
(lambda() (interactive) (message "foo")))
您甚至不必禁用/启用。这只会有效。
好的,有了这个肯定会起作用:
(defvar bb-sample-mode-map (make-sparse-keymap))
(define-minor-mode bb-sample-mode
"Minor mode for sample projects"
:init-value nil
:lighter "bb-sample"
:keymap bb-sample-mode-map)
答案 1 :(得分:1)
最好不要一般使用:keymap
参数,在这种情况下它确实可以帮到你:
(defvar bb-sample-mode-map
(let ((map (make-sparse-keymap)))
(define-key map [f1] (lambda () ...))
map))
(define-minor-mode bb-sample-mode
"Minor mode for sample projects."
:lighter "bb-sample")
然后C-M-x
将在第一个表达式中重新定义键映射(因为C-M-x
特别处理`defvar')。
您可能还想为命令命名:
(defun bb-sample-foo ()
(interactive)
(message "laksdjflskj"))
(defvar bb-sample-mode-map
(let ((map (make-sparse-keymap)))
(define-key map [f1] 'bb-sample-foo)
map))
所以你可以从函数中C-M-x
,它将立即生效。