blob: 9ce8b26478e5db74b8ae9478bdd9f11c8146f167 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
|
(fn by-two [l]
(fn iter [t i]
(let [k (. l (- i 1))
v (. l i)]
(when (and (not= k nil) (not= v nil))
(values (+ i 2) [k v]))))
(values iter l 2))
(fn decode-opt-value [v]
(fn symbol-luatype [s]
(let [t (tostring s)]
(match t
:on true
:off false
_ t)))
(if (sym? v) (symbol-luatype v) v))
(fn opt-template [o]
(fn remove/append [target value mode]
`(let [target# (. vim :opt ,target)
value# ,value]
,(match mode
:append `(target#:append value#)
:remove `(target#:remove value#))))
(fn [v]
(match (string.sub o 1 1)
"-" (remove/append (string.sub o 2) v :remove)
"+" (remove/append (string.sub o 2) v :append)
_ `(tset (. vim :opt) ,o ,v))))
(fn settings [...]
`,(icollect [_ [o v] (by-two [...])]
((opt-template (tostring o)) (decode-opt-value v))))
(fn globals [...]
(local globa (icollect [_ [k v] (by-two [...])]
[(tostring k) v]))
`(let [l# ,globa]
(each [a# b# (ipairs l#)]
(tset (. vim :g) (. b# 1) (. b# 2)))))
{: settings : globals}
|