(define-key mainmap [remap scroll-bar-drag] 'follow-scroll-bar-drag)
(define-key mainmap [remap scroll-bar-scroll-up] 'follow-scroll-bar-scroll-up)
(define-key mainmap [remap scroll-bar-scroll-down] 'follow-scroll-bar-scroll-down)
+ (define-key mainmap [remap mwheel-scroll] 'follow-mwheel-scroll)
mainmap)
"Minor mode keymap for Follow mode.")
To mark other commands as suitable for caching, set the symbol
property `follow-mode-use-cache' to non-nil.")
-(defvar follow-debug nil
- "Non-nil when debugging Follow mode.")
-
+(defcustom follow-debug nil
+ "If non-nil, emit Follow mode debugging messages."
+ :type 'boolean
+ :group 'follow)
;; Internal variables:
(defvar follow-active-menu nil
"The menu visible when Follow mode is active.")
-(defvar follow-deactive-menu nil
- "The menu visible when Follow mode is deactivated.")
+(defvar follow-inactive-menu nil
+ "The menu visible when Follow mode is inactive.")
(defvar follow-inside-post-command-hook nil
"Non-nil when inside Follow modes `post-command-hook'.
(scroll-bar-scroll-down event)
(follow-redraw-after-event event))
+(defun follow-mwheel-scroll (event)
+ (interactive "e")
+ (mwheel-scroll event)
+ (follow-redraw-after-event event))
+
(defun follow-redraw-after-event (event)
- "Re-align the Follow mode windows acted on by EVENT."
- (let ((window (nth 0 (event-end event)))
- (orig-win (selected-window)))
- (when (and (buffer-local-value 'follow-mode (window-buffer window))
+ "Re-align the Follow mode windows affected by EVENT."
+ (let* ((window (nth 0 (event-end event)))
+ (buffer (window-buffer window))
+ (orig-win (selected-window)))
+ (when (and (buffer-local-value 'follow-mode buffer)
;; Ignore the case where we scroll the selected window;
;; that is handled by the post-command hook function.
(not (eq window (selected-window))))
(select-window window)
(follow-redisplay)
- (select-window orig-win))))
+ (unless (eq (window-buffer orig-win) buffer)
+ (select-window orig-win)))))
;;; Window size change