错误的参数类型: keymapp, emacs-lisp-mode-map。

4

我在我的init.el文件中有以下几行:

(dolist (map '(emacs-lisp-mode-map
           lisp-interaction-mode-map))
  (define-key map (kbd "C-c C-e") 'eval-and-replace))

当我使用eval函数时,出现了一个错误:
Wrong type argument: keymapp, emacs-lisp-mode-map

但如果我使用以下命令进行检查:

(keymapp emacs-lisp-mode-map)

结果是:

t

我不知道出了什么问题。我也尝试了另一个版本的mapcar:

(mapcar '(lambda (map)
       (define-key map (kbd "C-c C-e") 'eval-and-replace))
    '(emacs-lisp-mode-map
      lisp-interaction-mode-map))

但是结果是一样的。

1个回答

3

define-key函数需要一个实际的keymap作为它的第一个参数。你正在传递给它一个符号(变量),其值是一个keymap。你需要使用以下代码:

(dolist (map  (list emacs-lisp-mode-map lisp-interaction-mode-map))...)
list是一个普通的函数,因此它会对其参数进行求值。在这种情况下,这给了你一个包含两个键映射的列表,而不是两个键映射变量(符号)。在你使用的代码中,quote只返回列表 (emacs-lisp-mode-map lisp-interaction-mode-map)
你测试了 (keymapp emacs-lisp-mode-map)。但如果你测试 (keymapp 'emacs-lisp-mode-map),那么结果将会是nil:一个符号不是键映射。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接