summary refs log tree commit diff
path: root/src/main.janet
diff options
context:
space:
mode:
Diffstat (limited to 'src/main.janet')
-rw-r--r--src/main.janet25
1 files changed, 25 insertions, 0 deletions
diff --git a/src/main.janet b/src/main.janet
new file mode 100644
index 0000000..8ca1215
--- /dev/null
+++ b/src/main.janet
@@ -0,0 +1,25 @@
+# Event loop
+# SPDX-FileCopyrightText: 2025 Nguyễn Gia Phong
+# SPDX-License-Identifier: GPL-3.0-or-later
+
+(defn handle
+  [event]
+  (match event
+    [:key-press key] (cond
+                       (:matches key (chr "c") {:ctrl true}) [:quit]
+                       (:matches key (chr "h") {}) (do (:go-up env) [])
+                       (:matches key (chr "j") {}) (do (:go-right env) [])
+                       (:matches key (chr "k") {}) (do (:go-left env) [])
+                       (:matches key (chr "l") {}) (do (:go-down env) [])
+                       [])))
+
+(defn run
+  [events]
+  (if-let [event (array/pop events)]
+    (unless (= :quit event)
+      (let [next-events (handle event)]
+        (:render env)
+        (run (array/join events next-events))))
+    (run @[(:next-event env)])))
+
+(run @[])