;;; 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
;; 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!
(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)
(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)))
;(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)))
;; 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 ()
;; 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