From: Miles Bader Date: Tue, 11 Sep 2001 08:43:02 +0000 (+0000) Subject: (comint-send-input): When waiting for echoed input, don't save the X-Git-Tag: emacs-pretest-21.0.106~152 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=4e1513b5948ef2d160e2b648e95dc6ce28221474;p=emacs.git (comint-send-input): When waiting for echoed input, don't save the expected end position in `echo-end', so that things work properly even if the buffer is modified elsewhere at the same time [this happens if `comint-truncate-buffer' is used]. --- diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 9436d6bb49b..1292cc2cfbf 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,10 @@ +2001-09-11 Miles Bader + + * comint.el (comint-send-input): When waiting for echoed input, + don't save the expected end position in `echo-end', so that things + work properly even if the buffer is modified elsewhere at the same + time [this happens if `comint-truncate-buffer' is used]. + 2001-09-11 Gerd Moellmann * textmodes/outline.el (outline-mode): Use `^' and a shy group diff --git a/lisp/comint.el b/lisp/comint.el index 24ffe55ed71..71d0cae28ea 100644 --- a/lisp/comint.el +++ b/lisp/comint.el @@ -1469,26 +1469,31 @@ Similarly for Soar, Scheme, etc." (funcall comint-input-sender proc input) ;; Optionally delete echoed input (after checking it). - (if comint-process-echoes - (let* ((echo-len (- comint-last-input-end - comint-last-input-start)) - (echo-end (+ comint-last-input-end echo-len))) - ;; Wait for all input to be echoed: - (while (and (accept-process-output proc) - (> echo-end (point-max)) - (= 0 (compare-buffer-substrings - nil comint-last-input-start - (- (point-max) echo-len) - ;; Above difference is equivalent to - ;; (+ comint-last-input-start - ;; (- (point-max) comint-last-input-end)) - nil comint-last-input-end (point-max))))) - (if (and - (<= echo-end (point-max)) - (= 0 (compare-buffer-substrings - nil comint-last-input-start comint-last-input-end - nil comint-last-input-end echo-end))) - (delete-region comint-last-input-end echo-end)))) + (when comint-process-echoes + (let ((echo-len (- comint-last-input-end + comint-last-input-start))) + ;; Wait for all input to be echoed: + (while (and (accept-process-output proc) + (> (+ comint-last-input-end echo-len) + (point-max)) + (zerop + (compare-buffer-substrings + nil comint-last-input-start + (- (point-max) echo-len) + ;; Above difference is equivalent to + ;; (+ comint-last-input-start + ;; (- (point-max) comint-last-input-end)) + nil comint-last-input-end (point-max))))) + (if (and + (<= (+ comint-last-input-end echo-len) + (point-max)) + (zerop + (compare-buffer-substrings + nil comint-last-input-start comint-last-input-end + nil comint-last-input-end + (+ comint-last-input-end echo-len)))) + (delete-region comint-last-input-end + (+ comint-last-input-end echo-len))))) ;; This used to call comint-output-filter-functions, ;; but that scrolled the buffer in undesirable ways.