From c87122e6b4c935572a3c99bcc47be8775bde92ea Mon Sep 17 00:00:00 2001 From: Henrik Lissner Date: Sat, 24 Mar 2018 23:19:14 -0400 Subject: [PATCH] tools/eshell: refactor; don't open another eshell from eshell --- modules/tools/eshell/autoload/eshell.el | 30 +++++++++++++------------ 1 file changed, 16 insertions(+), 14 deletions(-) diff --git a/modules/tools/eshell/autoload/eshell.el b/modules/tools/eshell/autoload/eshell.el index c37316df7..17b79f7ae 100644 --- a/modules/tools/eshell/autoload/eshell.el +++ b/modules/tools/eshell/autoload/eshell.el @@ -40,17 +40,12 @@ (format " [%s]" (substring branch 2)) ""))) -(defun +eshell-delete-window () - (if (one-window-p) - (unless (doom-real-buffer-p (progn (previous-buffer) (current-buffer))) - (switch-to-buffer (doom-fallback-buffer))) - (delete-window))) - -(defun +eshell-get-or-create-buffer () - (or (cl-loop for buf in (ring-elements +eshell-buffers) - if (and (buffer-live-p buf) - (not (get-buffer-window buf))) - return buf) +(defun +eshell--buffer (&optional new-p) + (or (unless new-p + (cl-loop for buf in (ring-elements +eshell-buffers) + if (and (buffer-live-p buf) + (not (get-buffer-window buf))) + return buf)) (generate-new-buffer +eshell-buffer-name))) ;;;###autoload @@ -69,7 +64,7 @@ (defun +eshell/open (&optional command) "Open eshell in the current buffer." (interactive) - (let ((buf (+eshell-get-or-create-buffer))) + (let ((buf (+eshell--buffer (eq major-mode 'eshell-mode)))) (with-current-buffer buf (unless (eq major-mode 'eshell-mode) (eshell-mode))) (switch-to-buffer buf) @@ -80,7 +75,7 @@ (defun +eshell/open-popup (&optional command) "Open eshell in a popup window." (interactive) - (let ((buf (+eshell-get-or-create-buffer))) + (let ((buf (+eshell--buffer))) (with-current-buffer buf (unless (eq major-mode 'eshell-mode) (eshell-mode))) (pop-to-buffer buf) @@ -120,12 +115,19 @@ module to be loaded." ;; Hooks ;; +;;;###autoload +(defun +eshell|delete-window () + (if (one-window-p) + (unless (doom-real-buffer-p (progn (previous-buffer) (current-buffer))) + (switch-to-buffer (doom-fallback-buffer))) + (delete-window))) + ;;;###autoload (defun +eshell|init () "Keep track of eshell buffers." (let ((buf (current-buffer))) (remove-hook 'kill-buffer-query-functions #'doom|protect-visible-buffers t) - (add-hook 'kill-buffer-hook #'+eshell-delete-window nil t) + (add-hook 'kill-buffer-hook #'+eshell|delete-window nil t) (dolist (buf (ring-elements +eshell-buffers)) (unless (buffer-live-p buf) (+eshell--remove-buffer buf)))