字节编译次要模式键绑定时出现无效的键映射错误

Invalid Keymap error when byte compiling minor-mode key bindings

下面来自我的 .emacs 的代码可以正常工作,但是当我尝试对其进行字节编译时出现 "Invalid keymap my-keys-mode-map" 错误。

(eval-and-compile
  (defvar my-keys-mode-map (make-sparse-keymap) "my-keys-mode keymap.")

  (define-minor-mode my-keys-mode
    "A minor mode to override major modes keys."
    t " my-keys" 'my-keys-mode-map)

  (bind-key "C-;" (quote right-char) my-keys-mode-map)
  (bind-key "C-j" (quote left-char) my-keys-mode-map)
)

错误在绑定键行。我试过 define-key 而不是 bind-key,或者使用 make-keymap 而不是 make-sparse-map 但没有成功。我不太精通elisp。是否有其他方法来定义键映射以便字节编译器识别它?

删除 define-minor-mode 中键映射符号前面的引号。

也就是说,minor-mode的定义应该是这样的:

(define-minor-mode my-keys-mode
  "A minor mode to override major modes keys."
  t " my-keys" my-keys-mode-map)

您需要将 keymap,而不是 symbol(其值为 keymap)传递给 define-minor-mode