emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

master c1056b0 1/2: Pop to an existing Eshell buffer by default


From: Dmitry Gutov
Subject: master c1056b0 1/2: Pop to an existing Eshell buffer by default
Date: Sat, 20 Jun 2020 21:20:02 -0400 (EDT)

branch: master
commit c1056b0387fb6fda345da51e4e2ee9736c25a358
Author: Theodor Thornhill <theo@thornhill.no>
Commit: Dmitry Gutov <dgutov@yandex.ru>

    Pop to an existing Eshell buffer by default
    
    * lisp/progmodes/project.el (project-shell): Improve docstring to
    include information about an implementation detail.
    
    * list/progmodes/project.el (project-eshell): Modelled after
    'project-shell', change default behavior such that we don't create too
    many eshell buffers by default.  Use universal argument to create
    subsequent buffers.
---
 lisp/progmodes/project.el | 22 +++++++++++++++++-----
 1 file changed, 17 insertions(+), 5 deletions(-)

diff --git a/lisp/progmodes/project.el b/lisp/progmodes/project.el
index d35bdf6..3a9e8bc 100644
--- a/lisp/progmodes/project.el
+++ b/lisp/progmodes/project.el
@@ -716,8 +716,9 @@ PREDICATE, HIST, and DEFAULT have the same meaning as in
 ;;;###autoload
 (defun project-shell ()
   "Start an inferior shell in the current project's root directory.
-With \\[universal-argument] prefix, create subsequent shell buffers
-with uniquified names."
+With \\[universal-argument] prefix, create subsequent shell
+buffers with uniquified names.  If several Shell buffers exists,
+this command jumps to the first created such buffer."
   (interactive)
   (let* ((default-directory (project-root (project-current t)))
          (default-project-shell-name
@@ -732,10 +733,21 @@ with uniquified names."
 
 ;;;###autoload
 (defun project-eshell ()
-  "Start Eshell in the current project's root directory."
+  "Start Eshell in the current project's root directory.
+With \\[universal-argument] prefix, create subsequent shell
+buffers with uniquified names.  If several Eshell buffers exists,
+this command jumps to the first created such buffer."
   (interactive)
-  (let ((default-directory (project-root (project-current t))))
-    (eshell t)))
+  (let* ((default-directory (project-root (project-current t)))
+         (eshell-buffer-name
+           (concat "*" (file-name-nondirectory
+                        (directory-file-name
+                         (file-name-directory default-directory)))
+                   "-eshell*"))
+         (eshell-buffer (get-buffer eshell-buffer-name)))
+    (if (and eshell-buffer (not current-prefix-arg))
+        (pop-to-buffer eshell-buffer)
+      (eshell t))))
 
 (declare-function fileloop-continue "fileloop" ())
 



reply via email to

[Prev in Thread] Current Thread [Next in Thread]