changeset 103248:97c6a390ad50

* progmodes/compile.el (compilation-filter): If inserting at end of accessible part of buffer, keep end of output visible.
author Richard M. Stallman <rms@gnu.org>
date Mon, 18 May 2009 16:30:59 +0000
parents 0eb3cdddefb2
children 019c8b2b5898
files lisp/ChangeLog lisp/progmodes/compile.el
diffstat 2 files changed, 14 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/lisp/ChangeLog	Mon May 18 16:26:57 2009 +0000
+++ b/lisp/ChangeLog	Mon May 18 16:30:59 2009 +0000
@@ -1,5 +1,8 @@
 2009-05-18  Richard M Stallman  <rms@gnu.org>
 
+	* progmodes/compile.el (compilation-filter): If inserting at end
+	of accessible part of buffer, keep end of output visible.
+
 	* mail/rmail.el (rmail-expunge-confirmed): Return nil if nothing to do.
 	Don't call rmail-modify-format here.
 	(rmail-expunge): Call it here after expunge is confirmed.
--- a/lisp/progmodes/compile.el	Mon May 18 16:26:57 2009 +0000
+++ b/lisp/progmodes/compile.el	Mon May 18 16:30:59 2009 +0000
@@ -1739,9 +1739,15 @@
     (with-current-buffer (process-buffer proc)
       (let ((inhibit-read-only t)
             ;; `save-excursion' doesn't use the right insertion-type for us.
-            (pos (copy-marker (point) t)))
+            (pos (copy-marker (point) t))
+	    (min (point-min-marker))
+	    (max (point-max-marker)))
         (unwind-protect
             (progn
+	      ;; If we are inserting at the end of the accessible part
+	      ;; of the buffer, keep the inserted text visible.
+	      (set-marker-insertion-type max t)
+	      (widen)
               (goto-char (process-mark proc))
               ;; We used to use `insert-before-markers', so that windows with
               ;; point at `process-mark' scroll along with the output, but we
@@ -1751,7 +1757,10 @@
                 (comint-carriage-motion (process-mark proc) (point)))
               (set-marker (process-mark proc) (point))
               (run-hooks 'compilation-filter-hook))
-          (goto-char pos))))))
+	  (goto-char pos)
+          (narrow-to-region min max)
+	  (set-marker min nil)
+	  (set-marker max nil))))))
 
 ;;; test if a buffer is a compilation buffer, assuming we're in the buffer
 (defsubst compilation-buffer-internal-p ()