diff --git a/lisp/progmodes/project.el b/lisp/progmodes/project.el index f3df44fa7b..50e3dc3c8a 100644 --- a/lisp/progmodes/project.el +++ b/lisp/progmodes/project.el @@ -686,11 +686,21 @@ project-vc-dir ;;;###autoload (defun project-shell () - "Open Shell in the current project." + "Open Shell in the current project. +With \\[universal-argument] prefix, create subsequent shell buffers +with uniquified names." (interactive) - (let ((default-directory (project-root (project-current t)))) - ;; Use ‘create-file-buffer’ to uniquify shell buffer names. - (shell (create-file-buffer "*shell*")))) + (let* ((default-directory (project-root (project-current t))) + (default-project-shell-name + (concat "*" (file-name-nondirectory + (directory-file-name + (file-name-directory default-directory))) + "-shell*")) + (shell-buffer (get-buffer default-project-shell-name))) + (if (and shell-buffer (not current-prefix-arg)) + (switch-to-buffer-other-window shell-buffer) + ;; Use ‘create-file-buffer’ to uniquify shell buffer names. + (shell (create-file-buffer default-project-shell-name))))) ;;;###autoload (defun project-eshell ()