From 39735be89129364258769f865538892d4fd157e5 Mon Sep 17 00:00:00 2001 From: Daniel Barlow Date: Sat, 31 Dec 2022 23:49:41 +0000 Subject: [PATCH] unnest conditionals in keymap recogniser --- keymap.fnl | 39 ++++++++++++++++++++++----------------- 1 file changed, 22 insertions(+), 17 deletions(-) diff --git a/keymap.fnl b/keymap.fnl index f0c8571..e394940 100644 --- a/keymap.fnl +++ b/keymap.fnl @@ -44,17 +44,20 @@ (bor m (. Gdk.ModifierType k)))] (spec->index {:keyval event.keyval : modmask}))) -(fn designates-command? [tbl] +(fn command? [tbl] ;; a keymap entry has a string as key, a command ;; definition is a numerically-indexed array (if (. tbl 1) true)) +(fn keymap? [tbl] + (not (. tbl 1))) + (fn compile-keymap [input] (collect [k v (pairs input)] (let [f (-> k keychord->spec spec->index)] - (if (designates-command? v) - (values f v) - (values f (compile-keymap v)))))) + (if (keymap? v) + (values f (compile-keymap v)) + (values f v))))) (fn recogniser [source-keymap] (let [keymap (compile-keymap source-keymap)] @@ -63,19 +66,21 @@ :accept-event (fn [_ e] (when (not (modifier? e.keyval)) - (let [c (event->index e) - v (. m c)] - (if v - (if (designates-command? v) - (do - (set m keymap) - v) - (do - (set m v) - (values nil (.. c " ")))) - (do - (set m keymap) - (values nil (.. "No binding for " (view e) " "))))))) + (let [c (event->index e)] + (match (. m c) + (where v (keymap? v)) + (do + (set m v) + (values nil (.. c " "))) + + (where v (command? v)) + (do + (set m keymap) + v) + _ + (do + (set m keymap) + (values nil (.. "No binding for " (view e) " "))))))) }))