Update use! macro to work more like Emacs's use-package

This commit is contained in:
2022-12-30 21:18:28 -08:00
parent f3d4ab7797
commit 8ef3d14e1e
2 changed files with 161 additions and 125 deletions
+29 -8
View File
@@ -13,13 +13,13 @@
;; Better autocommands
(lambda hook! [hooks ?patterns callback]
(let [hook_table (if (= (type hooks) :table)
hooks
(let [hook_table (if (= (type hooks) :table)
hooks
[ hooks ])
pattern_table (if (not ?patterns)
[]
(= (type ?patterns) :table)
?patterns
?patterns
[ ?patterns ])]
(var group "config-hook")
(each [_ hook (ipairs hook_table)]
@@ -27,20 +27,41 @@
(each [_ pattern (ipairs pattern_table)]
(set group (.. group "-" pattern)))
`(vim.api.nvim_create_autocmd ,hook_table
{ :group
(vim.api.nvim_create_augroup ,group
{ :group
(vim.api.nvim_create_augroup ,group
{ :clear true })
:pattern ,pattern_table
:pattern ,pattern_table
:callback ,callback })))
;; Nicer macro for use
;; (lambda use! [repo ...]
;; (local output [ repo ])
;; (var last_key nil)
;; (each [_ val (ipairs [...])]
;; (if last_key
;; (do (tset output last_key val)
;; (set last_key nil))
;; (set last_key val)))
;; `(use ,output))
(lambda use! [repo ...]
(local output [ repo ])
(var last_key nil)
(var config_mode false)
(var has_config false)
(var config_entries (list `lambda []))
(each [_ val (ipairs [...])]
(if last_key
(if config_mode
(if (= (type val) :string)
(set config_mode false)
(table.insert config_entries val))
last_key
(do (tset output last_key val)
(set last_key nil))
(= val :config)
(do (set config_mode true)
(set has_config true))
(set last_key val)))
(if has_config
(tset output :config config_entries))
`(use ,output))
;; Can be passed to :config of `use!'
@@ -62,7 +83,7 @@
(lambda module-fn! [mod func]
`(. (require ,mod) ,func))
{: bind!
{: bind!
: hook!
: use!
: setup!