aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--autoload/window.kak19
-rwxr-xr-xscripts/term.clj32
2 files changed, 36 insertions, 15 deletions
diff --git a/autoload/window.kak b/autoload/window.kak
index ba5f676..e637d60 100644
--- a/autoload/window.kak
+++ b/autoload/window.kak
@@ -24,21 +24,10 @@ def toolsclient %{
}
def terminal-singleton -params 2.. -docstring 'terminal-singleton <name> <command> [args...]' %{
- eval %sh{
+ nop %sh{
name="$1"; shift 1;
-
- open-term-win() {
- printf "tmux-repl-impl new-window -n '$name' env"
- printf " 'KAKOUNE_SESSION=$kak_session' 'KAKOUNE_CLIENT=$kak_client'"
- for arg in "$@"; do
- printf ' "%s"' "$(sed 's|["]|\\"|g' <<< "$arg")"
- done
- }
-
- focus-term-win() {
- tmux select-window -t "$name" >/dev/null 2>&1
- }
-
- focus-term-win || open-term-win "$@"
+ export KAKOUNE_SESSION="$kak_session"
+ export KAKOUNE_CLIENT="$kak_client"
+ "$kak_config/scripts/term.clj" singleton "$name" "$@"
}
}
diff --git a/scripts/term.clj b/scripts/term.clj
new file mode 100755
index 0000000..acf7f8b
--- /dev/null
+++ b/scripts/term.clj
@@ -0,0 +1,32 @@
+#!/usr/bin/env bb
+
+(require '[clojure.java.shell :refer [sh]])
+
+(defn open-term-win [name cmd args]
+ (let [kak_session (System/getenv "KAKOUNE_SESSION")
+ kak_client (System/getenv "KAKOUNE_CLIENT")]
+ (->
+ (apply sh "tmux" "new-window" "-n" name
+ "env" (str "KAKOUNE_SESSION=" kak_session) (str "KAKOUNE_CLIENT=" kak_client)
+ cmd args)
+ :exit
+ (= 0))))
+
+(defn focus-term-win [name]
+ (-> (sh "tmux" "select-window" "-t" name) :exit (= 0)))
+
+(defn cmd-terminal-singleton [[name cmd & args]]
+ (if (or (focus-term-win name) (open-term-win name cmd args))
+ (println "ok")
+ (println "sorri")))
+
+(def commands
+ {"singleton" cmd-terminal-singleton})
+
+(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))))))
+