diff --git a/modules/term/eshell/autoload/eshell.el b/modules/term/eshell/autoload/eshell.el index cc0f34641..6f5198002 100644 --- a/modules/term/eshell/autoload/eshell.el +++ b/modules/term/eshell/autoload/eshell.el @@ -84,7 +84,12 @@ Changes the PWD to the PWD of the buffer this command is executed from a new project (or if prefix ARG was present)." (interactive "P") - (let ((eshell-buffer (get-buffer-create "*doom:eshell-popup*")) + (let ((eshell-buffer + (get-buffer-create + (format "*doom:eshell-popup:%s*" + (if (bound-and-true-p persp-mode) + (safe-persp-name (get-current-persp)) + "main")))) (target-project (or (doom-project-root) default-directory)) confirm-kill-processes current-prefix-arg) @@ -105,6 +110,7 @@ project (or if prefix ARG was present)." (evil-change-to-initial-state)) (goto-char (point-max))) (with-current-buffer (pop-to-buffer eshell-buffer) + (doom|mark-buffer-as-real) (if (eq major-mode 'eshell-mode) (run-hooks 'eshell-mode-hook) (eshell-mode)) diff --git a/modules/term/term/autoload.el b/modules/term/term/autoload.el index c898e6c73..1dc1c0589 100644 --- a/modules/term/term/autoload.el +++ b/modules/term/term/autoload.el @@ -1,14 +1,11 @@ ;;; term/term/autoload.el -*- lexical-binding: t; -*- -(defvar +term--dedicated-buffer nil) -(defvar +term--dedicated-window nil) - -(defun +term--kill-dedicated () - (when (multi-term-window-exist-p +term--dedicated-window) - (delete-window +term--dedicated-window)) - (when (multi-term-buffer-exist-p +term--dedicated-buffer) - (set-process-query-on-exit-flag (get-buffer-process +term--dedicated-buffer) nil) - (kill-buffer +term--dedicated-buffer))) +(defun +term--kill-dedicated (window buffer) + (when (window-live-p window) + (delete-window window)) + (when (buffer-live-p buffer) + (set-process-query-on-exit-flag (get-buffer-process buffer) nil) + (kill-buffer buffer))) ;;;###autoload (defun +term/toggle (arg) @@ -20,27 +17,35 @@ If prefix ARG, recreate term buffer in the current project's root." (interactive "P") (require 'multi-term) (let ((default-directory (or (doom-project-root) default-directory)) - (multi-term-dedicated-buffer-name "doom:term-popup") - (multi-term-dedicated-select-after-open-p t)) - (when arg - (+term--kill-dedicated)) - (if (and (multi-term-window-exist-p +term--dedicated-window) - (multi-term-buffer-exist-p +term--dedicated-buffer)) - (if (eq (selected-window) +term--dedicated-window) - (+term--kill-dedicated) - (select-window +term--dedicated-window) - (when (bound-and-true-p evil-local-mode) - (evil-change-to-initial-state)) - (goto-char (point-max))) - (let ((buffer (multi-term-get-buffer nil t))) + (multi-term-dedicated-select-after-open-p t) + (multi-term-dedicated-buffer-name + (format "doom:term-popup:%s" + (if (bound-and-true-p persp-mode) + (safe-persp-name (get-current-persp)) + "main")))) + (let* ((buffer (multi-term-get-buffer nil t)) + (window (get-buffer-window buffer))) + (when arg + (+term--kill-dedicated window buffer) + (setq buffer (multi-term-get-buffer nil t))) ; recreates buffer + (if (and (window-live-p window) + (buffer-live-p buffer)) + (if (eq (selected-window) window) + (delete-window window) + (select-window window) + (when (bound-and-true-p evil-local-mode) + (evil-change-to-initial-state)) + (goto-char (point-max))) (with-current-buffer buffer - (multi-term-internal) - (setq +term--dedicated-buffer buffer)) - (when-let (window - (display-buffer-in-side-window - buffer `((window-height . ,multi-term-dedicated-window-height)))) - (setq +term--dedicated-window window) - (select-window window)))))) + (with-silent-modifications + (erase-buffer)) + (doom|mark-buffer-as-real) + (multi-term-internal)) + (unless (window-live-p window) + (when-let (window + (display-buffer-in-side-window + buffer `((window-height . ,multi-term-dedicated-window-height)))) + (select-window window))))))) ;;;###autoload (defun +term/here (arg) diff --git a/modules/term/vterm/autoload.el b/modules/term/vterm/autoload.el index 7b380149c..bb3b8e645 100644 --- a/modules/term/vterm/autoload.el +++ b/modules/term/vterm/autoload.el @@ -8,7 +8,10 @@ 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 "*doom:vterm-popup*") + (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 @@ -29,6 +32,7 @@ If prefix ARG is non-nil, recreate vterm buffer in the current project's root." (let* ((default-directory (or (doom-project-root) default-directory)) (buffer (get-buffer-create buffer-name))) (with-current-buffer buffer + (doom|mark-buffer-as-real) (vterm-mode)) (pop-to-buffer buffer)))))