]> git.eshelyaron.com Git - emacs.git/commitdiff
Avoid repeated prompts in `M-x shell' if using ~/.emacs_bash
authorLars Ingebrigtsen <larsi@gnus.org>
Thu, 17 Mar 2022 14:04:07 +0000 (15:04 +0100)
committerLars Ingebrigtsen <larsi@gnus.org>
Thu, 17 Mar 2022 14:04:42 +0000 (15:04 +0100)
* lisp/shell.el (shell): Use `shell-eval-command' to avoid
repeated prompts (bug#9961).

lisp/shell.el

index 7d5cb475eb2a22fe9316fe17539ce95f9d783565..565ededa1efa8f8aa5ddae1c9258c7de33c27c98 100644 (file)
@@ -783,17 +783,26 @@ Make the shell buffer the current buffer, and return it.
                       (getenv "ESHELL") shell-file-name))
             (name (file-name-nondirectory prog))
             (startfile (concat "~/.emacs_" name))
-            (xargs-name (intern-soft (concat "explicit-" name "-args"))))
+            (xargs-name (intern-soft (concat "explicit-" name "-args")))
+            (start-point (point)))
        (unless (file-exists-p startfile)
          (setq startfile (locate-user-emacs-file
                           (concat "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)
+              nil
               (if (and xargs-name (boundp xargs-name))
                   (symbol-value xargs-name)
                 '("-i")))
-       (shell-mode))))
+       (shell-mode)
+       (when (file-exists-p startfile)
+         ;; Wait until the prompt has appeared.
+         (while (= start-point (point))
+           (sleep-for 0.1))
+         (shell-eval-command
+          (with-temp-buffer
+            (insert-file-contents startfile)
+            (buffer-string)))))))
   buffer)
 
 ;;; Directory tracking