eusr
1
背景:use-package 除了提供 :preface
、:init
、:config
外,还提供了 :bind
、:hook
、:config
。
:custom
是否可以与 :config
+ setq
混用?比如:在配置 SLIME 时,需要指定 LISP 程序的位置:
(setq inferior-lisp-program "/opt/sbcl/bin/sbcl")
如果写成:
(use-package slime
:ensure t
:custom (inferior-lisp-program "/opt/sbcl/bin/sbcl"))
是不行的,SLIME 启动的时候依旧无法找到 sbcl 的位置,这里必须写成:
(use-package slime
:ensure t
:config
(setq inferior-lisp-program "/opt/sbcl/bin/sbcl"))
:custom
只能修改用 defcustom
声明的变量
1 个赞
我的建议是直接用 setopt
,不用管 use-package
:
(setopt inferior-lisp-program "/opt/sbcl/bin/sbcl")
只在配置中使用这个代码设定 LISP 程序位置,然后另外加载 slime
1 个赞
eusr
4
我又重新看了一下,这个变量的前缀是 inferior-lisp
,对应 Emacs 内置的 Inferior Lisp mode(即注释里提到的 inf-lisp
),SLIME 和 SLY 都利用了这个 mode。
这个 mode 在 Emacs 本体程序的 lisp/progmodes/inf-lisp.el 中,这个文件里 inferior-lisp-program
是 defcustom
了的。
https://cvs.savannah.gnu.org/viewvc/emacs/emacs/lisp/progmodes/inf-lisp.el?revision=1.31.4.19&view=markup#l144
(defcustom inferior-lisp-program ; ......
这样写也可以…
不过由于这个变量内置了,我更习惯单独写出来,不必放在 slime 里面
1 个赞
错了,它们都早就不用 inf-lisp
了。
区別就是 :custom
用的 custom-theme-set-variables
设的变量只会在对应的 defcustom
执行后才生效,slime 不加載 inf-lisp
,只 defvar
了变量,就不会生效,setopt
则是檢查有没有对应的 custom-set property,没有就 fallback 到 set-default
4 个赞