在emacs中的每次更改后重新加载次要模式

时间:2014-02-08 09:42:05

标签: emacs elisp

如何重新加载次模式的定义,以便在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")))))

2 个答案:

答案 0 :(得分:1)

易:

(define-key bb-sample-mode-map [f1]
  (lambda() (interactive) (message "foo")))

您甚至不必禁用/启用。这只会有效。

UPD

好的,有了这个肯定会起作用:

(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,它将立即生效。