]> code.delx.au - gnu-emacs/commitdiff
* lisp/comint.el (comint-output-filter): Filter out repeated prompts.
authorStefan Monnier <monnier@iro.umontreal.ca>
Mon, 2 Jul 2012 16:18:02 +0000 (12:18 -0400)
committerStefan Monnier <monnier@iro.umontreal.ca>
Mon, 2 Jul 2012 16:18:02 +0000 (12:18 -0400)
lisp/ChangeLog
lisp/comint.el

index a514162e7ba5bd8969d678aba70d9261b3da29f7..0e7c49342c770f08027c9afe1e062a25fa79385d 100644 (file)
@@ -1,5 +1,7 @@
 2012-07-02  Stefan Monnier  <monnier@iro.umontreal.ca>
 
+       * 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
index 122dc62956496c3c00c9059accb763106107ad48..4ccbfb5f9c88b41cb069277dbf94f87a1fc041ca 100644 (file)
@@ -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")
-
 \f
 ;; Support for source-file processing commands.
 ;;============================================================================