例如:
(defvar modes '(a-mode b-mode c-mode))
(use-package some-package
:hook (modes . some-package-mode))
之类,而不是
(use-package some-package
:hook ((a-mode b-mode c-mode) . some-package-mode))
但因为use-package
是个宏,似乎不行。有时候需要那堆modes
重用,复制一大串实在麻烦。。
我前几天正好碰到过差不多的问题,这样应该行:
(eval `(use-package some-package
:hook (,modes . some-package-mode)))
思路就是modes
这个位置无论写什么,都会原样传给use-packge来eval,那么就要在(use-package ...)
这个form eval之前修改modes
这个部分(eval它),然后想到backquote可以eval一个form里的一部分,于是有`(use-package ...)
这个backquoted list,这时候它还是data,那么再把它当code来eval
一下,大功告成 
1 个赞