我試圖附加一個密鑰處理函數,以便首次執行一個包裝函數,該函數檢查庫是否已被加載,如果沒有,則在最終執行預期函數之前加載它。將變量暴露給從defun中返回的lambda
的想法是能夠做到:
(global-set-key (kbd "C-c r")
(run-or-load-f 'visual-regexp 'vr/replace))
其中run-or-load-f
是:
(defmacro run-or-load-f (mode func)
`(lambda()
(interactive)
(run-or-load mode func)))
我遇到的問題是,我不知道如何公開mode
和func
在以上的拉姆達。我甚至不確定我需要一個宏,但它似乎確實如此。
完成的緣故,上面的功能run-or-load
很乾脆:
(defun run-or-load (mode func)
(unless (fboundp mode)
(load-library (symbol-name mode)))
(call-interactively func))
優秀的答案。謝謝! – miguelg