]> code.delx.au - gnu-emacs/blobdiff - lisp/follow.el
* w32-fns.el (w32-shell-dos-semantics):
[gnu-emacs] / lisp / follow.el
index 55a331a22d31ee28ca8ffa673580963bb4e921ad..61ede230be121d5ffde31b3678440d43a9a5e845 100644 (file)
@@ -1,7 +1,7 @@
 ;;; follow.el --- synchronize windows showing the same buffer
 
 ;; Copyright (C) 1995, 1996, 1997, 1999, 2001, 2002, 2003, 2004,
-;;   2005, 2006, 2007 Free Software Foundation, Inc.
+;;   2005, 2006, 2007, 2008 Free Software Foundation, Inc.
 
 ;; Author: Anders Lindgren <andersl@andersl.com>
 ;; Maintainer: FSF (Anders' email bounces, Sep 2005)
 
 ;; This file is part of GNU Emacs.
 
-;; GNU Emacs is free software; you can redistribute it and/or modify
+;; GNU Emacs is free software: you can redistribute it and/or modify
 ;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation; either version 3, or (at your option)
-;; any later version.
+;; the Free Software Foundation, either version 3 of the License, or
+;; (at your option) any later version.
 
 ;; GNU Emacs is distributed in the hope that it will be useful,
 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
@@ -21,9 +21,7 @@
 ;; GNU General Public License for more details.
 
 ;; You should have received a copy of the GNU General Public License
-;; along with GNU Emacs; see the file COPYING.  If not, write to the
-;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
-;; Boston, MA 02110-1301, USA.
+;; along with GNU Emacs.  If not, see <http://www.gnu.org/licenses/>.
 
 ;;; Commentary:
 
 ;; above for an example of how to bind the keys the way you like.
 ;;
 ;; Please note that the keymap is defined the first time this file is
-;; loaded.  Also note that the only legal way to manipulate the
+;; loaded.  Also note that the only valid way to manipulate the
 ;; keymap is to use `define-key'.  Don't change it using `setq' or
 ;; similar!
 
@@ -626,7 +624,7 @@ Works like `scroll-up' when not in Follow mode."
             (select-window win)
             (goto-char start)
             (vertical-motion (- (- (window-height win)
-                                   1
+                                   (if header-line-format 2 1)
                                    next-screen-context-lines)))
             (set-window-start win (point))
             (goto-char start)
@@ -712,7 +710,7 @@ in your `~/.emacs' file:
 ;;}}}
 ;;{{{ Movement
 
-;; Note, these functions are not very useful, atleast not unless you
+;; Note, these functions are not very useful, at least not unless you
 ;; rebind the rather cumbersome key sequence `C-c . p'.
 
 (defun follow-next-window ()
@@ -889,7 +887,9 @@ Returns (end-pos end-of-buffer-p)"
       (prog1
          (save-excursion
            (goto-char (window-start))
-           (setq height (- (window-height) 1))
+           (setq height
+                 (- (window-height)
+                    (if header-line-format 2 1)))
            (setq buffer-end-p
                  (if (bolp)
                      (not (= height (vertical-motion height)))
@@ -1221,7 +1221,9 @@ position of the first window.  Otherwise it is a good guess."
       ;(setq exact (bolp))
       (vertical-motion 0 win)
       (while pred
-       (vertical-motion (- 1 (window-height (car pred))) (car pred))
+       (vertical-motion
+        (- (if header-line-format 2 1)
+           (window-height (car pred))) (car pred))
        (if (not (bolp))
          (setq exact nil))
        (setq pred (cdr pred)))
@@ -1267,7 +1269,7 @@ position of the first window.  Otherwise it is a good guess."
     (let ((done nil)
          win-start
          res)
-      ;; Always calculate what happend when no line is displayed in the first
+      ;; Always calculate what happens when no line is displayed in the first
       ;; window. (The `previous' res is needed below!)
       (goto-char guess)
       (vertical-motion 0 (car windows))
@@ -1355,7 +1357,7 @@ non-first windows in Follow mode."
 ;; the screen if it should be unaligned.
 ;;
 ;; We divide the check into two parts; whether we are at the end or not.
-;; This is due to the fact that the end can actaually be visible
+;; This is due to the fact that the end can actually be visible
 ;; in several window even though they are aligned.
 
 (defun follow-post-command-hook ()
@@ -1508,9 +1510,9 @@ non-first windows in Follow mode."
                    (setq win-start-end (follow-windows-start-end windows))
                    (follow-invalidate-cache)
                    ;; When the point ends up in another window. This
-                   ;; happends when dest is in the beginning of the
+                   ;; happens when dest is in the beginning of the
                    ;; file and the selected window is not the first.
-                   ;; It can also, in rare situations happend when
+                   ;; It can also, in rare situations happen when
                    ;; long lines are used and there is a big
                    ;; difference between the width of the windows.
                    ;; (When scrolling one line in a wide window which
@@ -1524,6 +1526,8 @@ non-first windows in Follow mode."
              ;; If the region is visible, make it look good when spanning
              ;; multiple windows.
              (if (or (and (boundp 'mark-active) (symbol-value 'mark-active))
+                     ;; The following isn't used in Emacs,
+                     ;; since `mark-active' is bound.
                      (and (fboundp 'region-active-p)
                           (funcall (symbol-function 'region-active-p))))
                  (follow-maximize-region
@@ -2162,6 +2166,37 @@ This prevents `mouse-drag-region' from messing things up."
 
 ;;{{{ The end
 
+(defun follow-unload-function ()
+  "Unload Follow mode library."
+  (easy-menu-remove-item nil '("Tools") "Follow")
+  (follow-stop-intercept-process-output)
+  (dolist (group '((before
+                   ;; XEmacs
+                   isearch-done
+                   ;; both
+                   set-process-filter sit-for move-overlay)
+                  (after
+                   ;; Emacs
+                   scroll-bar-drag scroll-bar-drag-1 scroll-bar-scroll-down
+                   scroll-bar-scroll-up scroll-bar-set-window-start
+                   ;; XEmacs
+                   scrollbar-line-down scrollbar-line-up scrollbar-page-down
+                   scrollbar-page-up scrollbar-to-bottom scrollbar-to-top
+                   scrollbar-vertical-drag
+                   ;; both
+                   process-filter)))
+    (let ((class (car group)))
+      (dolist (fun (cdr group))
+       (when (functionp fun)
+         (condition-case nil
+             (progn
+               (ad-remove-advice fun class
+                                 (intern (concat "follow-" (symbol-name fun))))
+               (ad-update fun))
+           (error nil))))))
+  ;; continue standard processing
+  nil)
+
 ;;
 ;; We're done!
 ;;