From 66d15137629a5224e16a0269e0e3181500962de2 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Miha=20Rihtar=C5=A1i=C4=8D?= Date: Thu, 23 Sep 2021 23:18:40 +0200 Subject: [PATCH] Fix problems with 'C-c C-n' in sh-script-mode * lisp/progmodes/sh-script.el (sh-shell-process): If a *shell* buffer doesn't exist, 'C-c C-n' creates one and displays it. This patch prevents it from being displayed in the selected window. Additionally, it ensures that the local `sh-shell-process' variable is set in the correct buffer (bug#50765). --- lisp/progmodes/sh-script.el | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/lisp/progmodes/sh-script.el b/lisp/progmodes/sh-script.el index cccd70f06cc..3b6774aa14c 100644 --- a/lisp/progmodes/sh-script.el +++ b/lisp/progmodes/sh-script.el @@ -1396,8 +1396,15 @@ If FORCE is non-nil and no process found, create one." (or found (and force (get-buffer-process - (let ((explicit-shell-file-name sh-shell-file)) - (shell))))))))) + (let ((explicit-shell-file-name sh-shell-file) + (display-buffer-overriding-action + '(nil . ((inhibit-same-window . t))))) + ;; We must prevent this `(shell)' call from + ;; switching buffers, so that the variable + ;; `sh-shell-process' is set locally in the + ;; correct buffer. + (save-current-buffer + (shell)))))))))) (defun sh-show-shell () "Pop the shell interaction buffer." -- 2.39.2