diff options
author | Michael Albinus <michael.albinus@gmx.de> | 2019-10-17 18:46:53 +0200 |
---|---|---|
committer | Michael Albinus <michael.albinus@gmx.de> | 2019-10-17 18:46:53 +0200 |
commit | 96f959521996399b7d75132d9f913577ba59cfb5 (patch) | |
tree | 2f22c12218c90a5823a227a053b264d64570057e /lisp/shell.el | |
parent | d1aafe02c3f00caea42aa107567875fcbfca733d (diff) | |
download | emacs-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.el | 69 |
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 |