;ELC   
;;; compiled by rms@mole.gnu.ai.mit.edu on Fri Apr 12 02:11:56 1996
;;; from file /home/fsf/rms/e19/lisp/follow.el
;;; emacs version 19.30.96.2.
;;; bytecomp version FSF 2.10
;;; optimization is on.
;;; this file uses opcodes which do not exist in Emacs 18.

(if (and (boundp 'emacs-version)
	 (or (and (boundp 'epoch::version) epoch::version)
	     (string-lessp emacs-version "19.29")))
    (error "`follow.el' was compiled for Emacs 19.29 or later"))


#@47 Variable indicating if Follow mode is active.
(defvar follow-mode nil (#$ . 470))
#@46 *Hooks to run when follow-mode is turned on.
(defvar follow-mode-hook nil (#$ . -558))
#@47 *Hooks to run when follow-mode is turned off.
(defvar follow-mode-off-hook nil (#$ . -651))
#@37 The current version of Follow mode.
(defvar follow-mode-version "follow.el (Release 1.6)" (#$ . 749))
#@37 *Minor mode keymap for Follow mode.
(defvar follow-mode-map nil (#$ . -857))
#@134 *Text shown in the mode line when Follow mode is active.  
Defaults to " Follow".  Examples of other values
are " Fw", or simply "".
(defvar follow-mode-line-text " Follow" (#$ . -941))
#@59 *Non-nil activates Follow mode whenever a file is loaded.
(defvar follow-auto nil (#$ . -1133))
#@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.
(defvar follow-mode-prefix "." (#$ . -1236))
#@57 *When non-nil, Follow Mode will monitor process output.
(defvar follow-intercept-processes t (#$ . -1480))
#@36 Non-nil when running under XEmacs.
(defvar follow-emacs-version-xemacs-p (string-match "XEmacs" emacs-version) (#$ . 1593))
#@700 *When non-nil, patch emacs so that tail windows won't be recentered.

A "tail window" is a window which 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) (#$ . -1724))
#@366 List of commands which 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 (quote (next-line previous-line forward-char backward-char)) (#$ . 2518))
#@38 *Non-nil when debugging Follow mode.
(defvar follow-debug nil (#$ . -2997))
#@53 True when Follow mode should redisplay the windows.
(defvar follow-internal-force-redisplay nil (#$ . 3079))
#@64 The original filters for processes intercepted by Follow mode.
(defvar follow-process-filter-alist nil (#$ . 3194))
#@46 The menu visible when Follow mode is active.
(defvar follow-active-menu nil (#$ . 3316))
#@51 The menu visible when Follow mode is deactivated.
(defvar follow-deactive-menu nil (#$ . 3411))
#@93 Non-nil when inside Follow modes `post-command-hook'. 
Used by `follow-window-size-change'.
(defvar follow-inside-post-command-hook nil (#$ . 3513))
#@42 Cache used by `follow-window-start-end'.
(defvar follow-windows-start-end-cache nil (#$ . 3668))
#@65 Sumbit feedback on Follow mode to the author: andersl@csd.uu.se
(defalias 'follow-submit-feedback #[nil "!! ȉͰ&" [require reporter y-or-n-p "Do you really want to submit a report on Follow mode? " reporter-submit-bug-report "Anders Lindgren <andersl@csd.uu.se>" follow-mode-version (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\n" "Even though I know you are busy, I thought you might " "want to know...\n\n"] 11 (#$ . 3771) nil])
#@63 Like message, but only active when `follow-debug' is non-nil.
(defalias 'follow-debug-message #[(&rest args) "! 	 \f\"" [boundp follow-debug apply message args] 3 (#$ . 4526)])
(byte-code "#\f   ###########\f#\"! K!%&'\" \"-..! .\"- K.-$K.'B$  'B# \f'B#- 9KJ!K9\")M)@ A @ \fBABABCC@D E #CAC)" [put follow-debug-message byte-optimizer byte-compile-inline-expand follow-mode-map make-sparse-keymap map define-key "" follow-scroll-up "" 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 follow-mode-prefix mapcar #[(pair) "@A\n\"\"*" [pair new old mapcar #[(key) "	\n#" [define-key follow-mode-map key new] 4] where-is-internal global-map] 5] ((end-of-buffer . follow-end-of-buffer) (fkey-end-of-buffer . follow-end-of-buffer)) follow-emacs-version-xemacs-p "Follow" 0 nil id count menumap #[(item) "A 	\\	\"!!#=( #" [item count 1 intern format "separator-%d" id define-key menumap 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] last tools-map sequencep #[(x) " 	" [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]) menu set-buffer-menubar current-menubar add-submenu ("Tools") follow-menu-filter #[(menu) " 	" [follow-mode menu (["Activate          " follow-mode t])] 1] follow-mode minor-mode-map-alist follow-cache-command-list cmds follow-mode-use-cache t] 6)
#@61 Turn on Follow mode. Please see the function `follow-mode'.
(defalias 'turn-on-follow-mode #[nil "!" [follow-mode 1] 2 (#$ . 7387) nil])
#@62 Turn off Follow mode. Please see the function `follow-mode'.
(defalias 'turn-off-follow-mode #[nil "!" [follow-mode -1] 2 (#$ . 7533) nil])
#@1457 Minor mode which 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 beeing 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) "!#	 	? !V) 	)  	V V !; L #!P #!e 	?e e  !)" [make-local-variable follow-mode put permanent-local t follow-mode-orig arg prefix-numeric-value 0 follow-intercept-processes 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 (#$ . 7684) "P"])
(byte-code "! K\" \f \fB#" [fboundp add-minor-mode follow-mode follow-mode-line-text minor-mode-alist (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 " !" [follow-auto follow-mode t] 2 (#$ . 9882)])
#@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) "!\n 	 ! !)ĉ !@!\nd=6 \"L @!\nb[!@`\"*" [boundp follow-mode scroll-up arg t follow-internal-force-redisplay follow-all-followers windows window-end reverse end signal end-of-buffer nil select-window vertical-motion next-screen-context-lines set-window-start] 4 (#$ . 10048) "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) "!\n 	 ! !) !@@!\ne=7 \"b !\nb!ZZ[!`\"\nbZ!ԉ+" [boundp follow-mode scroll-up arg scroll-down follow-all-followers windows reverse win window-start start signal beginning-of-buffer nil select-window vertical-motion window-height next-screen-context-lines 1 set-window-start t follow-internal-force-redisplay] 4 (#$ . 10744) "P"])
#@794 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) "   !=?  !W   7 ! \"!*" [arg selected-window frame-first-window selected-frame prefix-numeric-value 0 window-start start other delete-other-windows split-window-horizontally other-window 1 set-window-start t follow-internal-force-redisplay follow-mode] 3 (#$ . 11508) "P"])
#@69 Show BUFFER in all windows in the current Follow Mode window chain.
(defalias 'follow-switch-to-buffer #[(buffer) "  \n \n@!!\nA\n !*" [selected-window follow-all-followers windows orig-window select-window switch-to-buffer buffer] 3 (#$ . 12688) "BSwitch to Buffer: "])
#@71 Show BUFFER in all windows on this frame.
Defaults to current buffer.
(defalias 'follow-switch-to-buffer-all #[(&optional buffer) " p !\n! )" [buffer selected-window orig-window walk-windows #[(win) "	!!" [select-window win switch-to-buffer buffer] 2] select-window follow-redisplay] 2 (#$ . 12983) (list (read-buffer "Switch to Buffer: " (current-buffer)))])
#@219 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 "!\n 	 ! " [boundp follow-mode 1 follow-switch-to-buffer-all] 2 (#$ . 13368) nil])
#@49 Select the next window showing the same buffer.
(defalias 'follow-next-window #[nil " !A \n@! \")" [follow-split-followers follow-all-followers succ select-window error "%s" "No more windows"] 4 (#$ . 13738) nil])
#@53 Select the previous window showing the same buffer.
(defalias 'follow-previous-window #[nil " !@ \n@! \")" [follow-split-followers follow-all-followers pred select-window error "%s" "No more windows"] 4 (#$ . 13971) nil])
#@63 Select the first window in the frame showing the same buffer.
(defalias 'follow-first-window #[nil " @!" [select-window follow-all-followers] 2 (#$ . 14212) nil])
#@62 Select the last window in the frame showing the same buffer.
(defalias 'follow-last-window #[nil " !@!" [select-window reverse follow-all-followers] 3 (#$ . 14384) nil])
#@233 Recenter the middle window around the point,
and 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) ", `!Y  \nb!*  \nb!ǉ*`	 GZͥ8!	b +" [arg prefix-numeric-value p 0 follow-first-window recenter follow-last-window t follow-internal-force-redisplay dest follow-all-followers windows 1 2 win select-window] 4 (#$ . 14565) "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 "! " [sit-for 0 follow-redisplay] 2 (#$ . 15119) nil])
#@268 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) " ` \n!@!\" \n!!\" \n!@!	b!*" [follow-all-followers pos followers arg select-window reverse follow-select-if-end-visible follow-windows-start-end end-of-buffer] 3 (#$ . 15474) "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) "\n !  !!	!P P !=< 	B	\"=! Ή& 	-" [testwin window-live-p selected-window frame-first-window window-frame top win nil done windows window-buffer buffer next-window not t] 4 (#$ . 16000)])
#@158 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) "  \f@= \f@B\fA\n \fA)B" [win selected-window nil pred windows] 3 (#$ . 16484)])
#@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) "! \n\"K\n!!U \fD \f\\D)\n'  ȉ\n\f\n7 \n! b ZnQ !U?_ `d}!U)?\n`\n)D\fp \f!+" [follow-emacs-version-xemacs-p window-end win t end point-max window-buffer 1 nil selected-window buffer-end-p height orig-win select-window window-start window-height vertical-motion] 5 (#$ . 16806)])
#@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) "\n \n@= \n@!\n@#\n@D \"K!!U: D@ \\D) J  Z ! b Znt !U? `d}!U)?`)D !+)@\n@	#\nA )" [nil start windows win window-start set-window-start pos noforce follow-emacs-version-xemacs-p window-end t end point-max window-buffer 1 selected-window buffer-end-p height orig-win select-window window-height vertical-motion] 6 (#$ . 17415)])
#@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) "	, \f, \n, \f@\n@@=\" \f@!\n@A@=\fA\nA 7 \f?7 \n?*" [t follow-windows-start-end-cache cache res windows window-start] 2 (#$ . 18027)])
(put (quote follow-cache-valid-p) (quote byte-optimizer) (quote byte-compile-inline-expand))
#@72 Force `follow-windows-start-end' to recalculate the end of the window.
(defalias 'follow-invalidate-cache #[nil "" [nil follow-windows-start-end-cache] 2 (#$ . 18460)])
(put (quote follow-invalidate-cache) (quote byte-optimizer) (quote 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) "\n\f. . . @@@=$ @!@A@=AA \f9 ?9 ?+? \n 	c @!@  BB	B	AJ !	*" [windows t follow-windows-start-end-cache cache res window-start nil selected-window orig-win win-start-end select-window follow-calc-win-end] 4 (#$ . 18735)])
#@37 Non-nil when POS is visible in WIN.
(defalias 'follow-pos-visible #[(pos win win-start-end) "	A\n@Y \nA@W \n8)" [win win-start-end wstart-wend-bend pos 2] 2 (#$ . 19142)])
(put (quote follow-pos-visible) (quote byte-optimizer) (quote byte-compile-inline-expand))
#@46 Non-nil if the follower WINDOWS are alinged.
(defalias 'follow-windows-aligned-p #[(win-start-end) "@@!bn @@\"`@@!=)	9 A9 @AA@A@A@=A 	)" [t res window-start win-start-end vertical-motion 0] 3 (#$ . 19422)])
(put (quote follow-windows-aligned-p) (quote byte-optimizer) (quote 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) "	9 \n9 \n@@!\n@@\n\f\nA@Y1 A@W1 8,\nA 	)" [t res win-start-end window-point win pos wstart-wend-bend 2] 3 (#$ . 19758)])
#@63 Make sure that the start of WIN starts at a full screen line.
(defalias 'follow-update-window-start #[(win) "	!bn?# 	\"`	!=?# 	\"	`#)" [window-start win vertical-motion 0 1 set-window-start noforce] 4 (#$ . 20034)])
#@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) "	; \n; \n@@\n	\nA\f@Y) \fA@W) 8,5 \n@@	!\nA 	)" [nil win win-start-end dest pos wstart-wend-bend 2 select-window] 3 (#$ . 20271)])
#@54 Select and return a window, if end is visible in it.
(defalias 'follow-select-if-end-visible #[(win-start-end) "	4 \n4 d\n@8=. \n@8. dd\n@@!^=. \n@@	!\nA 	)" [nil win win-start-end 2 3 window-end select-window] 4 (#$ . 20574)])
#@72 Select and return a window with DEST, if WINDOWS are redrawn from top.
(defalias 'follow-select-if-visible-from-first #[(dest windows) "\f@!b\f@\"`W ȋ)\n$ \n!\n*" [nil end-pos-end-p win window-start windows vertical-motion 0 dest ((byte-code "2 	2 	@`#	@!@bA@% `W, 	@ 	A  " [win windows set-window-start noforce follow-calc-win-end end-pos-end-p dest] 5)) select-window] 3 (#$ . 20825)])
#@370 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) "  \n !\n\n\"\"" [win selected-window windows follow-all-followers follow-downward follow-calculate-first-window-start] 5 (#$ . 21263)])
#@40 Redisplay all WINDOWS starting at POS.
(defalias 'follow-downward #[(windows pos) " @\n\"@!@A ć" [windows set-window-start pos follow-calc-win-end nil] 4 (#$ . 21843)])
#@177 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) "  \n !\n#@! A A#\nUL C\n!E \fE \n\")A \nWt C\n!h \fh \n\")A\n$ C\n! \f \n\")A\n$))" [win selected-window start window-start follow-estimate-first-window-start windows guess follow-calc-win-start win-start "exact" args boundp follow-debug apply message "above" follow-calculate-first-window-start-from-above "below" follow-calculate-first-window-start-from-below] 6 (#$ . 22034)])
#@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) "	\n\"@b\n\". @!Z@\"n' A \f`+B" [follow-split-followers windows win nil exact pred start vertical-motion 0 1 window-height] 5 (#$ . 22762)])
(defalias 'follow-calculate-first-window-start-from-above #[(windows guess win start) "\fb6 @\"U  d\n `\n#Y\n `\n 	," [nil res win-start done guess vertical-motion 1 windows t follow-calc-win-start win start] 5])
(defalias 'follow-calculate-first-window-start-from-below #[(windows guess &optional win start) "  \n !ĉb@\"`f @\"U= e% `#\nUS `% \nWa ͉' `% ," [win selected-window start window-start nil res win-start done guess vertical-motion 0 windows -1 t follow-calc-win-start] 5])
#@164 Make sure windows displaying the end of a buffer aren't recentered.

This is done by reading and rewriting the start positon of 
non-first windows in Follow Mode.
(defalias 'follow-avoid-tail-recenter #[(&rest rest) "i p !	\f!?g !!q!!B	R !Y Y d=Y \"Y 	B#\f= 	q." [follow-avoid-tail-recenter-p orig-buffer frame-first-window selected-frame top win nil who start pair window-minibuffer-p window-start window-buffer window-frame boundp follow-mode set-window-start next-window not t] 5 (#$ . 23757)])
#@73 Ensure that the windows in Follow mode are adjecent after each command.
(defalias 'follow-post-command-hook #[nil "   !/J/!/KJ!/p 	!q9: N= !%%!%^ !b  !!!  != B\"=y ~ .`@!bn? \"`!=? \"`#))\"##%%\"%@\"@@=@!\"@A@=#A\"A\" #3?3\"?+<q $%e@!@  BB%B%AH$!%*)%%#%@@!bn%@@\"`%@@!=#)#%A%@AA@%A@A@=#%A%#*(%%)%A*)*@Y)*A@W*8,,(,-.wp	 !012!?t!1!q!!B20[!bbd1=b1\"b20B0#=!	q.)3/d=,(>C6!76\")%!C6!76\"),(bC6!76\")!@!b,(,&(&C6!\"7\"6\")%\"Q@ C6!F7F6\"),b,qA C6!m7m6\")e=B C6!76\")@!b e\"C !%,(D \"E C6!76\"),(F @\"bG C6!76\"),( =/H !I!#J I\"),|%%)%A*)*@Y_)*A@W_*8,|K !L  C !%(3*(%%#%@@!bn%@@\"`%@@!=#)#%A%@AA@%A@A@=#%A%#**%%##$%$H %@@!%@@%%)%A*)*@Y)*A@W*8,#%A%#*{3F  \"C !%%%)%A*)*@Yl)*A@Wl*8,{%\"bÁM !M JŁN !N K O  %#-. p	 !012!?!1!q!!B20!d1=1\"20B0#=	q..*L  	q*͉" [t follow-inside-post-command-hook input-pending-p boundp current-mouse-event fboundp button-event-p selected-window win orig-buffer window-buffer this-command follow-mode-use-cache nil follow-windows-start-end-cache follow-mode window-minibuffer-p testwin window-live-p frame-first-window window-frame top done windows buffer next-window not dest window-start vertical-motion 0 1 set-window-start noforce cache res orig-win win-start-end select-window follow-calc-win-end aligned pos wstart-wend-bend 2 visible rest follow-avoid-tail-recenter-p selected-frame who start pair follow-internal-force-redisplay (backward-delete-char delete-backward-char backward-delete-char-untabify kill-region) "Max: same" args 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 p set-window-point sit-for follow-avoid-tail-recenter mark-active region-active-p follow-maximize-region] 6 (#$ . 24326)])
#@86 Make a highlighted region stretching multiple windows look good
when in Follow mode.
(defalias 'follow-maximize-region #[(win windows win-start-end) "	\n\"@A\f0 \f@\f@A@8Z]\"\fA H @@A@\"A4 ," [follow-split-followers windows win all pred succ nil data win-start-end set-window-point 2 1] 6 (#$ . 27183)])
(byte-code "!1 @!!@!P!BBBBB!A )M_ !_ @!!@!P!BBBBB!A9 )M$\"" [fboundp scroll-bar-drag (scroll-bar-drag scroll-bar-drag-1 scroll-bar-scroll-down scroll-bar-scroll-up scroll-bar-set-window-start) cmds 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) "" [nil (byte-code " K!@\f!!& A& \f! 	!+" [selected-window orig-win event-start event win follow-mode buffer-local-variables window-buffer fmode 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) "" [nil (byte-code ": @!! ( A( ! !*" [window follow-mode buffer-local-variables window-buffer selected-window orig-win fmode 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 "Follow Mode listens to calls to this function to make \nsure process output will be displayed correctly in buffers\nin which the mode is activated.\n\nFollow Mode inserts it's own process filter to do it's \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 (quote 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 (quote follow-generic-filter)))))))) before nil ad-activate-on] 9)
#@68 Call original `set-process-filter' without the Follow mode advice.
(defalias 'follow-call-set-process-filter #[(proc filter) "#!\"#!" [ad-disable-advice set-process-filter before follow-set-process-filter ad-activate proc filter ad-enable-advice] 5 (#$ . 29792)])
(byte-code "$\"" [ad-add-advice process-filter (follow-process-filter nil t (advice lambda nil "Normally when Follow mode is activated all processes has the\nprocess filter set to `follow-generic-filter'.  With this advice,\nthe original process filter is returned." (cond ((eq ad-return-value (quote follow-generic-filter)) (setq ad-return-value (cdr-safe (assq (ad-get-arg 0) follow-process-filter-alist))))))) after nil ad-activate-on] 5)
#@64 Call original `process-filter' without the Follow mode advice.
(defalias 'follow-call-process-filter #[(proc) "#!!#!" [ad-disable-advice process-filter after follow-process-filter ad-activate proc ad-enable-advice] 5 (#$ . 30535)])
#@58 Remove old processes from `follow-process-filter-alist'.
(defalias 'follow-tidy-process-filter-alist #[nil " ) @@!>\" @@\f>\" @BA +" [follow-process-filter-alist process-list nil new ps alist process-status (exit signal closed nil)] 4 (#$ . 30792)])
#@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 "   	@!= 	@	@!\"	A )ŉ" [process-list list process-filter follow-generic-filter set-process-filter t follow-intercept-processes] 5 (#$ . 31075) nil])
#@391 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 "  0 \n@!=) \n@\n@\"\n@\"\nA\n )ȉ	" [follow-tidy-process-filter-alist process-list list process-filter follow-generic-filter follow-call-set-process-filter follow-process-filter-alist delq nil follow-intercept-processes] 5 (#$ . 31432) nil])
#@72 Process output filter for process connected to buffers in Follow mode.
(defalias 'follow-generic-filter #[(proc output) "p \f! \n!= \n \"	( 	\n=?\n	3 	!\f\fJ \f\"  q\f!!` \f!dғ`\f!U!m J\f!b!\f!`ғ) \f!b! K\"+)8	8	!8q!88	!	!!!	!\"	!$\f\"=8C&! ' &\")	\f\"	\"!!$!\"$b	 =/	\"\"!!$!XC&!T'T&\")$\"C&!v'v&\")@\"$b!!C&!'&\")` !!	2	!A323@Y23A@W38,\n!!!72!!8!@@!bn	!@@\"`!@@!=8)8,!A,!@AA@!A@A@=8!A!\n8*7!,\nA\n!q.:;W ?W!" [old-buffer selected-window orig-win process-buffer proc buf window-buffer get-buffer-window t win return-to-orig-win window-start orig-window-start follow-process-filter-alist filter output marker-buffer process-mark nil boundp deactivate-mark buffer-read-only old-buffer-read-only odeactivate moving insert-before-markers set window-live-p follow-mode select-window follow-all-followers windows follow-windows-start-end win-start-end new-window-start window-point new-window-point "filter: Moved" args 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" pos wstart-wend-bend 2 sit-for 0 follow-internal-force-redisplay res vertical-motion follow-windows-start-end-cache follow-avoid-tail-recenter-p input-pending-p] 4 (#$ . 32153)])
(byte-code "! \"" [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) "?#  p 	!̎!." [follow-inside-post-command-hook nil selected-window selected-frame buf windows orig-frame orig-buffer orig-window buffers select-frame frame ((byte-code "	!\nq\f!" [select-frame orig-frame orig-buffer select-window orig-window] 2)) walk-windows #[(win) "	!>?? \nq!? ? 	!>4 !  : 	\"\nB" [window-buffer win buf buffers boundp follow-mode follow-all-followers windows orig-window select-window follow-post-command-hook selected-window follow-redisplay] 4]] 6 (#$ . 33924)])
(byte-code " $\"! !! #2 $\"I !I $\"!" [follow-emacs-version-xemacs-p ad-add-advice isearch-done (follow-isearch-done nil t (advice lambda nil (if (and (boundp (quote follow-mode)) follow-mode (boundp (quote isearch-window-configuration)) isearch-window-configuration (boundp (quote 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-on follow-avoid-tail-recenter-p 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.  Don't recenter windows showing only \nthe end of a buffer.  This prevents `mouse-drag-region' from\nmessing things up." (follow-avoid-tail-recenter))) provide follow] 5)
