簡體   English   中英

在 elisp 中通過 function arguments

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM