可以在use-package的:hook里使用变量吗?

例如:

(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一下,大功告成 :beers:

1 个赞