0

我制作了一个键盘映射并将其添加到次要模式:

(defvar my-keymap (make-sparse-keymap))
(progn
    (define-key my-keymap (kbd "C-c s") '(lambda() (interactive) (message "Hello World")))
)

(define-minor-mode my-keybindings-mode
    nil
    :global t
    :lighter " keys"
    :keymap my-keymap)

(add-to-list emulation-mode-map-alists '(my-keybindings-mode . my-keymap))

但是,每当我尝试emulation-mode-map-alists通过编写将其添加到:

(add-to-list emulation-mode-map-alists '(my-keybindings-mode . my-keymap))

我最终得到这个错误:

eval-region: Wrong type argument: symbolp, (evil-mode-map-alist)

4

1 回答 1

1

但是,每当我尝试通过编写将其添加到 emulation-mode-map-alists 时:

(add-to-list emulation-mode-map-alists '(my-keybindings-mode . my-keymap))

我最终得到这个错误:

Wrong type argument: symbolp, (evil-mode-map-alist)

这是因为第一个参数add-to-list应该是一个符号(引用),像这样:

(add-to-list 'emulation-mode-map-alists ...)

如果没有该引号,您将传递emulation-mode-map-alists变量的评估值。

请注意,它C-hf add-to-list告诉您它是一个function,并且特别注意当任何函数被调用时,它的所有参数都会被评估。这反过来告诉您,为了将符号作为参数传递,您需要引用它。

(宏和特殊形式更棘手——它们的参数不会自动评估,但他们可能会选择显式评估其中的一些,因此您始终需要注意文档以确保您应该传递它们。但是,在这方面,函数很好且一致。)

于 2021-05-11T05:35:57.700 回答