Files
logseq/src/main/frontend/handler/shell.cljs
2025-12-26 11:30:38 +08:00

43 lines
1.3 KiB
Clojure

(ns frontend.handler.shell
"Git related handler fns"
(:require [clojure.string :as string]
[electron.ipc :as ipc]
[frontend.handler.notification :as notification]
[frontend.util :as util]
[logseq.common.util :as common-util]))
(defn run-cli-command!
[command args]
(ipc/ipc :runCli {:command command
:args args
:returnResult true}))
(def commands-denylist
#{"rm" "mv" "rename" "dd" ">" "command" "sudo"})
(defn run-command!
[command]
(let [[command args]
(if (and (string? command) (string/includes? command " "))
(common-util/split-first " " command)
[command ""])
command (and command (string/lower-case command))
args (-> args str string/trim)]
(when-not (string/blank? command)
(cond
(contains? commands-denylist command)
(notification/show!
[:div (str command " is too dangerous!")]
:error)
:else
(run-cli-command! command args)))))
(defn run-cli-command-wrapper!
[command content]
(let [args (case command
"alda" (util/format "play -c \"%s\"" content)
;; TODO: plugin slot
content)]
(run-cli-command! command args)))