WIP popup commander

This commit is contained in:
2023-01-01 16:49:15 +00:00
parent c3e9c14186
commit b1bdc326ef
3 changed files with 58 additions and 20 deletions
+24 -10
View File
@@ -86,33 +86,47 @@
(values f (compile-keymap v))
(values f v)))))
(fn ref [tbl keys]
(when tbl
(match keys
[k1 & more] (ref (. tbl k1) more)
[k1] (. tbl k1)
x tbl)))
(let [v (ref {:a 1} [:a])] (assert (= v 1) v))
(let [v (ref {:a {:c 7}} [:a :c])] (assert (= v 7) v))
(let [v (ref {:a {:c 7}} [:a ])] (assert (match v {:c 7} true) (view v)))
(let [v (ref {:a {:c 7}} [:z :d])] (assert (not v) v))
(fn recogniser [source-keymap]
(let [keymap (compile-keymap source-keymap)]
(var m keymap)
(var key-sequence [])
{
:accept-event
(fn [_ e]
(when (not (modifier? e.keyval))
(let [c (event->index e)]
(match (. m c)
(table.insert key-sequence c)
(match (ref keymap key-sequence)
(where v (keymap? v))
(do
(set m v)
(values nil (.. c " ")))
(values nil
(let [syms (lume.map key-sequence index->string)]
(table.concat syms " ")))
(where v (command? v))
(do
(set m keymap)
(set key-sequence [])
v)
(where nil (= c "103:4"))
(do
(set m keymap)
(set key-sequence [])
(values nil "cancelled"))
_
(do
(set m keymap)
(values nil (.. "No binding for " (index->string c) " ")))))))
(let [syms (lume.map key-sequence index->string)]
(set key-sequence [])
(values nil (.. "No binding for " (table.concat syms " "))))))))
}))