Refactor +vterm/toggle and +vterm/here
This commit is contained in:
parent
fe9f8e785f
commit
582759e43b
1 changed files with 46 additions and 42 deletions
|
@ -6,41 +6,36 @@
|
|||
|
||||
If prefix ARG is non-nil, recreate vterm buffer in the current project's root."
|
||||
(interactive "P")
|
||||
(unless (fboundp 'module-load)
|
||||
(user-error "Your build of Emacs lacks dynamic modules support and cannot load vterm"))
|
||||
(let ((buffer-name
|
||||
(format "*doom:vterm-popup:%s*"
|
||||
(if (bound-and-true-p persp-mode)
|
||||
(safe-persp-name (get-current-persp))
|
||||
"main")))
|
||||
confirm-kill-processes
|
||||
current-prefix-arg)
|
||||
(when arg
|
||||
(let ((buffer (get-buffer buffer-name))
|
||||
(window (get-buffer-window buffer-name)))
|
||||
(when (buffer-live-p buffer)
|
||||
(kill-buffer buffer))
|
||||
(when (window-live-p window)
|
||||
(delete-window window))))
|
||||
(if-let (win (get-buffer-window buffer-name))
|
||||
(if (eq (selected-window) win)
|
||||
(delete-window win)
|
||||
(select-window win)
|
||||
(when (bound-and-true-p evil-local-mode)
|
||||
(evil-change-to-initial-state))
|
||||
(goto-char (point-max)))
|
||||
(setenv "PROOT" (or (doom-project-root) default-directory))
|
||||
(let* ((project-root (or (doom-project-root) default-directory))
|
||||
(default-directory
|
||||
(if arg
|
||||
default-directory
|
||||
project-root)))
|
||||
(let ((buffer (get-buffer-create buffer-name)))
|
||||
(with-current-buffer buffer
|
||||
(unless (eq major-mode 'vterm-mode)
|
||||
(vterm-mode))
|
||||
(+vterm--change-directory-if-remote))
|
||||
(pop-to-buffer buffer))))))
|
||||
(+vterm--configure-project-root-and-display
|
||||
arg
|
||||
(lambda()
|
||||
(let ((buffer-name
|
||||
(format "*doom:vterm-popup:%s*"
|
||||
(if (bound-and-true-p persp-mode)
|
||||
(safe-persp-name (get-current-persp))
|
||||
"main")))
|
||||
confirm-kill-processes
|
||||
current-prefix-arg)
|
||||
(when arg
|
||||
(let ((buffer (get-buffer buffer-name))
|
||||
(window (get-buffer-window buffer-name)))
|
||||
(when (buffer-live-p buffer)
|
||||
(kill-buffer buffer))
|
||||
(when (window-live-p window)
|
||||
(delete-window window))))
|
||||
(if-let (win (get-buffer-window buffer-name))
|
||||
(if (eq (selected-window) win)
|
||||
(delete-window win)
|
||||
(select-window win)
|
||||
(when (bound-and-true-p evil-local-mode)
|
||||
(evil-change-to-initial-state))
|
||||
(goto-char (point-max)))
|
||||
(let ((buffer (get-buffer-create buffer-name)))
|
||||
(with-current-buffer buffer
|
||||
(unless (eq major-mode 'vterm-mode)
|
||||
(vterm-mode))
|
||||
(+vterm--change-directory-if-remote))
|
||||
(pop-to-buffer buffer)))))))
|
||||
|
||||
;;;###autoload
|
||||
(defun +vterm/here (arg)
|
||||
|
@ -48,20 +43,29 @@ If prefix ARG is non-nil, recreate vterm buffer in the current project's root."
|
|||
|
||||
If prefix ARG is non-nil, cd into `default-directory' instead of project root."
|
||||
(interactive "P")
|
||||
(+vterm--configure-project-root-and-display
|
||||
arg
|
||||
(lambda()
|
||||
(require 'vterm)
|
||||
;; This hack forces vterm to redraw, fixing strange artefacting in the tty.
|
||||
(save-window-excursion
|
||||
(pop-to-buffer "*scratch*"))
|
||||
(let (display-buffer-alist)
|
||||
(vterm vterm-buffer-name)))))
|
||||
|
||||
(defun +vterm--configure-project-root-and-display (arg display-fn)
|
||||
"Sets the environment variable PROOT and displays a terminal using `display-fn`.
|
||||
|
||||
If prefix ARG is non-nil, cd into `default-directory' instead of project root."
|
||||
(unless (fboundp 'module-load)
|
||||
(user-error "Your build of Emacs lacks dynamic modules support and cannot load vterm"))
|
||||
(require 'vterm)
|
||||
;; This hack forces vterm to redraw, fixing strange artefacting in the tty.
|
||||
(save-window-excursion
|
||||
(pop-to-buffer "*scratch*"))
|
||||
(let* ((project-root (or (doom-project-root) default-directory))
|
||||
(default-directory
|
||||
(if arg
|
||||
default-directory
|
||||
project-root))
|
||||
display-buffer-alist)
|
||||
project-root)))
|
||||
(setenv "PROOT" project-root)
|
||||
(vterm vterm-buffer-name)
|
||||
(funcall display-fn)
|
||||
(+vterm--change-directory-if-remote)))
|
||||
|
||||
(defun +vterm--change-directory-if-remote ()
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue