From: Stefan Monnier Date: Mon, 2 Jul 2012 16:18:02 +0000 (-0400) Subject: * lisp/comint.el (comint-output-filter): Filter out repeated prompts. X-Git-Tag: emacs-24.2.90~1199^2~255 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=2b5208f18115bd0f364c11cbdc8124878158927a;p=emacs.git * lisp/comint.el (comint-output-filter): Filter out repeated prompts. --- diff --git a/lisp/ChangeLog b/lisp/ChangeLog index a514162e7ba..0e7c49342c7 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,5 +1,7 @@ 2012-07-02 Stefan Monnier + * comint.el (comint-output-filter): Filter out repeated prompts. + * net/ange-ftp.el (ange-ftp-expand-file-name): Use ange-ftp-ftp-name and file-name-absolute-p. (ange-ftp-file-exists-p): Use ange-ftp-file-exists-p for diff --git a/lisp/comint.el b/lisp/comint.el index 122dc629564..4ccbfb5f9c8 100644 --- a/lisp/comint.el +++ b/lisp/comint.el @@ -2006,6 +2006,20 @@ Make backspaces delete the previous character." (goto-char (process-mark process)) (set-marker comint-last-output-start (point)) + ;; Try to skip repeated prompts, which can occur as a result of + ;; commands sent without inserting them in the buffer. + (let ((bol (save-excursion (forward-line 0) (point)))) ;No fields. + (when (and (not (bolp)) + (looking-back comint-prompt-regexp bol)) + (let* ((prompt (buffer-substring bol (point))) + (prompt-re (concat "\\`" (regexp-quote prompt)))) + (while (string-match prompt-re string) + (setq string (substring string (match-end 0))))))) + (while (string-match (concat "\\(^" comint-prompt-regexp + "\\)\\1+") + string) + (setq string (replace-match "\\1" nil nil string))) + ;; insert-before-markers is a bad thing. XXX ;; Luckily we don't have to use it any more, we use ;; window-point-insertion-type instead. @@ -2672,6 +2686,7 @@ prompts should stay at the beginning of a line. If this is not the case, this command just calls `kill-region' with all read-only properties intact. The read-only status of newlines is updated using `comint-update-fence', if necessary." + (declare (advertised-calling-convention (beg end) "23.3")) (interactive "r") (save-excursion (let* ((true-beg (min beg end)) @@ -2690,8 +2705,6 @@ updated using `comint-update-fence', if necessary." (let ((inhibit-read-only t)) (kill-region beg end yank-handler) (comint-update-fence)))))) -(set-advertised-calling-convention 'comint-kill-region '(beg end) "23.3") - ;; Support for source-file processing commands. ;;============================================================================