* emacs-lisp/package.el (package-untar-buffer): Handle problematic tarfile content...
[bpt/emacs.git] / lisp / follow.el
index 53dd4c2..a74862c 100644 (file)
@@ -258,6 +258,7 @@ After that, changing the prefix key requires manipulating keymaps."
     (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.")
@@ -320,9 +321,10 @@ The commands in this list are checked at load time.
 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:
 
@@ -332,8 +334,8 @@ property `follow-mode-use-cache' to non-nil.")
 (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'.
@@ -1315,17 +1317,24 @@ non-first windows in Follow mode."
   (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