* lisp/shell.el (shell): Use current-buffer by default if it's already
authorStefan Monnier <monnier@iro.umontreal.ca>
Tue, 23 Nov 2010 14:19:54 +0000 (09:19 -0500)
committerStefan Monnier <monnier@iro.umontreal.ca>
Tue, 23 Nov 2010 14:19:54 +0000 (09:19 -0500)
a shell mode buffer and its process is dead.  Suggested by <jemarch@gnu.org>.

lisp/ChangeLog
lisp/shell.el

index e6a33d3..052ef61 100644 (file)
@@ -1,7 +1,13 @@
+2010-11-23  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * shell.el (shell): Use current-buffer by default if it's already
+       a shell mode buffer and its process is dead.
+       Suggested by <jemarch@gnu.org>.
+
 2010-11-23  Tassilo Horn  <tassilo@member.fsf.org>
 
-       * mail/emacsbug.el (report-emacs-bug-query-existing-bugs): Mention
-       that the keywords should be comma separated.
+       * mail/emacsbug.el (report-emacs-bug-query-existing-bugs):
+       Mention that the keywords should be comma separated.
 
 2010-11-23  Chong Yidong  <cyd@stupidchicken.com>
 
index 7771c0d..4288834 100644 (file)
@@ -554,13 +554,19 @@ Otherwise, one argument `-i' is passed to the shell.
                          (generate-new-buffer-name "*shell*"))
           (if (file-remote-p default-directory)
               ;; It must be possible to declare a local default-directory.
+               ;; FIXME: This can't be right: it changes the default-directory
+               ;; of the current-buffer rather than of the *shell* buffer.
               (setq default-directory
                     (expand-file-name
                      (read-file-name
                       "Default directory: " default-directory default-directory
                       t nil 'file-directory-p))))))))
   (require 'ansi-color)
-  (setq buffer (get-buffer-create (or buffer "*shell*")))
+  (setq buffer (if (or buffer (not (derived-mode-p 'shell-mode))
+                       (comint-check-proc (current-buffer)))
+                   (get-buffer-create (or buffer "*shell*"))
+                 ;; If the current buffer is a dead shell buffer, use it.
+                 (current-buffer)))
   ;; Pop to buffer, so that the buffer's window will be correctly set
   ;; when we call comint (so that comint sets the COLUMNS env var properly).
   (pop-to-buffer buffer)