aboutsummaryrefslogtreecommitdiff
path: root/scripts/utils.clj
diff options
context:
space:
mode:
authorAkshay Nair <phenax5@gmail.com>2026-06-23 23:53:19 +0530
committerAkshay Nair <phenax5@gmail.com>2026-06-23 23:53:47 +0530
commit4b6b717e88f9ee24d45d7cfdc66b01bf4a4951eb (patch)
treea84087800b7cbca4f299520fa4739be44e3ef2c2 /scripts/utils.clj
parent7502d1e84ae9956356e1578f65d11a8326ce3ec0 (diff)
downloadkakoune-config-4b6b717e88f9ee24d45d7cfdc66b01bf4a4951eb.tar.gz
kakoune-config-4b6b717e88f9ee24d45d7cfdc66b01bf4a4951eb.zip
Refactor utils.sh to clojure
Diffstat (limited to '')
-rwxr-xr-xscripts/utils.clj43
1 files changed, 43 insertions, 0 deletions
diff --git a/scripts/utils.clj b/scripts/utils.clj
new file mode 100755
index 0000000..ab1cf70
--- /dev/null
+++ b/scripts/utils.clj
@@ -0,0 +1,43 @@
+#!/usr/bin/env bb
+
+(require '[clojure.java.io :as io])
+
+(defn dirname [path] (.getParent (io/file path)))
+
+(defn dir-has-file? [dir filenames]
+ (some
+ (fn [file] (.exists (io/file (str dir "/" file))))
+ filenames))
+
+(defn find-closest [dir filenames]
+ (cond
+ (= dir "/") nil
+ (= dir ".") nil
+ (= dir "") nil
+ (dir-has-file? dir filenames) dir
+ :else (find-closest (dirname dir) filenames)))
+
+(defn normalize-dir-path [dir]
+ (.getAbsolutePath (io/file (if (empty? dir) "." dir))))
+
+(defn cmd-find-closest [[dir & filenames]]
+ (let [init-dir (normalize-dir-path dir)]
+ (when-let [found-dir (find-closest init-dir filenames)]
+ (println found-dir))))
+
+(defn cmd-find-closest-or-dir [[dir & filenames]]
+ (let [init-dir (normalize-dir-path dir)]
+ (if-let [found-dir (find-closest init-dir filenames)]
+ (println found-dir)
+ (println init-dir))))
+
+(def commands
+ {"find-closest" cmd-find-closest
+ "find-closest-or-dir" cmd-find-closest-or-dir})
+
+(let [[cmd & args] *command-line-args*]
+ (if-let [command-fn (commands cmd)]
+ (command-fn args)
+ (binding [*out* *err*]
+ (println (str "invalid command: " (or cmd "")))
+ (println (str "Valid commands: " (keys commands))))))