我试图附加一个密钥处理函数,以便首次执行一个包装函数,该函数检查库是否已被加载,如果没有,则在最终执行预期函数之前加载它。将变量暴露给从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