human
2021 年1 月 19 日 07:19
1
最近在翻新自己的配置,打算从use-package切换到leaf,但是leaf貌似还没有支持类似于use-pakcage-always-ensure的参数,所以我包装一个宏出来,但是本人elisp太菜了,所以来看看各位大佬有没有更优解。
菜鸡代码如下:
(defmacro leaf! (name &rest plist)
"This is wrapper around `leaf', The function is similar to use-package-always-ensure."
(declare (indent 1))
`(leaf ,name ,@(append `(:ensure t) plist)))
dcsjx
2021 年1 月 19 日 07:26
2
(setq leaf-defaults '(:package t))
human
2021 年1 月 19 日 07:48
3
谢谢,这个假如说存在内置包的话,需要设置:ensure nil吗?
human
2021 年1 月 20 日 01:31
5
我还是打算实现这个宏,我想干脆内置和melpa/elpa的包分开管。
我虽然想要use-package-always-ensure的功能,但我实在不想看到一堆的:ensure nil了
so,在了解elisp全局变量动态绑定可以用let临时修改之后,我参照leaf的宏又写了一个。
(defmacro leaf! (name &rest plist)
"This is wrapper around `leaf', The function is similar to use-package-always-ensure."
(declare (indent 1))
(if (package-built-in-p 'name)
`(leaf ,name ,@plist)
(let* ((leaf-defaults '(:package t))
(args* (leaf-sort-values-plist
(leaf-normalize-plist
(leaf-apply-keyword-alias
(leaf-append-defaults plist)) 'merge 'eval)))
leaf--autoload)
`(prog1 ',name
,@(leaf-process-keywords name args* args*)))))