;;
;; 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'.
(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
(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 with 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)
;; | save it". -- Douglas Adams, "Last Chance to See" |
;; \------------------------------------------------------------------------/
+;;; arch-tag: 7b16bb1a-808c-4991-a8cc-66d3822936d0
;;; follow.el ends here