;ELC   
;;; Compiled by pot@pot.cnuce.cnr.it on Tue Mar 18 15:41:39 2003
;;; from file /home/pot/gnu/emacs-pretest.new/lisp/follow.el
;;; in Emacs version 21.3
;;; with bytecomp version 2.85.4.1
;;; with all optimizations.

;;; This file uses dynamic docstrings, first added in Emacs 19.29.
(if (and (boundp 'emacs-version)
	 (< (aref emacs-version (1- (length emacs-version))) ?A)
	 (or (and (boundp 'epoch::version) epoch::version)
	     (string-lessp emacs-version "19.29")))
    (error "`follow.el' was compiled for Emacs 19.29 or later"))

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;


(custom-declare-group 'follow nil "Synchronize windows showing the same buffer." :prefix "follow-" :group 'windows :group 'convenience)
#@47 Variable indicating if Follow mode is active.
(defvar follow-mode nil (#$ . 750))
#@46 *Hooks to run when follow-mode is turned on.
(custom-declare-variable 'follow-mode-hook 'nil '(#$ . -838) :type 'hook :group 'follow)
#@47 *Hooks to run when follow-mode is turned off.
(custom-declare-variable 'follow-mode-off-hook 'nil '(#$ . -978) :type 'hook :group 'follow)
#@37 *Minor mode keymap for Follow mode.
(defvar follow-mode-map nil (#$ . -1123))
#@132 *Text shown in the mode line when Follow mode is active.
Defaults to " Follow".  Examples of other values
are " Fw", or simply "".
(custom-declare-variable 'follow-mode-line-text '" Follow" '(#$ . -1208) :type 'string :group 'follow)
#@59 *Non-nil activates Follow mode whenever a file is loaded.
(custom-declare-variable 'follow-auto 'nil '(#$ . -1448) :type 'boolean :group 'follow)
#@193 *Prefix key to use for follow commands in Follow mode.
The value of this variable is checked as part of loading Follow mode.
After that, changing the prefix key requires manipulating keymaps.
(custom-declare-variable 'follow-mode-prefix '"." '(#$ . -1601) :type 'string :group 'follow)
#@57 *When non-nil, Follow Mode will monitor process output.
(custom-declare-variable 'follow-intercept-processes '(fboundp 'start-process) '(#$ . -1894) :type 'boolean :group 'follow)
#@36 Non-nil when running under XEmacs.
(defvar follow-emacs-version-xemacs-p (string-match "XEmacs" emacs-version) (#$ . 2080))
#@695 *When non-nil, patch emacs so that tail windows won't be recentered.

A "tail window" is a window that displays only the end of
the buffer.  Normally it is practical for the user that empty
windows are recentered automatically.  However, when using
Follow Mode it breaks the display when the end is displayed
in a window "above" the last window.  This is for
example the case when displaying a short page in info.

Must be set before Follow Mode is loaded.

Please note that it is not possible to fully prevent Emacs from
recentering empty windows.  Please report if you find a repeatable
situation in which Emacs recenters empty windows.

XEmacs, as of 19.12, does not recenter windows, good!
(defvar follow-avoid-tail-recenter-p (null follow-emacs-version-xemacs-p) (#$ . -2211))
#@365 List of commands that don't require recalculation.

In order to be able to use the cache, a command should not change the
contents of the buffer, nor should it change selected window or current
buffer.

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-cache-command-list '(next-line previous-line forward-char backward-char) (#$ . 3000))
#@38 *Non-nil when debugging Follow mode.
(defvar follow-debug nil (#$ . -3471))
#@53 True when Follow mode should redisplay the windows.
(defvar follow-internal-force-redisplay nil (#$ . 3553))
#@64 The original filters for processes intercepted by Follow mode.
(defvar follow-process-filter-alist nil (#$ . 3668))
#@46 The menu visible when Follow mode is active.
(defvar follow-active-menu nil (#$ . 3790))
#@51 The menu visible when Follow mode is deactivated.
(defvar follow-deactive-menu nil (#$ . 3885))
#@92 Non-nil when inside Follow modes `post-command-hook'.
Used by `follow-window-size-change'.
(defvar follow-inside-post-command-hook nil (#$ . 3987))
#@42 Cache used by `follow-window-start-end'.
(defvar follow-windows-start-end-cache nil (#$ . 4141))
#@67 Submit feedback on Follow mode to the author: andersl@andersl.com
(defalias 'follow-submit-feedback #[nil "\300\301!\210\302\303!\205 \304\305\306\307\310\211\311&\207" [require reporter y-or-n-p "Do you really want to submit a report on Follow mode? " reporter-submit-bug-report "Anders Lindgren <andersl@andersl.com>" "follow.el" (post-command-hook post-command-idle-hook pre-command-hook window-size-change-functions window-scroll-functions follow-mode-hook follow-mode-off-hook follow-auto follow-intercept-processes follow-avoid-tail-recenter-p follow-process-filter-alist) nil "Hi Anders!\n\n(I have read the section on how to report bugs in the Emacs manual.)\n\nEven though I know you are busy, I thought you might want to know...\n\n"] 7 (#$ . 4244) nil])
#@63 Like message, but only active when `follow-debug' is non-nil.
(defalias 'follow-debug-message #[(&rest args) "\302\300!\205 \205 \303\304	\"\207" [follow-debug args boundp apply message] 3 (#$ . 5017)])
(byte-code "\306\307\310\311#\210\204\325 \312 \312 \313	\314\315#\210\313	\316\317#\210\313	\320\317#\210\313	\321\322#\210\313	\323\324#\210\313	\325\326#\210\313	\327\330#\210\313	\331\332#\210\313	\333\334#\210\313	\335\336#\210\313	\337\340#\210\313\n	#\210\341\342\343\"\210\204\277 \312K\344!\345\346?\341\347\350\"\210\351\352 \353\"\346@A\354A!\203\262 \341\355A\"\210@\203\245 \356KA\357\360@$\210\356KA\361\344?B\362$\210\202\273 \313\352 \363\344?B#\210\202\273 \313\364\344?B#\210-\202\324 \365B\366K\367J!\210\370K\371B\"\210)\372\373M\210)\374C\236\204\344 \374BCBCD\211E\203\375 \306E@\375\376#\210EA\211E\204\354 )\346\207" [follow-mode-map map follow-mode-prefix follow-emacs-version-xemacs-p id count put follow-debug-message byte-optimizer byte-compile-inline-expand make-sparse-keymap define-key "" follow-scroll-up "\366" follow-scroll-down "v" "1" follow-delete-other-windows-and-split "b" follow-switch-to-buffer "" follow-switch-to-buffer-all "\f" follow-recenter "<" follow-first-window ">" follow-last-window "n" follow-next-window "p" follow-previous-window mapcar #[(pair) "@A\304\305\306\n\"\"*\207" [pair new old global-map mapcar #[(key) "\303	\n#\207" [follow-mode-map key new define-key] 4] where-is-internal] 5] ((end-of-buffer . follow-end-of-buffer) (fkey-end-of-buffer . follow-end-of-buffer)) "Follow" 0 nil #[(item) "A\206 	T\304\305\306	\"!\307\310\n!#\210\n\311=\206\" \312\n\313\311#\207" [item count id menumap intern format "separator-%d" define-key vector follow-mode put menu-enable] 4] (("Toggle Follow mode" . follow-mode) ("--") ("Recenter" . follow-recenter) ("--") ("Previous Window" . follow-previous-window) ("Next Windows" . follow-next-window) ("Last Window" . follow-last-window) ("First Window" . follow-first-window) ("--") ("Switch To Buffer (all windows)" . follow-switch-to-buffer-all) ("Switch To Buffer" . follow-switch-to-buffer) ("--") ("Delete Other Windows and Split" . follow-delete-other-windows-and-split) ("--") ("Scroll Down" . follow-scroll-down) ("Scroll Up" . follow-scroll-up)) lookup-key current-global-map [menu-bar tools] sequencep #[(x) "\243\243\243\206 	\211\207" [x last] 2] define-key-after [separator-follow] ("--") [follow] separator-follow [menu-bar tools follow] [menu-bar follow] ("Follow" :filter follow-menu-filter ["Scroll Up" follow-scroll-up t] ["Scroll Down" follow-scroll-down t] ["Delete Other Windows and Split" follow-delete-other-windows-and-split t] ["Switch To Buffer" follow-switch-to-buffer t] ["Switch To Buffer (all windows)" follow-switch-to-buffer-all t] ["First Window" follow-first-window t] ["Last Window" follow-last-window t] ["Next Windows" follow-next-window t] ["Previous Window" follow-previous-window t] ["Recenter" follow-recenter t] ["Deactivate" follow-mode t]) set-buffer-menubar current-menubar add-submenu ("Tools") follow-menu-filter #[(menu) "\203 	\207\302\207" [follow-mode menu (["Activate          " follow-mode t])] 1] follow-mode follow-mode-use-cache t menumap last tools-map menu minor-mode-map-alist follow-cache-command-list cmds] 6)
#@61 Turn on Follow mode. Please see the function `follow-mode'.
(defalias 'turn-on-follow-mode #[nil "\300\301!\207" [follow-mode 1] 2 (#$ . 8350) nil])
#@62 Turn off Follow mode. Please see the function `follow-mode'.
(defalias 'turn-off-follow-mode #[nil "\300\301!\207" [follow-mode -1] 2 (#$ . 8505) nil])
#@1451 Minor mode that combines windows into one tall virtual window.

The feeling of a "virtual window" has been accomplished by the use
of two major techniques:

* The windows always displays adjacent sections of the buffer.
  This means that whenever one window is moved, all the
  others will follow.  (Hence the name Follow Mode.)

* Should the point (cursor) end up outside a window, another
  window displaying that point is selected, if possible.  This
  makes it possible to walk between windows using normal cursor
  movement commands.

Follow mode comes to its prime when used on a large screen and two
side-by-side window are used. The user can, with the help of Follow
mode, use two full-height windows as though they would have been
one. Imagine yourself editing a large function, or section of text,
and being able to use 144 lines instead of the normal 72... (your
mileage may vary).

To split one large window into two side-by-side windows, the commands
`\[split-window-horizontally]' or `M-x follow-delete-other-windows-and-split' can be used.

Only windows displayed in the same frame follow each-other.

If the variable `follow-intercept-processes' is non-nil, Follow mode
will listen to the output of processes and redisplay accordingly.
(This is the default.)

When Follow mode is switched on, the hook `follow-mode-hook'
is called.  When turned off, `follow-mode-off-hook' is called.

Keys specific to Follow mode:
\{follow-mode-map}
(defalias 'follow-mode #[(arg) "\304\300!\210\305\300\306\307#\210\n\204 ?\202 \310\n!\311V\211\203& \203& \312 \210\203S 	\204S \313\314!\2038 \314\315L\210\316 \210\317\320\321\307#\210\313\322!\203M \317\322\323\307#\210\324\325!\202b ?\205b 	\205b \316 \210\324\326!)\207" [follow-mode follow-mode-orig arg follow-intercept-processes make-local-variable put permanent-local t prefix-numeric-value 0 follow-intercept-process-output boundp scroll-on-clipped-lines nil force-mode-line-update add-hook post-command-hook follow-post-command-hook post-command-idle-hook follow-avoid-tail-recenter run-hooks follow-mode-hook follow-mode-off-hook] 5 (#$ . 8665) "P"])
(byte-code "\301\302!\203 \302K\303\304\"\210\202 \303\236\204 \305B\306\307\310\311#\207" [minor-mode-alist fboundp add-minor-mode follow-mode follow-mode-line-text (follow-mode follow-mode-line-text) add-hook find-file-hooks follow-find-file-hook t] 4)
#@66 Find-file hook for Follow Mode.  See the variable `follow-auto'.
(defalias 'follow-find-file-hook #[nil "\205 \301\302!\207" [follow-auto follow-mode t] 2 (#$ . 11055)])
#@318 Scroll text in a Follow Mode window chain up.

If called with no ARG, the `next-screen-context-lines' last lines of
the bottom window in the chain will be visible in the top window.

If called with an argument, scroll ARG lines up.
Negative ARG means scroll downward.

Works like `scroll-up' when not in Follow Mode.
(defalias 'follow-scroll-up #[(&optional arg) "\306\300!\203\n \204 \307	!\207	\203 \212\307	!\210)\310\211\207\311 \312\313!@!\211d=\2033 \314\315\316\"\202I \317@!\210\f\203? \fb\210\320[!\210\321@`\"*\207" [follow-mode arg follow-internal-force-redisplay windows end next-screen-context-lines boundp scroll-up t follow-all-followers window-end reverse signal end-of-buffer nil select-window vertical-motion set-window-start] 4 (#$ . 11234) "P"])
#@319 Scroll text in a Follow Mode window chain down.

If called with no ARG, the `next-screen-context-lines' top lines of
the top window in the chain will be visible in the bottom window.

If called with an argument, scroll ARG lines down.
Negative ARG means scroll upward.

Works like `scroll-up' when not in Follow Mode.
(defalias 'follow-scroll-down #[(&optional arg) "\306\300!\203\n \204 \307	!\207	\203 \212\310	!)\207\311 \312\n!@\313\n@!\211e=\2032 \314\315\316\"\202U \317!\210\fb\210\320\321!Z\322Z[!\210\323`\"\210\fb\210\320S!\210\324\211+\207" [follow-mode arg windows win start next-screen-context-lines boundp scroll-up scroll-down follow-all-followers reverse window-start signal beginning-of-buffer nil select-window vertical-motion window-height 1 set-window-start t follow-internal-force-redisplay] 4 (#$ . 12017) "P"])
#@792 Create two side by side windows and enter Follow Mode.

Execute this command to display as much as possible of the text
in the selected window.  All other windows, in the current
frame, are deleted and the selected window is split in two
side-by-side windows. Follow Mode is activated, hence the
two windows always will display two successive pages.
(If one window is moved, the other one will follow.)

If ARG is positive, the leftmost window is selected.  If it negative,
the rightmost is selected.  If ARG is nil, the leftmost window is
selected if the original window is the first one in the frame.

To bind this command to a hotkey, place the following line
in your `~/.emacs' file, replacing [f7] by your favourite key:
    (global-set-key [f7] 'follow-delete-other-windows-and-split)
(defalias 'follow-delete-other-windows-and-split #[(&optional arg) "\204 \304 \305\306 !=?\206 \205 \307!\310W\311 \312 \210\313 \210\n\2032 \314\315!\210\316\304 	\"\210\317\320\315!*\207" [arg start other follow-internal-force-redisplay selected-window frame-first-window selected-frame prefix-numeric-value 0 window-start delete-other-windows split-window-horizontally other-window 1 set-window-start t follow-mode] 3 (#$ . 12871) "P"])
#@69 Show BUFFER in all windows in the current Follow Mode window chain.
(defalias 'follow-switch-to-buffer #[(buffer) "\303 \304 \203 \305@!\210\306\n!\210A\211\204\n \305	!*\207" [windows orig-window buffer selected-window follow-all-followers select-window switch-to-buffer] 3 (#$ . 14117) "BSwitch to Buffer: "])
#@71 Show BUFFER in all windows on this frame.
Defaults to current buffer.
(defalias 'follow-switch-to-buffer-all #[(&optional buffer) "\204 p\302 \303\304!\210\305	!\210\306 )\207" [buffer orig-window selected-window walk-windows #[(win) "\302!\210\303	!\207" [win buffer select-window switch-to-buffer] 2] select-window follow-redisplay] 2 (#$ . 14442) (list (read-buffer "Switch to Buffer: " (current-buffer)))])
#@218 Show current buffer in all windows on this frame, and enter Follow Mode.

To bind this command to a hotkey place the following line
in your `~/.emacs' file:
	(global-set-key [f7] 'follow-switch-to-current-buffer-all)
(defalias 'follow-switch-to-current-buffer-all #[nil "\301\300!\203\n \204 \300\302!\210\303 \207" [follow-mode boundp 1 follow-switch-to-buffer-all] 2 (#$ . 14865) nil])
#@49 Select the next window showing the same buffer.
(defalias 'follow-next-window #[nil "\301\302 !A\211\203 \303@!\202 \304\305\306\")\207" [succ follow-split-followers follow-all-followers select-window error "%s" "No more windows"] 4 (#$ . 15261) nil])
#@53 Select the previous window showing the same buffer.
(defalias 'follow-previous-window #[nil "\301\302 !@\211\203 \303@!\202 \304\305\306\")\207" [pred follow-split-followers follow-all-followers select-window error "%s" "No more windows"] 4 (#$ . 15523) nil])
#@63 Select the first window in the frame showing the same buffer.
(defalias 'follow-first-window #[nil "\300\301 @!\207" [select-window follow-all-followers] 2 (#$ . 15793) nil])
#@62 Select the last window in the frame showing the same buffer.
(defalias 'follow-last-window #[nil "\300\301\302 !@!\207" [select-window reverse follow-all-followers] 3 (#$ . 15974) nil])
#@225 Recenter the middle window around point.
Rearrange all other windows around the middle window.

With a positive argument, place the current line ARG lines
from the top.  With a negative, place it -ARG lines from the
bottom.
(defalias 'follow-recenter #[(&optional arg) "\203+ `\306!\307Y\203 \310 \210	b\210\311!\202) \312 \210	b\210\311!\210\313\211*\207`\314 \211GS\315\245\f8\316!\210b\210\311 +\207" [arg p follow-internal-force-redisplay dest windows win prefix-numeric-value 0 follow-first-window recenter follow-last-window t follow-all-followers 2 select-window] 4 (#$ . 16167) "P"])
#@258 Arrange windows displaying the same buffer in successor order.
This function can be called even if the buffer is not in Follow mode.

Hopefully, there should be no reason to call this function when in
Follow mode since the windows should always be aligned.
(defalias 'follow-redraw #[nil "\300\301!\210\302 \207" [sit-for 0 follow-redisplay] 2 (#$ . 16780) nil])
#@269 Move point to the end of the buffer, Follow Mode style.

If the end is not visible, it will be displayed in the last possible
window in the Follow Mode window chain.

The mark is left at the previous position.  With arg N, put point N/10
of the way from the true end.
(defalias 'follow-end-of-buffer #[(&optional arg) "\303 `\n\203 \304\305	!@!\210\202\" \306\307	!!\204\" \304\305	!@!\210b\210\310\n!*\207" [pos followers arg follow-all-followers select-window reverse follow-select-if-end-visible follow-windows-start-end end-of-buffer] 3 (#$ . 17150) "P"])
#@181 Return all windows displaying the same buffer as the TESTWIN.
The list contains only windows displayed in the same frame as TESTWIN.
If TESTWIN is nil the selected window is used.
(defalias 'follow-all-followers #[(&optional testwin) "\203\n \306!\204 \307 \310\311!!\211\312\312\313!\204B \n\203B \313\n!=\2031 \n\fB\314\n\315\"\211	=\203 \316\211\203! \f\237-\207" [testwin top win done windows buffer window-live-p selected-window frame-first-window window-frame nil window-buffer next-window not t] 4 (#$ . 17721)])
#@157 Split the WINDOWS into the sets: predecessors and successors.
Return `(PRED . SUCC)' where `PRED' and `SUCC' are ordered starting
from the selected window.
(defalias 'follow-split-followers #[(windows &optional win) "\204 \303 \304\n@=\204 \n@	B\nA\211\202\n 	\nA)B\207" [win pred windows selected-window nil] 3 (#$ . 18265)])
#@220 Calculate the presumed window end for WIN.

Actually, the position returned is the start of the next
window, normally is the end plus one.

If WIN is nil, the selected window is used.

Returns (end-pos end-of-buffer-p)
(defalias 'follow-calc-win-end #[(&optional win) "\203  \306	\307\"\211\310K\311	!!U\203 \n\307D\202 \nT\312D)\207	\205& \313 \312\211	\2033 \314	!\210\212\315 b\210\316 Sn\203I \f\317\f!U?\202U \214`d}\210\f\317\f!U)?`)D\203b \314!\210+\207" [follow-emacs-version-xemacs-p win end buffer-end-p height orig-win window-end t point-max window-buffer nil selected-window select-window window-start window-height vertical-motion] 5 (#$ . 18607)])
#@126 Calculate where WIN will start if the first in WINDOWS start at POS.

If WIN is nil the point below all windows is returned.
(defalias 'follow-calc-win-start #[(windows pos win) "\306	\203\236 	@\n=\204\236 \307	@!\310	@\311#\210	@\f\203> \312\n\313\"\211\314K\315\n!!U\2036 \313D\202: T\306D)\202\215 \n\205D \316 \306\211\n\203T \317\n!\210\212\307 b\210\320 Sn\203m \321!U?\202{ \214`d}\210\321!U)?`)D\203\214 \317!\210+)@\310	@\311#\210	A\211\204 )\207" [start windows win pos follow-emacs-version-xemacs-p end nil window-start set-window-start noforce window-end t point-max window-buffer selected-window select-window window-height vertical-motion buffer-end-p height orig-win] 6 (#$ . 19288)])
#@137 Test if the cached value of `follow-windows-start-end' can be used.
Note that this handles the case when the cache has been set to nil.
(defalias 'follow-cache-valid-p #[(windows) "\304\n\203, \203, 	\203, @	@@=\205\" \305@!	@A@=A	A\202 \n\2057 ?\2057 	?*\207" [follow-windows-start-end-cache cache res windows t window-start] 2 (#$ . 20032)])
(put 'follow-cache-valid-p 'byte-optimizer 'byte-compile-inline-expand)
#@72 Force `follow-windows-start-end' to recalculate the end of the window.
(defalias 'follow-invalidate-cache #[nil "\301\211\207" [follow-windows-start-end-cache nil] 2 (#$ . 20466)])
(put 'follow-invalidate-cache 'byte-optimizer 'byte-compile-inline-expand)
#@76 Builds a list of (WIN START END BUFFER-END-P) for every window in WINDOWS.
(defalias 'follow-windows-start-end #[(windows) "\306	\203. \203. \n\203. @\n@@=\205$ \307@!\n@A@=A\nA\202 \2059 ?\2059 \n?+\203? 	\207\310\311 \203_ \312@!\210@\307 \313 BBBA\211\204H \312\f!\210\237\211*\207" [windows follow-windows-start-end-cache cache res orig-win win-start-end t window-start nil selected-window select-window follow-calc-win-end] 4 (#$ . 20729)])
#@37 Non-nil when POS is visible in WIN.
(defalias 'follow-pos-visible #[(pos win win-start-end) "	\236A\n@Y\205 \nA@W\206 \304\n8)\207" [win win-start-end wstart-wend-bend pos 2] 2 (#$ . 21207)])
(put 'follow-pos-visible 'byte-optimizer 'byte-compile-inline-expand)
#@46 Non-nil if the follower WINDOWS are aligned.
(defalias 'follow-windows-aligned-p #[(win-start-end) "\302\212\303	@@!b\210n\204 \304\305	@@\"\210`\303	@@!=)\2039 	A\2039 	@AA@	A@A@=	A\202 )\207" [res win-start-end t window-start vertical-motion 0] 3 (#$ . 21481)])
(put 'follow-windows-aligned-p 'byte-optimizer 'byte-compile-inline-expand)
#@58 Non-nil when the window-point is visible in all windows.
(defalias 'follow-point-visible-all-windows-p #[(win-start-end) "\305\2035 	\2035 \306	@@!	@@	\n	\236A\f@Y\205- \fA@W\206- \307\f8,	A\202 )\207" [res win-start-end win pos wstart-wend-bend t window-point 2] 3 (#$ . 21835)])
#@63 Make sure that the start of WIN starts at a full screen line.
(defalias 'follow-update-window-start #[(win) "\212\301!b\210n?\205# \302\303\"\210`\301!=?\205# \302\304\"\210\305`\306#)\207" [win window-start vertical-motion 0 1 set-window-start noforce] 4 (#$ . 22134)])
#@83 Select and return a window, if DEST is visible in it.
Return the selected window.
(defalias 'follow-select-if-visible #[(dest win-start-end) "\305\204; 	\203; \n	@@		\236A\f@Y\205) \fA@W\206) \306\f8,\2035 	@@\307!\210	A\202 )\207" [win win-start-end dest pos wstart-wend-bend nil 2 select-window] 3 (#$ . 22416)])
#@54 Select and return a window, if end is visible in it.
(defalias 'follow-select-if-end-visible #[(win-start-end) "\303\204; 	\203; d\304	@8=\2035 \305	@8\2035 \306	@@!\211\205) dd\n^=)\2035 	@@\307!\210	A\202 )\207" [win win-start-end end nil 2 3 window-end select-window] 4 (#$ . 22751)])
#@72 Select and return a window with DEST, if WINDOWS are redrawn from top.
(defalias 'follow-select-if-visible-from-first #[(dest windows) "\304\211\212\305\n@!b\210\306\307\n@\"\210`W\204 \310\213\210)	\203# \311	!\210	*\207" [end-pos-end-p win windows dest nil window-start vertical-motion 0 ((byte-code "\2041 	\2031 \304	@`\305#\210\306	@!\211@b\210\nA@\204$ `W\203+ 	@\211\202 	A\202  \304\207" [win windows end-pos-end-p dest set-window-start noforce follow-calc-win-end] 5)) select-window] 3 (#$ . 23053)])
#@369 Reposition the WINDOWS around WIN.
Should the point be too close to the roof we redisplay everything
from the top. WINDOWS should contain a list of windows to
redisplay, it is assumed that WIN is a member of the list.
Should WINDOWS be nil, the windows displaying the
same buffer as WIN, in the current frame, are used.
Should WIN be nil, the selected window is used.
(defalias 'follow-redisplay #[(&optional windows win) "\204 \302 	\204 \303!\304	\305	\"\"\207" [win windows selected-window follow-all-followers follow-downward follow-calculate-first-window-start] 5 (#$ . 23580)])
#@40 Redisplay all WINDOWS starting at POS.
(defalias 'follow-downward #[(windows pos) "\205 \302@	\"\210\303@!@A\211\204 \304\207" [windows pos set-window-start follow-calc-win-end nil] 4 (#$ . 24177)])
#@176 Calculate the start of the first window.

WINDOWS is a chain of windows to work with.  WIN is the window
to recenter around.  It is assumed that WIN starts at position
START.
(defalias 'follow-calculate-first-window-start #[(windows &optional win start) "\204 \306 	\204 \307!\310\n	#\211@\203 A\202\205 \311\nA#\211	U\203E \312C\313\314!\203? \f\203? \315\316\"\210)A\202\204 \f	W\203i \317C\313\314!\203^ \f\203^ \315\316\"\210)\320\nA	$\202\204 \321C\313\314!\203| \f\203| \315\316\"\210)\322\nA	$))\207" [win start windows guess win-start args selected-window window-start follow-estimate-first-window-start follow-calc-win-start "exact" boundp follow-debug apply message "above" follow-calculate-first-window-start-from-above "below" follow-calculate-first-window-start-from-below] 6 (#$ . 24391)])
#@169 Estimate the position of the first window.

Returns (EXACT . POS). If EXACT is non-nil, POS is the starting
position of the first window. Otherwise it is a good guess.
(defalias 'follow-estimate-first-window-start #[(windows win start) "\305	\"@\306\212\fb\210\307\310	\"\210\203- \307\311\312@!Z@\"\210n\204& \306A\211\204 \n`+B\207" [windows win exact pred start follow-split-followers nil vertical-motion 0 1 window-height] 5 (#$ . 25229)])
(defalias 'follow-calculate-first-window-start-from-above #[(windows guess win start) "\212\306\211\211b\210\n\2043 \307\310\f@\"\310U\204 \311d\202\n \312\f`#\211Y\203\n \311`\202\n ,\207" [res win-start done guess windows win nil vertical-motion 1 t follow-calc-win-start start] 5])
(defalias 'follow-calculate-first-window-start-from-below #[(windows guess &optional win start) "\206 \306 	\206 \307!\212\310\211\211b\210\311\312@\"\210`\f\204] \311\313@\"\313U\2048 \314e\202\" \315`#\211	U\203L \314`\202\" 	W\203X \314\211\202# `\202\" \n,\207" [win start res win-start done guess selected-window window-start nil vertical-motion 0 -1 t follow-calc-win-start windows] 5])
#@164 Make sure windows displaying the end of a buffer aren't recentered.

This is done by reading and rewriting the start position of
non-first windows in Follow Mode.
(defalias 'follow-avoid-tail-recenter #[(&rest rest) "\205a p\306\307 !\211\310\310\310\311\n!?\205_ \312!\313!q\210\313!\314!B\211\f\235\203L \315\316!\203Q \203Q d=\203Q \317\"\210\202Q \fB\320\321\322#\211\n=\203 	q.\207" [follow-avoid-tail-recenter-p orig-buffer top win who start frame-first-window selected-frame nil window-minibuffer-p window-start window-buffer window-frame boundp follow-mode set-window-start next-window not t pair] 5 (#$ . 26408)])
#@73 Ensure that the windows in Follow mode are adjacent after each command.
(defalias 'follow-post-command-hook #[nil "\306\307 \203  \310\311!\203\277\311J\203\277\312\313!\203\277\313K\311J!\203\277p\314 \315	!q\2109\2035 \316N\2047 \317\310\305!\203\270\203\270\320	!\204\270	\211:\203U \321:!\204Y \314 :\322\323:!!\211;\317<\317=\315:!><\204\232 	\203\232 \315	!>=\203\207 	=B=\324	\325\"\211;=\203o \306\211<\203t =\237.=`?=@\212\326	!b\210n?\205\313 \327\330	\"\210`\326	!=?\205\313 \327\331	\"\210\332	`\333#)\210)=\211==\306\f@AA\203=\203@\203=@@@@=\205 \326=@!@@A@=A=A=@A@\202\333 A\205=?\205@?+\203%\f\202Y\317\314 BC=\203N\334=@!\210=@\326 \335 BBCBC=A\211=\2041\334B!\210C\237\211*)\211CC\306A\212\326C@@!b\210n\204\201\327\330C@@\"\210`\326C@@!=A)A\203\244CA\203\244C@AA@CA@A@=ACAC\202\202A*D?	CCE	C\236AFEF@Y\205\321EFA@W\206\321\336F8,GD\203\336G\204\340\317\317HI\203Pp\322\337 !\211;\317J\317K\317L\320;!?\205M\326	!K\315	!q\210\315	!\323	!B\211LJ\235\2037\310\305!\203>\203>dK=\203>\332	K\"\210\202>LJBJ\324	\325\306#\211;=\203\nq.\210)M\204\355?d=\203\333G\203\206D\203\206\340>\204\206\341CN\310\342!\203\202\"\203\202\343\344N\"\210)\202\322\345C!\203\260\346CN\310\342!\203\242\"\203\242\343\344N\"\210)\306G\317D?b\210\202\322\347CN\310\342!\203\305\"\203\305\343\344N\"\210)\334\350=!@!\210?b\210\317G\317D\202\322G\203\376D\203\376\351CN\310\342!\203\372\"\203\372\343\344N\"\210)\202\322\352?C\"\203'\353CN\310\342!\203\"\203\343\344N\"\210)\306G?b\210\202\322G\203E\354CN\310\342!\203A\"\203A\343\344N\"\210)\202\322?e=\203\203\355CN\310\342!\203a\"\203a\343\344N\"\210)\334=@!\210?b\210\332\314 e\"\210\356=!C\317\306G\317D\202\322\357?=\"\203\266\360CN\310\342!\203\241\"\203\241\343\344N\"\210)\306G\306D\361=\211@\"\210?b\210\202\322\362CN\310\342!\203\313\"\203\313\343\344N\"\210)\317G\317D	\314 =\204\355\363	!O\332	\326	!\317#\210\364	O\"\210)G\2040?	CCE	C\236AFEF@Y\205EFA@W\206\336F8,\2040\365\330!\210\366 \210\356=!C\317\317DM\204\332D\204\211CC\306A\212\326C@@!b\210n\204`\327\330C@@\"\210`\326C@@!=A)A\203\203CA\203\203C@AA@CA@A@=ACAC\202aA*\203\332CC\306AA\203\324C\203\324\363C@@!C@@CCE	C\236AFEF@Y\205\311EFA@W\206\311\336F8,ACAC\202\220A*\204#\317M\361=\314 \"\210\356=!C\317?	CCE	C\236AFEF@Y\205EFA@W\206\336F8,\204#\352?C\"\210?b\210\310\367!\203.\367J\204:\312\370!\203C\370K \203C\371\314 =C#\210\317HI\203\263p\322\337 !\211;\317J\317K\317L\320;!?\205\260\326	!K\315	!q\210\315	!\323	!B\211LJ\235\203\232\310\305!\203\241\203\241dK=\203\241\332	K\"\210\202\241LJBJ\324	\325\306#\211;=\203f\nq.\210.\202\273\366 \210\nq\210*\317\211\207" [follow-inside-post-command-hook win orig-buffer this-command follow-windows-start-end-cache follow-mode t input-pending-p boundp current-mouse-event fboundp button-event-p selected-window window-buffer follow-mode-use-cache nil window-minibuffer-p window-live-p frame-first-window window-frame next-window not window-start vertical-motion 0 1 set-window-start noforce select-window follow-calc-win-end 2 selected-frame (backward-delete-char delete-backward-char backward-delete-char-untabify kill-region) "Max: same" follow-debug apply message follow-select-if-end-visible "Max: end visible" "Max: default" reverse "same" follow-select-if-visible "visible" "visible in selected." "min" follow-windows-start-end follow-select-if-visible-from-first "Below first" follow-redisplay "None" window-point set-window-point sit-for follow-avoid-tail-recenter mark-active region-active-p follow-maximize-region testwin top done windows buffer dest cache res orig-win win-start-end aligned pos wstart-wend-bend visible rest follow-avoid-tail-recenter-p who start pair follow-internal-force-redisplay args p] 6 (#$ . 27064)])
#@66 Make a highlighted region stretching multiple windows look good.
(defalias 'follow-maximize-region #[(win windows win-start-end) "\306	\"\211@\nA\307\203+ @\n\236\310@A@\3118S]\"\210A\211\204 \f\205C \310\f@\f@\n\236A@\"\210\fA\211\204/ \307,\207" [windows win all pred succ data follow-split-followers nil set-window-point 2 win-start-end] 6 (#$ . 31167)])
(byte-code "\301\302!\2031 \303\304\305\306\307@!!\310\306\311\307@!P!\312BB\313BBB!\210A\211\204 )\314\315M\210\202_ \301\316!\203_ \317\304\305\306\307@!!\310\306\311\307@!P!\320BB\321BBB!\210A\211\2049 )\322\323M\210\324\325\326\327\330$\210\331\325\330\"\207" [cmds fboundp scroll-bar-drag (scroll-bar-drag scroll-bar-drag-1 scroll-bar-scroll-down scroll-bar-scroll-up scroll-bar-set-window-start) eval defadvice intern symbol-name after "follow-" (activate) ("Adviced by Follow Mode." (follow-redraw-after-event (ad-get-arg 0))) follow-redraw-after-event #[(event) "\300\301\302\217\207" [nil (byte-code "\304 \305K	!@\306\307\310\n!!\236\211\205$ A\205$ \311\n!\210\312 \210\311!+\207" [orig-win event win fmode selected-window event-start follow-mode buffer-local-variables window-buffer select-window follow-redisplay] 5) ((error))] 3 "Adviced by Follow mode."] scrollbar-vertical-drag (scrollbar-line-down scrollbar-line-up scrollbar-page-down scrollbar-page-up scrollbar-to-bottom scrollbar-to-top scrollbar-vertical-drag) (activate) ("Adviced by `follow-mode'." (follow-xemacs-scrollbar-support (ad-get-arg 0))) follow-xemacs-scrollbar-support #[(window) "\300\301\302\217\207" [nil (byte-code ":\203 @\303\304\305!!\236\306 \211\205& \nA\205& \307!\210\310 \210\307	!*\207" [window orig-win fmode follow-mode buffer-local-variables window-buffer selected-window select-window follow-redisplay] 5) ((error))] 3 "Redraw windows showing the same buffer as shown in WINDOW.\nWINDOW is either the dragged window, or a cons containing the\nwindow as its first element. This is called while the user drags\nthe scrollbar.\n\nWINDOW can be an object or a window."] ad-add-advice set-process-filter (follow-set-process-filter nil t (advice lambda nil "Ensure process output will be displayed correctly in Follow Mode buffers.\n\nFollow Mode inserts its own process filter to do its\nmagic stuff before the real process filter is called." (if follow-intercept-processes (progn (setq follow-process-filter-alist (delq (assq (ad-get-arg 0) follow-process-filter-alist) follow-process-filter-alist)) (follow-tidy-process-filter-alist) (cond ((eq (ad-get-arg 1) t)) ((eq (ad-get-arg 1) nil) (ad-set-arg 1 'follow-generic-filter)) (t (setq follow-process-filter-alist (cons (cons (ad-get-arg 0) (ad-get-arg 1)) follow-process-filter-alist)) (ad-set-arg 1 'follow-generic-filter))))))) before nil ad-activate] 9)
#@68 Call original `set-process-filter' without the Follow mode advice.
(defalias 'follow-call-set-process-filter #[(proc filter) "\302\303\304\305#\210\306\303!\210\303	\"\307\303\304\305#\210\306\303!\210\207" [proc filter ad-disable-advice set-process-filter before follow-set-process-filter ad-activate ad-enable-advice] 5 (#$ . 33981)])
(byte-code "\300\301\302\303\304$\210\305\301\304\"\207" [ad-add-advice process-filter (follow-process-filter nil t (advice lambda nil "Return the original process filter, not `follow-generic-filter'." (cond ((eq ad-return-value 'follow-generic-filter) (setq ad-return-value (cdr-safe (assq (ad-get-arg 0) follow-process-filter-alist))))))) after nil ad-activate] 5)
#@64 Call original `process-filter' without the Follow mode advice.
(defalias 'follow-call-process-filter #[(proc) "\301\302\303\304#\210\305\302!\210\302!\306\302\303\304#\210\305\302!\210\207" [proc ad-disable-advice process-filter after follow-process-filter ad-activate ad-enable-advice] 5 (#$ . 34692)])
#@58 Remove old processes from `follow-process-filter-alist'.
(defalias 'follow-tidy-process-filter-alist #[nil "\304 \305\211\203) \306@@!\307>\204\" @@\n>\203\" @	BA\211\204 	\211+\207" [follow-process-filter-alist new ps alist process-list nil process-status (exit signal closed nil)] 4 (#$ . 35003)])
#@134 Intercept all active processes.

This is needed so that Follow Mode can track all display events in the
system.  (See `follow-mode')
(defalias 'follow-intercept-process-output #[nil "\302 \211\203  \303@!\304=\204 \305@\303@!\"\210A\211\204 )\306\211\207" [list follow-intercept-processes process-list process-filter follow-generic-filter set-process-filter t] 5 (#$ . 35322) nil])
#@388 Stop Follow Mode from spying on processes.

All current spypoints are removed and no new will be added.

The effect is that Follow mode won't be able to handle buffers
connected to processes.

The only reason to call this function is if the Follow mode spy filter
would interfere with some other package.  If this happens, please
report this using the `follow-submit-feedback' function.
(defalias 'follow-stop-intercept-process-output #[nil "\303 \210\304 \211\203, \305@!\306=\203% \307@@	\236\243\"\210\310@	\236	\"A\211\204\n )\311\211\207" [list follow-process-filter-alist follow-intercept-processes follow-tidy-process-filter-alist process-list process-filter follow-generic-filter follow-call-set-process-filter delq nil] 5 (#$ . 35720) nil])
#@72 Process output filter for process connected to buffers in Follow mode.
(defalias 'follow-generic-filter #[(proc output) "p\306 \307\n!\211\205 \310	!=\203 	\202 \311\312\"\211\205& \f	=?\f\205. \313\f!+\n,\236\243\211-\203E -\n.\"\210\202\242 \203\242 q\210\314\315\n!!\204[ \315\n!d\316\223\210`\315\n!U\317\320!\205h \320J/012\316/\212\315\n!b\210\321.!\210\315\n!`\316\223\210)2\203\220 \315\n!b\210\317\320!\203\235 \322K\3201\"\2100/+)\203&\f\203&\323\f!\203&q\210\317\324!\203&\203&\325\f!\210\326\f!3\3273!4\313\f!5\330\f!6+5=\204)\331C7\317\332!\203\365 \203\365 \333\3347\"\210)\335\f+\"\210\3363\f\"\210\3273!4\33764\"\2106b\210\f\306 =\203 \335\f5\"\210\3273!4\202\222\3406!\203I\341C7\317\332!\203E\203E\333\3347\"\210)\202\222\34263\"\203|\343C7\317\332!\203g\203g\333\3347\"\210)\3363\211@\"\2106b\210\3273!4\202\222\344C7\317\332!\203\221\203\221\333\3347\"\210)`\306 448\f4\236A989@Y\205\27289A@W\206\272\34598,\204\314\204\314\346\347!\210\3273!4:\204 44\312;\212\3134@@!b\210n\204\367\350\3474@@\"\210`\3134@@!=;);\2034A\2034@AA@4A@A@=;4A4\202\370;*\204%\3363!\210,\203.\325	!\210p=\203=\351!\203=q\210.\316<=\205P\352 ?\205P\346\347!\207" [old-buffer orig-win proc buf win return-to-orig-win selected-window process-buffer window-buffer get-buffer-window t window-start marker-buffer process-mark nil boundp deactivate-mark insert-before-markers set window-live-p follow-mode select-window follow-all-followers follow-windows-start-end window-point "filter: Moved" follow-debug apply message set-window-start follow-redisplay follow-select-if-visible pos-visible-in-window-p "filter: Visible in window" follow-select-if-visible-from-first "filter: Seen from first" "filter: nothing" 2 sit-for 0 vertical-motion buffer-name input-pending-p orig-window-start follow-process-filter-alist filter output buffer-read-only old-buffer-read-only odeactivate moving windows win-start-end new-window-start new-window-point args pos wstart-wend-bend follow-internal-force-redisplay res follow-windows-start-end-cache follow-avoid-tail-recenter-p] 4 (#$ . 36485)])
(byte-code "\300\301!\203 \302\301\303\"\210\300\207" [boundp window-size-change-functions add-hook follow-window-size-change] 3)
#@51 Redraw all windows in FRAME, when in Follow mode.
(defalias 'follow-window-size-change #[(frame) "?\205  \306\307 p\310 \306\211\311!\210\312\216\313\314!.\207" [follow-inside-post-command-hook buf windows orig-frame orig-buffer orig-window nil selected-window selected-frame select-frame ((byte-code "\303!\210	q\210\304\n!\207" [orig-frame orig-buffer orig-window select-frame select-window] 2)) walk-windows #[(win) "\306!\211\n>?\2059 	q\210\307\303!\2059 \2059 \310!\f>\203/ \311!\210\312 \210\313 \2024 \314\f\"\210	\nB\211\207" [win buf buffers follow-mode windows orig-window window-buffer boundp follow-all-followers select-window follow-post-command-hook selected-window follow-redisplay] 4] buffers frame] 6 (#$ . 38837)])
(byte-code "\203 \302\303\304\305\306$\210\307\303\306\"\210	\203  \310\311!\203  \312\311\313\314#\210	\2030 \302\315\316\305\306$\210\307\315\306\"\210	\203F \317\320!\203F \302\320\321\305\306$\210\307\320\306\"\210\322\323!\207" [follow-emacs-version-xemacs-p follow-avoid-tail-recenter-p ad-add-advice isearch-done (follow-isearch-done nil t (advice lambda nil (if (and (boundp 'follow-mode) follow-mode (boundp 'isearch-window-configuration) isearch-window-configuration (boundp 'isearch-slow-terminal-mode) (not isearch-slow-terminal-mode)) (let ((buf (current-buffer))) (setq isearch-window-configuration (current-window-configuration)) (set-buffer buf))))) before nil ad-activate boundp window-scroll-functions add-hook follow-avoid-tail-recenter t sit-for (follow-sit-for nil t (advice lambda nil "Adviced by Follow Mode.\n\nAvoid to recenter windows displaying only the end of a file as when\ndisplaying a short file in two windows, using Follow Mode." (follow-avoid-tail-recenter))) fboundp move-overlay (follow-move-overlay nil t (advice lambda nil "Adviced by Follow Mode.\nDon't recenter windows showing only the end of a buffer.\nThis prevents `mouse-drag-region' from messing things up." (follow-avoid-tail-recenter))) provide follow] 5)
