diff options
| -rw-r--r-- | autoload/window.kak | 19 | ||||
| -rwxr-xr-x | scripts/term.clj | 32 |
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)))))) + |
