Emacs 在elisp中传递函数参数

Emacs 在elisp中传递函数参数,emacs,key-bindings,Emacs,Key Bindings,我在init.el中定义了一个函数: 但是邪恶的define key并没有将C-=绑定到keymap中的某个函数 但是,直接调用定义键是可以的: (evil-define-key '(normal insert) c++-mode-map (kbd "C-=") 'some-function) 我试过: (bind-key 'c++-mode-map) 两者都不起作用 我在谷歌上搜索过向函数传递键映射,但没有找到解决方案。然后,我注意到邪恶的定义键是一个宏。但在这种情况下,我找不到解决办法

我在init.el中定义了一个函数:

但是邪恶的define key并没有将C-=绑定到keymap中的某个函数

但是,直接调用定义键是可以的:

(evil-define-key '(normal insert) c++-mode-map (kbd "C-=") 'some-function)
我试过:

(bind-key 'c++-mode-map)
两者都不起作用

我在谷歌上搜索过向函数传递键映射,但没有找到解决方案。然后,我注意到邪恶的定义键是一个宏。但在这种情况下,我找不到解决办法


我怎样才能拿到工作的钥匙?通过向其传递一个键映射,函数将C-=绑定到键映射中的某个函数?

正如您所注意到的,这比看起来更复杂,因为邪恶的定义键是一个宏定义的。它使用一个符号命名keymap变量,并在定义该变量后绑定该键。但是,在本例中,它获取的是符号键映射,而不是c++模式映射,因为宏调用接收调用中的文本值作为参数

您可以通过将自己的函数更改为宏来解决此问题。这意味着,它不只是运行一些代码,而是需要返回一些代码,然后进行计算。像这样:

(defmacro bind-key (keymap)
  `(evil-define-key '(normal insert) ,keymap (kbd "C-=") 'some-function))
backquote引入了一个逐字返回的表单,其中的值前面有逗号


使用绑定键c++模式映射调用它,它应该相当于显式调用邪恶的定义键。

谢谢,将绑定键定义为宏解决了问题。
(bind-key c++-mode-map)
(defmacro bind-key (keymap)
  `(evil-define-key '(normal insert) ,keymap (kbd "C-=") 'some-function))