[英]passing function arguments in elisp
我在我的 init.el 中定義了一個init.el
:
(defun bind-key (keymap)
(evil-define-key '(normal insert) keymap (kbd "C-=") 'some-function))
(bind-key 'c++-mode-map)
但是evil-define-key
不會將C-=
綁定到keymap
中的某些功能。
但是,直接調用evil-define-key
是可以的:
(evil-define-key '(normal insert) c++-mode-map (kbd "C-=") 'some-function)
我努力了:
(bind-key 'c++-mode-map)
(bind-key c++-mode-map)
兩者都不起作用。
我搜索了將鍵盤映射傳遞給 function,但沒有找到解決方案。 然后,我注意到evil-define-key
是一個宏。 但在這種情況下我找不到解決方案。
我怎樣才能讓bind-key
工作? 通過將鍵盤映射傳遞給它,function 將C-=
綁定到鍵盤映射中的某個函數?
正如您所注意到的,這比看起來更棘手,因為evil-define-key
是一個宏( 在此處定義)。 它采用一個命名鍵映射變量的符號,並在定義該變量后綁定鍵。 但是,在這種情況下,它獲取的是符號鍵keymap
而不是c++-mode-map
,因為宏調用將調用中的文字值作為 arguments 接收。
您可以通過將自己的 function 更改為宏來解決此問題。 這意味着它不僅需要運行一些代碼,還需要返回一些然后被評估的代碼。 像這樣:
(defmacro bind-key (keymap)
`(evil-define-key '(normal insert) ,keymap (kbd "C-=") 'some-function))
反引號引入了一種逐字返回的形式,除了其中的值以逗號開頭。
使用(bind-key c++-mode-map)
調用它,它應該等同於您對evil-define-key
的顯式調用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.