(local { : view } (require :fennel)) (local { : Gdk } (require :lgi)) (local keymap (require :keymap)) (local Mod Gdk.ModifierType) (local km { "a" { "a" ["command-1"] "b" ["command-2" {:arg-1 "10" :arg-2 "11"}] } "b" { "z" ["command-3"] } "c" ["command-4"] }) (fn fake-key-event [c] {:keyval (string.byte c) :state {} }) (let [s (keymap._.keychord->spec "q")] (match s {:keyval 113 :modmask 0} true _ (assert false (view s)))) (let [s (keymap._.keychord->spec "C-a")] (match s {:keyval 97 :modmask 4} true _ (assert false (view s)))) (let [s (keymap._.keychord->spec "C-M-z")] (match s {:keyval 122 :modmask 12} true _ (assert false (view s)))) (let [r (keymap.recogniser km) (ok err) (match (r:accept-event (fake-key-event "c")) ["command-4"] true x (values false (view x)) nil (values false "???"))] (assert ok err)) (let [r (keymap.recogniser km) (ok err) (match-try (r:accept-event (fake-key-event "a")) nil (r:accept-event (fake-key-event "b")) ["command-2" {:arg-1 "10" :arg-2 "11"}] true (catch x (values false (view x))))] (assert ok err))