2022-12-22 22:42:45 +00:00
|
|
|
(local { : view } (require :fennel))
|
2022-12-23 14:43:29 +00:00
|
|
|
(local { : Gdk } (require :lgi))
|
2022-12-22 22:42:45 +00:00
|
|
|
|
|
|
|
(local keymap (require :keymap))
|
|
|
|
|
2022-12-23 14:43:29 +00:00
|
|
|
|
|
|
|
(local Mod Gdk.ModifierType)
|
|
|
|
|
2022-12-26 16:53:41 +00:00
|
|
|
(local km {
|
|
|
|
"a" {
|
|
|
|
"a" ["command-1"]
|
|
|
|
"b" ["command-2" {:arg-1 "10" :arg-2 "11"}]
|
|
|
|
}
|
|
|
|
"b" {
|
|
|
|
"z" ["command-3"]
|
|
|
|
}
|
|
|
|
"c" ["command-4"]
|
2022-12-22 22:42:45 +00:00
|
|
|
})
|
|
|
|
|
2022-12-23 14:43:29 +00:00
|
|
|
(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))))
|
|
|
|
|
2023-01-01 22:22:40 +00:00
|
|
|
(let [s (keymap._.keychord->spec "C-M-z")]
|
2022-12-23 14:43:29 +00:00
|
|
|
(match s
|
2023-01-01 22:22:40 +00:00
|
|
|
{:keyval 122 :modmask 12} true
|
2022-12-23 14:43:29 +00:00
|
|
|
_ (assert false (view s))))
|
|
|
|
|
|
|
|
|
2022-12-22 22:42:45 +00:00
|
|
|
(let [r (keymap.recogniser km)
|
|
|
|
(ok err)
|
2022-12-23 14:43:29 +00:00
|
|
|
(match (r:accept-event (fake-key-event "c"))
|
2022-12-26 16:53:41 +00:00
|
|
|
["command-4"] true
|
2022-12-23 14:43:29 +00:00
|
|
|
x (values false (view x))
|
|
|
|
nil (values false "???"))]
|
2022-12-26 16:53:41 +00:00
|
|
|
(assert ok err))
|
2022-12-22 22:42:45 +00:00
|
|
|
|
2022-12-26 16:53:41 +00:00
|
|
|
(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))))]
|
2022-12-22 22:42:45 +00:00
|
|
|
(assert ok err))
|