]> code.delx.au - gnu-emacs/blobdiff - lisp/follow.el
Rename ido-max-prompt-width to ido-max-file-prompt-width for consistency.
[gnu-emacs] / lisp / follow.el
index 92ad5829e4d9d7e9b5a4b1a380bfb4083a50e420..4480ba6b8491ad196c5c19338fd98b2f88915ec6 100644 (file)
@@ -1,4 +1,4 @@
-;;; follow.el --- Minor mode, Synchronize windows showing the same buffer.
+;;; follow.el --- synchronize windows showing the same buffer
 
 ;; Copyright (C) 1995, 1996, 1997, 1999, 2001 Free Software Foundation, Inc.
 
 ;;
 ;; When `Follow' mode is activated, functions stored in the hook
 ;; `follow-mode-hook' are called.  When it is deactivated
-;; `follow-mode-off-hook' is runed.
+;; `follow-mode-off-hook' is run.
 ;;
 ;; The keymap `follow-key-map' contains key bindings activated by
 ;; `follow-mode'.
@@ -2038,24 +2038,15 @@ report this using the `follow-submit-feedback' function."
        (if (not (marker-buffer (process-mark proc)))
            (set-marker (process-mark proc) (point-max)))
        (let ((moving (= (point) (process-mark proc)))
-             (odeactivate (and (boundp 'deactivate-mark)
-                               (symbol-value 'deactivate-mark)))
-             (old-buffer-read-only buffer-read-only))
-         (setq buffer-read-only nil)
+             deactivate-mark
+             (inhibit-read-only t))
          (save-excursion
            (goto-char (process-mark proc))
            ;; `insert-before-markers' just in case the users next
            ;; command is M-y.
            (insert-before-markers output)
            (set-marker (process-mark proc) (point)))
-         (if moving (goto-char (process-mark proc)))
-         (if (boundp 'deactivate-mark)
-             ;; This could really be
-             ;;    (setq deactivate-mark odeactivate)
-             ;; but this raises an error when compiling on XEmacs.
-             (funcall (symbol-function 'set)
-                      'deactivate-mark odeactivate))
-         (setq buffer-read-only old-buffer-read-only)))))
+         (if moving (goto-char (process-mark proc)))))))
 
     ;; If we're in follow mode, do our stuff.  Select a new window and
     ;; redisplay.  (Actually, it is redundant to check `buf', but I
@@ -2071,12 +2062,20 @@ report this using the `follow-submit-feedback' function."
                       (new-window-start (window-start win))
                       (new-window-point (window-point win)))
                  (cond
-                  ;; The window was moved. Move it back and
-                  ;; select a new.  If no better could be found,
-                  ;; we stick the the new start position.  This
-                  ;; is used when the original process filter
-                  ;; tries to position the cursor at the bottom
-                  ;; of the window.  Example: `lyskom'.
+                  ;; The start of the selected window was repositioned.
+                  ;; Try to use the original start position and continue
+                  ;; working with a window to the "right" in the window
+                  ;; chain.  This will create the effect that the output
+                  ;; starts in one window and continues into the next.
+
+                  ;; If the display has changed so much that it is not
+                  ;; possible to keep the original window fixed and still
+                  ;; display the point then we give up and use the new
+                  ;; window start.
+
+                  ;; This case is typically used when the process filter
+                  ;; tries to reposition the start of the window in order
+                  ;; to view the tail of the output.
                   ((not (eq orig-window-start new-window-start))
                    (follow-debug-message "filter: Moved")
                    (set-window-start win orig-window-start)