Archived
Some changes
This commit is contained in:
+40
-15
@@ -32,29 +32,54 @@
|
||||
{ :clear true })
|
||||
:pattern ,pattern_table
|
||||
:callback ,callback })))
|
||||
|
||||
;; Utility functions for use!
|
||||
(lambda create-list-entries [...]
|
||||
(let [output { :active-entry nil
|
||||
:entries {} }]
|
||||
(lambda output.process [self entry]
|
||||
(var result false)
|
||||
(when self.active-entry
|
||||
(if (and (. self :entries self.active-entry :is-first)
|
||||
(not (list? entry)))
|
||||
(do (tset self :entries self.active-entry :data entry)
|
||||
(set self.active-entry nil)
|
||||
(set result true))
|
||||
(= (type entry) :string)
|
||||
(set self.active-entry nil)
|
||||
(do (table.insert (. self :entries self.active-entry :data) entry)
|
||||
(tset self :entries self.active-entry :is-first false)
|
||||
(set result true))))
|
||||
(when (and (= (type entry) :string) (. self :entries entry))
|
||||
(assert-compile (not (. self :entries entry :present))
|
||||
(.. "':" entry "' cannot appear more than once in `use'"))
|
||||
(set self.active-entry entry)
|
||||
(tset self :entries entry :present true)
|
||||
(set result true))
|
||||
result)
|
||||
(lambda output.splice-into [self other]
|
||||
(each [name entry (pairs self.entries)]
|
||||
(when entry.present
|
||||
(tset other name entry.data))))
|
||||
(each [_ val (ipairs [...])]
|
||||
(tset output :entries val { :present false :is-first true :data `(lambda [])}))
|
||||
output))
|
||||
|
||||
;; Nicer macro for use
|
||||
;; :config acts like use-package's :init and :config options,
|
||||
;; taking in the following lisp expressions as its arguments
|
||||
(lambda use! [repo ...]
|
||||
(local output [ repo ])
|
||||
(var last_key nil)
|
||||
(var config_mode false)
|
||||
(var has_config false)
|
||||
(var config_entries (list `lambda []))
|
||||
(var list_entries (create-list-entries :config :setup
|
||||
:run))
|
||||
(each [_ val (ipairs [...])]
|
||||
(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))
|
||||
(if last_key
|
||||
(do (tset output last_key val)
|
||||
(set last_key nil))
|
||||
(not (list_entries:process val))
|
||||
(set last_key val)))
|
||||
(if has_config
|
||||
(tset output :config config_entries))
|
||||
(list_entries:splice-into output)
|
||||
`(use ,output))
|
||||
|
||||
;; Call a plugin's `setup function'
|
||||
|
||||
Reference in New Issue
Block a user