summaryrefslogtreecommitdiff
path: root/guides/emacs/use-package.org
diff options
context:
space:
mode:
authorKévin Le Gouguec <kevin.legouguec@gmail.com>2022-12-30 23:41:30 +0100
committerKévin Le Gouguec <kevin.legouguec@gmail.com>2022-12-30 23:41:30 +0100
commitbde4d532041c213835085a259cab0ee25bb8edfb (patch)
tree3b5c19817f9617c532f10cfa2db8b4759f6231c3 /guides/emacs/use-package.org
parentd0e7efb170b78a82e9752904831bbcc724882e32 (diff)
downloadmemory-leaks-bde4d532041c213835085a259cab0ee25bb8edfb.tar.xz
Add notes on use-package
Diffstat (limited to 'guides/emacs/use-package.org')
-rw-r--r--guides/emacs/use-package.org48
1 files changed, 48 insertions, 0 deletions
diff --git a/guides/emacs/use-package.org b/guides/emacs/use-package.org
new file mode 100644
index 0000000..f6cd027
--- /dev/null
+++ b/guides/emacs/use-package.org
@@ -0,0 +1,48 @@
+* Porting from ~custom-file~
+Some very dumb code to generate ~use-package~ declarations from Custom
+settings. Entry point is ~c->us/port~.
+#+begin_src elisp
+(require 'help-fns)
+(require 'radix-tree)
+
+(defun c->us/get-custom-options ()
+ (seq-map
+ (pcase-lambda (`(theme-value ,option user ,value))
+ (list option value))
+ (get 'user 'theme-settings)))
+
+(defun c->us/get-option-file (option)
+ ;; Load packages first, otherwise symbol-file can return "loaddefs".
+ (pcase-dolist
+ (`(_ . ,files)
+ (radix-tree-prefixes (help-definition-prefixes)
+ (symbol-name option)))
+ (dolist (f files)
+ (load f 'noerror 'nomessage)))
+ (when-let ((file (symbol-file option)))
+ (file-name-base file)))
+
+(defun c->us/write-declaration (lib pairs)
+ (insert (format "(use-package %s\n" lib))
+ (insert " :custom")
+ (message "%s -> %s" lib pairs)
+ (pcase-dolist
+ (`(,option ,value) pairs)
+ (insert (format "\n (%s %s)"
+ option
+ (prin1-to-string value))))
+ (insert ")\n\n"))
+
+(defun c->us/symbols< (symlist1 symlist2)
+ (string< (car symlist1) (car symlist2)))
+
+(defun c->us/port ()
+ (seq-map
+ (pcase-lambda (`(,lib . ,pairs))
+ (c->us/write-declaration lib pairs))
+ (sort (seq-group-by
+ (pcase-lambda (`(,option _))
+ (c->us/get-option-file option))
+ (sort (c->us/get-custom-options) 'c->us/symbols<))
+ 'c->us/symbols<)))
+#+end_src