summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTheodor Thornhill <theo@thornhill.no>2020-06-20 11:54:22 +0200
committerDmitry Gutov <dgutov@yandex.ru>2020-06-21 04:07:44 +0300
commitc1056b0387fb6fda345da51e4e2ee9736c25a358 (patch)
treeef1f614fd8743928c6dae37567bb5e38be7d2b9b
parentc59475ae1e34332501ea0f5758176a29b2797ba6 (diff)
downloademacs-c1056b0387fb6fda345da51e4e2ee9736c25a358.tar.gz
emacs-c1056b0387fb6fda345da51e4e2ee9736c25a358.tar.bz2
emacs-c1056b0387fb6fda345da51e4e2ee9736c25a358.zip
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.
-rw-r--r--lisp/progmodes/project.el22
1 files changed, 17 insertions, 5 deletions
diff --git a/lisp/progmodes/project.el b/lisp/progmodes/project.el
index d35bdf6ce0c..3a9e8bcee54 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" ())