diff options
| -rw-r--r-- | autoload/window.kak | 2 | ||||
| -rwxr-xr-x | scripts/term.clj | 36 |
2 files changed, 23 insertions, 15 deletions
diff --git a/autoload/window.kak b/autoload/window.kak index e637d60..4ea44d3 100644 --- a/autoload/window.kak +++ b/autoload/window.kak @@ -28,6 +28,6 @@ def terminal-singleton -params 2.. -docstring 'terminal-singleton <name> <comman name="$1"; shift 1; export KAKOUNE_SESSION="$kak_session" export KAKOUNE_CLIENT="$kak_client" - "$kak_config/scripts/term.clj" singleton "$name" "$@" + setsid -f "$kak_config/scripts/term.clj" singleton "$name" "$@" </dev/null >/dev/null 2>&1 & } } diff --git a/scripts/term.clj b/scripts/term.clj index acf7f8b..169d34e 100755 --- a/scripts/term.clj +++ b/scripts/term.clj @@ -1,24 +1,32 @@ #!/usr/bin/env bb (require '[clojure.java.shell :refer [sh]]) +(require '[babashka.process :as process]) -(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 tmux-open-term [name cmd args] + (-> (apply sh "tmux" "new-window" "-n" name + "-e" (str "KAKOUNE_SESSION=" (System/getenv "KAKOUNE_SESSION")) + "-e" (str "KAKOUNE_CLIENT=" (System/getenv "KAKOUNE_CLIENT")) + cmd args) + :exit (= 0))) -(defn focus-term-win [name] - (-> (sh "tmux" "select-window" "-t" name) :exit (= 0))) +(defn tmux-focus-term [name] + (-> (sh "tmux" "select-window" "-t" name) + :exit (= 0))) + +(defn x11-class [name] (str "kak-term-" name)) + +(defn x11-open-term [name cmd args] + (apply process/shell "setsid" "-f" "st" "-c" (x11-class name) "-t" name "-e" cmd args)) + +(defn x11-focus-term [name] + (-> (sh "xdotool" "search" "--class" (x11-class name) "windowactivate") + :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"))) + (if (empty? (System/getenv "TMUX")) + (or (x11-focus-term name) (x11-open-term name cmd args)) + (or (tmux-focus-term name) (tmux-open-term name cmd args)))) (def commands {"singleton" cmd-terminal-singleton}) |
