summaryrefslogtreecommitdiff
path: root/lisp/shell.el
diff options
context:
space:
mode:
authorRomain Francoise <romain@orebokech.com>2005-09-17 18:20:40 +0000
committerRomain Francoise <romain@orebokech.com>2005-09-17 18:20:40 +0000
commit77689ea32d7c1ae0f5268a4f02043f72e0a7147b (patch)
treea2e9c88031a0d4ca13a548e6b0b3e37da23ed585 /lisp/shell.el
parent4ac3afdb5ad3e9b4cc85e3e92fa8f04ad5ffacb5 (diff)
downloademacs-77689ea32d7c1ae0f5268a4f02043f72e0a7147b.tar.gz
(shell-resync-dirs): Handle echoing processes more reliably. Don't
insert resync command if `comint-process-echoes' is non-nil.
Diffstat (limited to 'lisp/shell.el')
-rw-r--r--lisp/shell.el21
1 files changed, 14 insertions, 7 deletions
diff --git a/lisp/shell.el b/lisp/shell.el
index 0f71d8d8205..84de8efd8df 100644
--- a/lisp/shell.el
+++ b/lisp/shell.el
@@ -797,19 +797,26 @@ command again."
(let* ((proc (get-buffer-process (current-buffer)))
(pmark (process-mark proc)))
(goto-char pmark)
- (insert shell-dirstack-query) (insert "\n")
+ ;; If the process echoes commands, don't insert a fake command in
+ ;; the buffer or it will appear twice.
+ (unless comint-process-echoes
+ (insert shell-dirstack-query) (insert "\n"))
(sit-for 0) ; force redisplay
(comint-send-string proc shell-dirstack-query)
(comint-send-string proc "\n")
(set-marker pmark (point))
- (let ((pt (point))) ; wait for 1 line
+ (let ((pt (point))
+ (regexp
+ (concat
+ (if comint-process-echoes
+ ;; Skip command echo if the process echoes
+ (concat "\\(" (regexp-quote shell-dirstack-query) "\n\\)")
+ "\\(\\)")
+ "\\(.+\n\\)")))
;; This extra newline prevents the user's pending input from spoofing us.
(insert "\n") (backward-char 1)
- (while (not (looking-at
- (concat "\\(" ; skip literal echo in case of stty echo
- (regexp-quote shell-dirstack-query)
- "\n\\)?" ; skip if present
- "\\(" ".+\n" "\\)")) ) ; what to actually look for
+ ;; Wait for one line.
+ (while (not (looking-at regexp))
(accept-process-output proc)
(goto-char pt)))
(goto-char pmark) (delete-char 1) ; remove the extra newline