summaryrefslogtreecommitdiff
path: root/lisp/shell.el
diff options
context:
space:
mode:
authorMichael Albinus <michael.albinus@gmx.de>2019-10-17 18:46:53 +0200
committerMichael Albinus <michael.albinus@gmx.de>2019-10-17 18:46:53 +0200
commit96f959521996399b7d75132d9f913577ba59cfb5 (patch)
tree2f22c12218c90a5823a227a053b264d64570057e /lisp/shell.el
parentd1aafe02c3f00caea42aa107567875fcbfca733d (diff)
downloademacs-96f959521996399b7d75132d9f913577ba59cfb5.tar.gz
* lisp/shell.el (shell): Make shell buffer the current buffer. (Bug#37745)
Diffstat (limited to 'lisp/shell.el')
-rw-r--r--lisp/shell.el69
1 files changed, 35 insertions, 34 deletions
diff --git a/lisp/shell.el b/lisp/shell.el
index 38b0ef85b96..9593c79de1e 100644
--- a/lisp/shell.el
+++ b/lisp/shell.el
@@ -708,6 +708,8 @@ such as `explicit-csh-args'. If that symbol is a variable,
its value is used as a list of arguments when invoking the shell.
Otherwise, one argument `-i' is passed to the shell.
+Make the shell buffer the current buffer, and return it.
+
\(Type \\[describe-mode] in the shell buffer for a list of commands.)"
(interactive
(list
@@ -734,40 +736,39 @@ Otherwise, one argument `-i' is passed to the shell.
(get-buffer-create (or buffer "*shell*"))
;; If the current buffer is a dead shell buffer, use it.
(current-buffer)))
-
- (with-current-buffer buffer
- (with-connection-local-variables
- ;; On remote hosts, the local `shell-file-name' might be useless.
- (when (file-remote-p default-directory)
- (if (and (called-interactively-p 'any)
- (null explicit-shell-file-name)
- (null (getenv "ESHELL")))
- (set (make-local-variable 'explicit-shell-file-name)
- (file-local-name
- (expand-file-name
- (read-file-name
- "Remote shell path: " default-directory shell-file-name
- t shell-file-name))))))
-
- ;; The buffer's window must be correctly set when we call comint
- ;; (so that comint sets the COLUMNS env var properly).
- (pop-to-buffer buffer)
- ;; Rain or shine, BUFFER must be current by now.
- (unless (comint-check-proc buffer)
- (let* ((prog (or explicit-shell-file-name
- (getenv "ESHELL") shell-file-name))
- (name (file-name-nondirectory prog))
- (startfile (concat "~/.emacs_" name))
- (xargs-name (intern-soft (concat "explicit-" name "-args"))))
- (unless (file-exists-p startfile)
- (setq startfile (concat user-emacs-directory "init_" name ".sh")))
- (setq-local shell--start-prog (file-name-nondirectory prog))
- (apply #'make-comint-in-buffer "shell" buffer prog
- (if (file-exists-p startfile) startfile)
- (if (and xargs-name (boundp xargs-name))
- (symbol-value xargs-name)
- '("-i")))
- (shell-mode)))))
+ ;; The buffer's window must be correctly set when we call comint
+ ;; (so that comint sets the COLUMNS env var properly).
+ (pop-to-buffer buffer)
+
+ (with-connection-local-variables
+ ;; On remote hosts, the local `shell-file-name' might be useless.
+ (when (file-remote-p default-directory)
+ (if (and (called-interactively-p 'any)
+ (null explicit-shell-file-name)
+ (null (getenv "ESHELL")))
+ (set (make-local-variable 'explicit-shell-file-name)
+ (file-local-name
+ (expand-file-name
+ (read-file-name
+ "Remote shell path: " default-directory shell-file-name
+ t shell-file-name))))))
+
+ ;; Rain or shine, BUFFER must be current by now.
+ (unless (comint-check-proc buffer)
+ (let* ((prog (or explicit-shell-file-name
+ (getenv "ESHELL") shell-file-name))
+ (name (file-name-nondirectory prog))
+ (startfile (concat "~/.emacs_" name))
+ (xargs-name (intern-soft (concat "explicit-" name "-args"))))
+ (unless (file-exists-p startfile)
+ (setq startfile (concat user-emacs-directory "init_" name ".sh")))
+ (setq-local shell--start-prog (file-name-nondirectory prog))
+ (apply #'make-comint-in-buffer "shell" buffer prog
+ (if (file-exists-p startfile) startfile)
+ (if (and xargs-name (boundp xargs-name))
+ (symbol-value xargs-name)
+ '("-i")))
+ (shell-mode))))
buffer)
;;; Directory tracking