Function: treemacs-run-shell-command-for-current-node
treemacs-run-shell-command-for-current-node is an interactive and
byte-compiled function defined in treemacs-interface.el.
Signature
(treemacs-run-shell-command-for-current-node &optional ARG)
Documentation
Run a shell command on the current node.
Output will only be saved and displayed if prefix ARG is non-nil.
Will use the location of the current node as working directory. If the current node is not a file/dir, then the next-closest file node will be used. If all nodes are non-files, or if there is no node at point, $HOME will be set as the working directory.
Every instance of the string $path will be replaced with the (properly quoted)
absolute path of the node (if it is present).
Key Bindings
Source Code
;; Defined in ~/.emacs.d/elpa/treemacs-20251226.1307/treemacs-interface.el
(defun treemacs-run-shell-command-for-current-node (&optional arg)
"Run a shell command on the current node.
Output will only be saved and displayed if prefix ARG is non-nil.
Will use the location of the current node as working directory. If the current
node is not a file/dir, then the next-closest file node will be used. If all
nodes are non-files, or if there is no node at point, $HOME will be set as the
working directory.
Every instance of the string `$path' will be replaced with the (properly quoted)
absolute path of the node (if it is present)."
(interactive "P")
(let* ((cmd (read-shell-command "Command: "))
(name "*Treemacs Shell Command*")
(node (treemacs-node-at-point))
(buffer (progn (--when-let (get-buffer name)
(kill-buffer it))
(get-buffer-create name)))
(working-dir (-some-> node (treemacs-button-get :path))))
(cond
((null node)
(setf working-dir "~/"))
((or (null working-dir) (not (file-exists-p working-dir)))
(setf working-dir (treemacs--nearest-path node))
(when (or (null working-dir)
(not (file-exists-p working-dir)))
(setf working-dir "~/")))
(t
(setf working-dir (treemacs--parent working-dir))))
(when (and node (treemacs-is-node-file-or-dir? node))
(setf cmd (s-replace "$path" (shell-quote-argument (treemacs-button-get node :path)) cmd)))
(pfuture-callback `(,shell-file-name ,shell-command-switch ,cmd)
:name name
:buffer buffer
:directory working-dir
:on-success
(if arg
(progn
(pop-to-buffer pfuture-buffer)
(require 'ansi-color)
(autoload 'ansi-color-apply-on-region "ansi-color")
(ansi-color-apply-on-region (point-min) (point-max)))
(treemacs-log "Shell command completed successfully.")
(kill-buffer buffer))
:on-error
(progn
(treemacs-log-failure "Shell command failed with exit code %s and output:" (process-exit-status process))
(message "%s" (pfuture-callback-output))
(kill-buffer buffer)))))