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 个赞