]> git.eshelyaron.com Git - emacs.git/commitdiff
Cleanup comint-postoutput-scroll-to-bottom (Bug#13248).
authorVitalie Spinu <spinuvit@gmail.com>
Thu, 27 Dec 2012 07:33:47 +0000 (08:33 +0100)
committerMartin Rudalics <rudalics@gmx.at>
Thu, 27 Dec 2012 07:33:47 +0000 (08:33 +0100)
* comint.el (comint-adjust-window-point): New function.
(comint-postoutput-scroll-to-bottom): Call
comint-adjust-window-point (Bug#13248).

lisp/ChangeLog
lisp/comint.el

index 4b43050ddf5effba55dbd162ef1438dab1cb81ea..03122ff50004856c1c5f6ea397f1c13d0a2d777f 100644 (file)
@@ -1,3 +1,9 @@
+2012-12-27  Vitalie Spinu  <spinuvit@gmail.com>  (tiny change)
+
+       * comint.el (comint-adjust-window-point): New function.
+       (comint-postoutput-scroll-to-bottom): Call
+       comint-adjust-window-point (Bug#13248).
+
 2012-12-26  Dmitry Gutov  <dgutov@yandex.ru>
 
        * progmodes/ruby-mode.el (auto-mode-alist): `purecopy' the
index a01e7e58cd7d6a2d2f1ce9e0949d6ca597c2048c..f3450e3f58e7ea93c104768c8e6e5454ff9fa399 100644 (file)
@@ -2120,19 +2120,31 @@ This function should be in the list `comint-output-filter-functions'."
         ((bound-and-true-p follow-mode)
          (follow-comint-scroll-to-bottom))
         (t
-         (let ((selected (selected-window)))
-           (dolist (w (get-buffer-window-list current nil t))
-             (select-window w)
-             (unwind-protect
-                 (progn
-                   (comint-adjust-point selected)
-                   ;; Optionally scroll to the bottom of the window.
-                   (and comint-scroll-show-maximum-output
-                        (eobp)
-                        (recenter (- -1 scroll-margin))))
-               (select-window selected))))))
+          (dolist (w (get-buffer-window-list current nil t))
+            (comint-adjust-window-point w process)
+            ;; Optionally scroll to the bottom of the window.
+            (and comint-scroll-show-maximum-output
+                 (eq (window-point w) (point-max))
+                 (with-selected-window w
+                   (recenter (- -1 scroll-margin)))))))
       (set-buffer current))))
 
+
+(defun comint-adjust-window-point (window process)
+  "Move point in WINDOW based on Comint settings.
+For point adjustment use the process-mark of PROCESS."
+  (and (< (window-point window) (process-mark process))
+       (or (memq comint-move-point-for-output '(t all))
+           ;; Maybe user wants point to jump to end.
+           (eq comint-move-point-for-output
+               (if (eq (selected-window) window) 'this 'others))
+           ;; If point was at the end, keep it at end.
+           (and (marker-position comint-last-output-start)
+                (>= (window-point window) comint-last-output-start)))
+       (set-window-point window (process-mark process))))
+
+
+;; this function is nowhere used
 (defun comint-adjust-point (selected)
   "Move point in the selected window based on Comint settings.
 SELECTED is the window that was originally selected."