leaf.el和use-package的区别优劣

想折腾折腾leaf了 看看有没有大佬用

折腾了几天,给我的感觉是 leaf 每个关键字都很清晰一致,就是可以预测到生成出来的代码是个啥顺序,啥效果。之前用 use-package 的时候感觉是黑魔法,不太清楚背后做了什么事情。

而且有个自动转换工具 GitHub - conao3/leaf-convert.el: Convert Elisp config sexp to leaf form 用这个甚至还帮我纠正了一些错误用法。

这是相关的讨论 What is difference between use-package and leaf? · Issue #257 · conao3/leaf.el · GitHub

讨论里给出的这个宏比较实用,可以展开给你看效果。

    (defmacro p (form)
      "Output expanded form of given FORM."
      `(progn
         (pp (macroexpand-1 ',form))
         nil))

可能变为内置包

关键词够多

commands

  • leaf-key-describe-bindings :: 展示绑定的键
  • leaf-expand :: 展开 leaf 宏

:mode-hook 关键词生成的函数可以用 find-function 直接转跳到相应 leaf block 的文件

发生错误时

(use-package use-package
  :config
  (a))

Debugger entered–Lisp error: (void-function a)

(leaf leaf 
  :config
  (a))

Warning (leaf): Error in `leaf’ block. Error msg: Symbol’s function definition is void: a Disable showing Disable logging

内置包的这个新闻在哪

https://lists.gnu.org/archive/html/emacs-devel/2020-10/msg00376.html

leaf已经不够抽象了,用它还不如用传统的办法…

(setq-default ...)
(with-eval-after-load ...)
(define-key ...)

自带straight.el的功能看起来不错, 但直接git submodule好像也差不多…

1 个赞

更加直观啊…

去年入坑git submodule,感觉挺好用的。一切尽在自己的掌控之中 :grinning:

是啊,这个好棒,有时候把自己的相关代码也用 leaf block 装起来,方便 leaf-find 和出错时定位

确实,宏展开以后代码言简意赅,比起 use-package 展开突然冒出一堆不明所以的代码来说,对初学者太友好了。就是不知道具体性能会影响多少(但这个还不是初学者可以考虑的事情 :sweat_smile: