403Webshell
Server IP : 217.160.0.212  /  Your IP : 216.73.216.141
Web Server : Apache
System : Linux www 6.18.51-i1-ampere #1196 SMP Fri Sep 11 20:43:55 CEST 2026 aarch64
User : sws1073854427 ( 1073854427)
PHP Version : 8.4.23
Disable Function : NONE
MySQL : OFF  |  cURL : ON  |  WGET : ON  |  Perl : ON  |  Python : OFF  |  Sudo : OFF  |  Pkexec : OFF
Directory :  /usr/share/emacs/28.2/lisp/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : /usr/share/emacs/28.2/lisp/follow.elc
;ELC
;;; Compiled
;;; in Emacs version 28.2
;;; with all optimizations.



(byte-code "\300\301\302\303\304\305\304\306&\210\307\310\311\312\313DD\314\315\316\304\301&\210\307\317\311\312\320DD\321\315\322\304\301&\207" [custom-declare-group follow nil "Synchronize windows showing the same buffer." :group windows convenience custom-declare-variable follow-mode-hook funcall function #[0 "\300\207" [nil] 1 #1=""] "Normal hook run by `follow-mode'." :type hook follow-mode-prefix #[0 "\300\207" ["."] 1 #1#] "Prefix key to use for follow commands in Follow mode.\nThe value of this variable is checked as part of loading Follow mode.\nAfter that, changing the prefix key requires manipulating keymaps." string] 8)
#@36 Minor mode keymap for Follow mode.
(defvar follow-mode-map (byte-code "\301 \301 \302\303\304#\210\302\305\306#\210\302\307\306#\210\302\310\311#\210\302\312\313#\210\302\314\315#\210\302\316\317#\210\302\320\321#\210\302\322\323#\210\302\324\325#\210\302\326\327#\210\302#\210\302\330\331#\210\302\332\333#\210\302\334\335#\210\302\336\337#\210\302\340\341#\210\302\342\343#\210\207" [follow-mode-prefix 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 [remap end-of-buffer] follow-end-of-buffer [remap scroll-bar-toolkit-scroll] follow-scroll-bar-toolkit-scroll [remap scroll-bar-drag] follow-scroll-bar-drag [remap scroll-bar-scroll-up] follow-scroll-bar-scroll-up [remap scroll-bar-scroll-down] follow-scroll-bar-scroll-down [remap mwheel-scroll] follow-mwheel-scroll] 6) (#$ . 728))
#@13 

(fn MENU)
(defalias 'follow-menu-filter #[257 "\301\300!\203\203\207\302\207" [follow-mode boundp (["Follow mode" follow-mode :style toggle :selected follow-mode])] 3 (#$ . 1795)])
(byte-code "\300\301\302\303#\210\304\305\306\307\310DD\311\312\313\314\315&\210\304\316\306\307\317DD\320\312\321\314\315\322\323&	\210\304\324\306\307\325DD\326\312\321\314\315&\207" [easy-menu-add-item nil ("Tools") ("Follow" :filter follow-menu-filter ["Scroll Up" follow-scroll-up follow-mode] ["Scroll Down" follow-scroll-down follow-mode] "--" ["Delete Other Windows and Split" follow-delete-other-windows-and-split follow-mode] "--" ["Switch To Buffer" follow-switch-to-buffer follow-mode] ["Switch To Buffer (all windows)" follow-switch-to-buffer-all follow-mode] "--" ["First Window" follow-first-window follow-mode] ["Last Window" follow-last-window follow-mode] ["Next Window" follow-next-window follow-mode] ["Previous Window" follow-previous-window follow-mode] "--" ["Recenter" follow-recenter follow-mode] "--" ["Follow mode" follow-mode :style toggle :selected follow-mode]) custom-declare-variable follow-mode-line-text funcall function #[0 "\300\207" [" Follow"] 1 #1=""] "Text shown in the mode line when Follow mode is active.\nDefaults to \" Follow\".  Examples of other values\nare \" Fw\", or simply \"\"." :type string :group follow follow-auto #[0 "\300\207" [nil] 1 #1#] "Non-nil activates Follow mode whenever a file is loaded." boolean :set #[514 "\211\203
\300\301\302\303#\210\202\304\301\302\"\210\305\"\207" [add-hook find-file-hook follow-find-file-hook t remove-hook set-default] 6 "\n\n(fn SYMBOL VALUE)"] follow-hide-ghost-cursors #[0 "\300\207" [t] 1 #1#] "When non-nil, Follow mode attempts to hide the obtrusive cursors\nin the non-selected windows of a window group.\n\nThis variable takes effect when `follow-mode' is initialized.\n\nDue to limitations in Emacs, this only operates on the followers\nof the selected window."] 10)
#@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 right-char left-char) (#$ . 3769))
(byte-code "\300\301\302\303\304DD\305\306\307\310\311&\207" [custom-declare-variable follow-debug funcall function #[0 "\300\207" [nil] 1 ""] "If non-nil, emit Follow mode debugging messages." :type boolean :group follow] 8)
#@56 Non-nil when Follow mode should redisplay the windows.
(defvar follow-internal-force-redisplay nil (#$ . 4488))
#@46 The menu visible when Follow mode is active.
(defvar follow-active-menu nil (#$ . 4606))
#@48 The menu visible when Follow mode is inactive.
(defvar follow-inactive-menu nil (#$ . 4701))
#@92 Non-nil when inside Follow modes `post-command-hook'.
Used by `follow-window-size-change'.
(defvar follow-inside-post-command-hook-call nil (#$ . 4800))
#@62 Cache used by `follow-window-start' and `follow-window-end'.
(defvar follow-windows-start-end-cache nil (#$ . 4959))
#@108 If non-nil, the current window must not be scrolled.
This is typically set by explicit scrolling commands.
(defvar follow-fixed-window nil (#$ . 5083))
#@82 Like `message', but only active when `follow-debug' is non-nil.

(fn &rest ARGS)
(defalias 'follow-debug-message #[128 "\301\300!\205\205\302\303\"\207" [follow-debug boundp apply message] 4 (#$ . 5241)])
(byte-code "\301\302\303\304#\305\302\306\307#\210\211\203\211@\305\310\311#\210A\266\202\202\f\207" [follow-cache-command-list function-put follow-debug-message speed -1 put byte-optimizer byte-compile-inline-expand follow-mode-use-cache t] 7)
#@62 Turn on Follow mode.  Please see the function `follow-mode'.
(defalias 'turn-on-follow-mode #[0 "\300\301!\207" [follow-mode 1] 2 (#$ . 5709)])
#@63 Turn off Follow mode.  Please see the function `follow-mode'.
(defalias 'turn-off-follow-mode #[0 "\300\301!\207" [follow-mode -1] 2 (#$ . 5859)])
(put 'follow-mode 'permanent-local t)
#@91 Non-nil if Follow mode is enabled.
Use the command `follow-mode' to change this variable.
(defvar follow-mode nil (#$ . 6050))
(make-variable-buffer-local 'follow-mode)
#@1756 Toggle Follow mode.

This is a minor mode.  If called interactively, toggle the `Follow
mode' mode.  If the prefix argument is positive, enable the mode, and
if it is zero or negative, disable the mode.

If called from Lisp, toggle the mode if ARG is `toggle'.  Enable the
mode if ARG is nil, omitted, or is a positive number.  Disable the
mode if ARG is a negative number.

To check whether the minor mode is enabled in the current buffer,
evaluate `follow-mode'.

The mode's hook is called both when the mode is enabled and when it is
disabled.

Follow mode is a minor mode that combines windows into one tall
virtual window.  This is accomplished by two main 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 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 or
more side-by-side windows are used.  The user can, with the help of
Follow mode, use these full-height windows as though they were one.
Imagine yourself editing a large function, or section of text, and
being able to use 144 or 216 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-right]' or `\[follow-delete-other-windows-and-split]' can be used.

Only windows displayed in the same frame follow each other.

This command runs the normal hook `follow-mode-hook'.

Keys specific to Follow mode:
\{follow-mode-map}

(fn &optional ARG)
(defalias 'follow-mode #[256 "\306 \307=\203
?\202\247\203\310W\203\311\202\312\313\301!\2031\314\300	\"\2031\300	B\203\222\315\316\317\312\211$\210\320\321\322\323B\324\311$\210\315\325\326\312#\210\315\327\330\311\312$\210\315\331\332\311\312$\210\315\333\332\311\312$\210\315\334\332\311\312$\210\n\203q\335\302!\210\336\203{\335\304!\210\311\337\3403\3412\3421\3430\344/\345.\202\346 \311\211\204\253\203\253\347\300@\"\262A\262\202\225\211\204\310\350\351\352!\324\"\211\351\352!=\204\302\353\352\"\210\210\354\325\326\"\210\266\355\356!\210\355\357!\210\355\360!\210\355\361!\210\355\362!\210\355\363!\210\355\305!\210\355\304!\210\354\334\332\312#\210\354\333\332\312#\210\354\331\332\312#\210\354\327\330\312#\210\354\316\317\312#\210\364\365\203\366\202\367\"\210\370\371!\2035\306 \203'\211\306 \232\2035\372\373\2031\374\2022\375\376#\210\210\377 \210\207" [follow-mode local-minor-modes isearch-lazy-highlight follow-hide-ghost-cursors cursor-in-non-selected-windows window-group-start-function current-message toggle 1 nil t boundp delq add-hook compilation-filter-hook follow-align-compilation-windows advice--add-function :before #[0 "\300\301!\207" [default-value pre-redisplay-function] 2] #[257 "\300\301\"\207" [set-default pre-redisplay-function] 4 "\n\n(fn GV--VAL)"] follow-pre-redisplay-function window-size-change-functions follow-window-size-change after-change-functions follow-after-change isearch-update-post-hook follow-post-command-hook replace-update-post-hook ispell-update-post-hook make-local-variable all-windows follow-window-start follow-window-end follow-set-window-start follow-recenter follow-pos-visible-in-window-p follow-all-followers follow-move-to-window-line buffer-list buffer-local-value advice--remove-function default-value pre-redisplay-function set-default remove-hook kill-local-variable move-to-window-group-line-function selected-window-group-function pos-visible-in-window-group-p-function recenter-window-group-function set-window-group-start-function window-group-end-function run-hooks follow-mode-hook follow-mode-on-hook follow-mode-off-hook called-interactively-p any message "Follow mode %sabled%s" "en" "dis" " in current buffer" force-mode-line-update] 8 (#$ . 6227) (byte-code "\203\n\301!\202\302C\207" [current-prefix-arg prefix-numeric-value toggle] 2)])
(defvar follow-mode-hook nil)
(byte-code "\301\302N\204\f\303\301\302\304#\210\303\301\305\306#\210\303\301\307\310C#\210\311\312\313\310\211%\207" [follow-mode-map follow-mode-hook variable-documentation put "Hook run after entering or leaving `follow-mode'.\nNo problems result if this variable is not bound.\n`add-hook' automatically binds it.  (This is true for all hook variables.)" custom-type hook standard-value nil add-minor-mode follow-mode follow-mode-line-text] 6)
#@66 Find-file hook for Follow mode.  See the variable `follow-auto'.
(defalias 'follow-find-file-hook #[0 "\205\301\302!\207" [follow-auto follow-mode 1] 2 (#$ . 10856)])
#@487 Calculate the correct value for point after a scrolling operation.

DEST is our default position, typically where point was before the scroll.
If `scroll-preserve-screen-position' is non-nil and active, DEST will be
in the same screen position as before the scroll.  WINDOWS is the list of
windows in the follow chain.

This function attempts to duplicate the point placing from
`window_scroll_line_based' in the Emacs core source window.c.

Return the new position.

(fn DEST WINDOWS)
(defalias 'follow-get-scrolled-point #[514 "\203\f	\302N\203\f\207\212b\210i\303\304!\210iZ)\305@!r\306\307\"\216\310@\311\"\210\212\312 b\210\303\304!\210`+\262\305\313!@!r\306\314\"\216\310@\311\"\210\212\315\316\317\"b\210\320 \203W`\202Y`S+\262W\203\305@!r\306\321\"\216\310@\311\"\210\212b\210\303\304B!\210`+\207V\203\244\305\313!@!r\306\322\"\216\310@\311\"\210\212b\210\303\304B!\210`+\207\207" [scroll-preserve-screen-position this-command scroll-command vertical-motion 0 internal--before-with-selected-window make-closure #[0 "\301\300!\207" [V0 internal--after-with-selected-window] 2] select-window norecord window-start reverse #[0 "\301\300!\207" [V0 internal--after-with-selected-window] 2] window-end nil t pos-visible-in-window-p #[0 "\301\300!\207" [V0 internal--after-with-selected-window] 2] #[0 "\301\300!\207" [V0 internal--after-with-selected-window] 2]] 9 (#$ . 11033)])
#@212 Scroll the text in a follow mode window chain up by ARG lines.
If ARG is nil, scroll the size of the current window.

This is an internal function for `follow-scroll-up' and
`follow-scroll-up-window'.

(fn ARG)
(defalias 'follow-scroll-up-arg #[257 "`\303 \3041\305!\210\3060\202)\210\3071\310 \210\3110\202)\210\312!\210b\210\313\314\306\"\204\2036	\315N\2049b\210\311\211\207" [scroll-preserve-screen-position this-command follow-fixed-window selected-window (end-of-buffer) scroll-up-command nil (error) follow-previous-window t select-window signal end-of-buffer scroll-command] 6 (#$ . 12455)])
#@218 Scroll the text in a follow mode window chain down by ARG lines.
If ARG is nil, scroll the size of the current window.

This is an internal function for `follow-scroll-down' and
`follow-scroll-down-window'.

(fn ARG)
(defalias 'follow-scroll-down-arg #[257 "`\303!\210\203	\304N\204\211b\210\305\211\207" [scroll-preserve-screen-position this-command follow-fixed-window scroll-down-command scroll-command t] 4 (#$ . 13078)])
#@398 Scroll text in a Follow mode window up by that window's size.
The other windows in the window chain will scroll synchronously.

If called with no ARG, the `next-screen-context-lines' last lines of
the window will be visible after the scroll.

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

Works like `scroll-up' when not in Follow mode.

(fn &optional ARG)
(defalias 'follow-scroll-up-window #[256 "\204\301!\207\211\302=\203\303 \207\304!\207" [follow-mode scroll-up-command - follow-scroll-down-window follow-scroll-up-arg] 3 (#$ . 13518) "P"])
(put 'follow-scroll-up-window 'scroll-command t)
#@414 Scroll text in a Follow mode window down by that window's size.
The other windows in the window chain will scroll synchronously.

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

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

Works like `scroll-down' when not in Follow mode.

(fn &optional ARG)
(defalias 'follow-scroll-down-window #[256 "\204\301!\207\211\302=\203\303 \207\304!\207" [follow-mode scroll-down-command - follow-scroll-up-window follow-scroll-down-arg] 3 (#$ . 14168) "P"])
(put 'follow-scroll-down-window 'scroll-command t)
#@338 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.

(fn &optional ARG)
(defalias 'follow-scroll-up #[256 "\204\303!\207\211\203\304!\207\305 \306\307!@!\211d=\203.	\203&m\203+\310\311\312\"\207db\207\313@!\210\211\203:\211b\210\314\n[!\210\315@`\"\207" [follow-mode scroll-error-top-bottom next-screen-context-lines scroll-up-command follow-scroll-up-arg follow-all-followers window-end reverse signal end-of-buffer nil select-window vertical-motion set-window-start] 6 (#$ . 14840) "P"])
(put 'follow-scroll-up 'scroll-command t)
#@341 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-down' when not in Follow mode.

(fn &optional ARG)
(defalias 'follow-scroll-down #[256 "\204\306!\207\211\203\307!\207`\310 \311@!\312e=\203.	\203&o\203+\313\314\315\"\207eb\207\316@!\210\211\203\\\211@\317!\n\203F\320\202G\321Z\203P\321\202Q\312Z\\\262A\266\202\2024\210\211\fZ\262b\210\322[![V\323@`\"\210\211\203}b\266\202\217b\210\322\fS!\210`W\203\216b\210\210\324\211\207" [follow-mode scroll-error-top-bottom header-line-format tab-line-format next-screen-context-lines follow-internal-force-redisplay scroll-down-command follow-scroll-down-arg follow-all-followers window-start 0 signal beginning-of-buffer nil select-window window-height 2 1 vertical-motion set-window-start t] 10 (#$ . 15658) "P"])
(put 'follow-scroll-down 'scroll-command t)
#@145 Scroll the bottom-most window in the current Follow chain.
This is to be called by `comint-postoutput-scroll-to-bottom'.

(fn &optional WINDOW)
(defalias 'follow-comint-scroll-to-bottom #[256 "p\301 \302 =\303\204\304 \211\262\205A\305\303!\210`\203!\202'\306\307!!@\310!\210b\210\303\311!\210?\205?\310!\210q\266\202\207" [follow-windows-start-end-cache selected-window window-buffer nil get-buffer-window comint-adjust-point last follow-all-followers select-window follow-adjust-window] 9 (#$ . 16746)])
#@107 Align the windows of the current Follow mode buffer.
This is to be called from `compilation-filter-hook'.
(defalias 'follow-align-compilation-windows #[0 "p\302 \303 \205<\304 \205<\205<\305!\306!=\204%\211@\262\307!\210\310\311#\210\312=?\205:\307!\210q\262\207" [follow-mode follow-windows-start-end-cache get-buffer-window selected-window waiting-for-user-input-p follow-all-followers window-buffer select-window follow-redisplay t nil] 8 (#$ . 17278)])
#@622 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 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.

(fn &optional ARG)
(defalias 'follow-delete-other-windows-and-split #[256 "\211\204
\301 \302 =?\206\211\205\303!\304W\305 \306 \210\307 \210\203.\310\311!\210\312\301 \"\210\313\314\311!\207" [follow-internal-force-redisplay selected-window frame-first-window prefix-numeric-value 0 window-start delete-other-windows split-window-right other-window 1 set-window-start t follow-mode] 6 (#$ . 17762) "P"])
#@82 Show BUFFER in all windows in the current Follow mode window chain.

(fn BUFFER)
(defalias 'follow-switch-to-buffer #[257 "\300 \301 \211\203\302@!\210\303!\210\211A\262\202\302!\207" [selected-window follow-all-followers select-window switch-to-buffer] 5 (#$ . 18785) "BSwitch to Buffer: "])
#@94 Show BUFFER in all windows on this frame.
Defaults to current buffer.

(fn &optional BUFFER)
(defalias 'follow-switch-to-buffer-all #[256 "\211C\211\242\204\211p\240\210\300 \301\302\303\"\304\"\210\305!\210\306 \207" [selected-window walk-windows make-closure #[257 "\301!\210\302\300\242!\207" [V0 select-window switch-to-buffer] 3 "\n\n(fn WIN)"] no-minibuf select-window follow-redisplay] 7 (#$ . 19092) (byte-code "\300\301p\"C\207" [read-buffer "Switch to Buffer: "] 3)])
#@74 Show current buffer in all windows on this frame, and enter Follow mode.
(defalias 'follow-switch-to-current-buffer-all #[0 "\204\300\301!\210\302 \207" [follow-mode 1 follow-switch-to-buffer-all] 2 (#$ . 19581) nil])
#@49 Select the next window showing the same buffer.
(defalias 'follow-next-window #[0 "\300\301 !A\211\203\302@!\207\303\304\305\"\207" [follow-split-followers follow-all-followers select-window error "%s" "No more windows"] 4 (#$ . 19808) nil])
#@53 Select the previous window showing the same buffer.
(defalias 'follow-previous-window #[0 "\300\301 !@\211\203\302@!\207\303\304\305\"\207" [follow-split-followers follow-all-followers select-window error "%s" "No more windows"] 4 (#$ . 20059) nil])
#@63 Select the first window in the frame showing the same buffer.
(defalias 'follow-first-window #[0 "\300\301 @!\207" [select-window follow-all-followers] 2 (#$ . 20318) nil])
#@62 Select the last window in the frame showing the same buffer.
(defalias 'follow-last-window #[0 "\300\301\302 !@!\207" [select-window reverse follow-all-followers] 3 (#$ . 20497) nil])
#@254 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 argument, place it -ARG lines
from the bottom.

(fn &optional ARG)
(defalias 'follow-recenter #[256 "\211\203&`\301!\211\302Y\203\303 \210b\210\304!\207\305 \210b\210\304!\210\306\211\207`\307 \211GS\310\2458\311!\210\312 b\210\304 \210W\205E\306\211\207" [follow-internal-force-redisplay prefix-numeric-value 0 follow-first-window recenter follow-last-window t follow-all-followers 2 select-window window-start] 7 (#$ . 20688) "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 #[0 "\300\301!\210\302 \207" [sit-for 0 follow-redisplay] 2 (#$ . 21331) nil])
#@289 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.

(fn &optional ARG)
(defalias 'follow-end-of-buffer #[256 "\300 `\203\301\302!@!\210\202 \303\304!!\204 \301\302!@!\210\211b\210\305!\207" [follow-all-followers select-window reverse follow-select-if-end-visible follow-windows-start-end end-of-buffer] 6 (#$ . 21699) "P"])
#@192 Sorting function for W1 and W2 based on their positions.
Return non-nil if W1 is above W2; if their top-lines
are at the same position, return non-nil if W1 is to the
left of W2.

(fn W1 W2)
(defalias 'follow--window-sorter #[514 "\300!\300!A@A@U\203@@W\207W\207" [window-pixel-edges] 8 (#$ . 22256)])
#@243 Return all windows displaying the same buffer as the WIN.
The list is sorted with topmost and leftmost windows first, and
contains only windows in the same frame as WIN.  If WIN is nil,
it defaults to the selected window.

(fn &optional WIN)
(defalias 'follow-all-followers #[256 "\300!\204\n\301 \262\302\303!\304\305!#\306\307\"\207" [window-live-p selected-window get-buffer-window-list window-buffer no-minibuf window-frame sort follow--window-sorter] 6 (#$ . 22577)])
#@181 Split WINDOWS into two sets: predecessors and successors.
Return `(PRED . SUCC)' where `PRED' and `SUCC' are ordered starting
from the selected window.

(fn WINDOWS &optional WIN)
(defalias 'follow-split-followers #[513 "\211\204\300 \262\301@=\204@B\262A\262\202	\211AB\207" [selected-window nil] 5 (#$ . 23063)])
#@295 Calculate the end position for window WIN.
Return (END-POS END-OF-BUFFER).

Actually, the position returned is the start of the line after
the last fully-visible line in WIN.  END-OF-BUFFER is t when EOB
is fully-visible in WIN.  If WIN is nil, the selected window is
used.

(fn &optional WIN)
(defalias 'follow-calc-win-end #[256 "\211\206\300 \301!\3028A@Z\303\304\305\306!\307!\\S\\#!\310\"\2036\311\312\"\211\310d\"D\207\211\313D\207" [selected-window window-inside-pixel-edges 3 posn-point posn-at-x-y 0 window-header-line-height window-tab-line-height pos-visible-in-window-p window-end t nil] 10 (#$ . 23399)])
#@245 Determine the start of window WIN in a Follow mode window chain.
WINDOWS is a list of chained windows, and POS is the starting
position for the first window in the list.  If WIN is nil, return
the point below all windows.

(fn WINDOWS POS WIN)
(defalias 'follow-calc-win-start #[771 "\203,@=\204,\300@!\301@\302#\210\303@!@\262\301@\302#\210A\262\210\202\207" [window-start set-window-start noforce follow-calc-win-end] 8 (#$ . 24042)])
#@151 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.

(fn WINDOWS)
(defalias 'follow-cache-valid-p #[257 "\301\203-\203-\211\203-@@@=\205 \302@!@A@=\262A\262\211A\262\202\2058?\2058\211?\207" [follow-windows-start-end-cache t window-start] 5 (#$ . 24503)])
(byte-code "\300\301\302\303#\304\301\305\306#\207" [function-put follow-cache-valid-p speed -1 put byte-optimizer byte-compile-inline-expand] 5)
#@86 Return a list of (WIN START END BUFFER-END-P) for window list WINDOWS.

(fn WINDOWS)
(defalias 'follow-windows-start-end #[257 "\211\301\203.\203.\211\203.@@@=\205!\302@!@A@=\262A\262\211A\262\202\2059?\2059\211?\266\203\203@\207\303 \304\211\203a\211@\305\306\"\210\211\302 \307 BBB\262A\266\202\202D\210\305\306\"\210\211\237\211\207" [follow-windows-start-end-cache t window-start selected-window nil select-window norecord follow-calc-win-end] 8 (#$ . 25016)])
#@65 Non-nil when POS is visible in WIN.

(fn POS WIN WIN-START-END)
(defalias 'follow-pos-visible #[771 "\236A@Y\205A@W\206\3008\207" [2] 6 (#$ . 25519)])
(byte-code "\300\301\302\303#\304\301\305\306#\207" [function-put follow-pos-visible speed -1 put byte-optimizer byte-compile-inline-expand] 5)
#@164 Non-nil if the follower windows are aligned.
The argument, WIN-START-END, should be a list of the form
returned by `follow-windows-start-end'.

(fn WIN-START-END)
(defalias 'follow-windows-aligned-p #[257 "\300\203!\211\203!A\203\301@8A@A@=\262A\262\202\207" [t 2] 4 (#$ . 25832)])
(byte-code "\300\301\302\303#\304\301\305\306#\207" [function-put follow-windows-aligned-p speed -1 put byte-optimizer byte-compile-inline-expand] 5)
#@80 Non-nil when the `window-point' is visible in all windows.

(fn WIN-START-END)
(defalias 'follow-point-visible-all-windows-p #[257 "\300\211\2033\2033\301@@!@@\236A@Y\205(A@W\206(\3028\266\204\262A\262\202\207" [t window-point 2] 8 (#$ . 26283)])
#@73 Make sure that the start of WIN starts at a full screen line.

(fn WIN)
(defalias 'follow-update-window-start #[257 "\212\300!b\210n?\205#\301\302\"\210`\300!=?\205#\301\303\"\210\304`\305#)\207" [window-start vertical-motion 0 1 set-window-start noforce] 5 (#$ . 26556)])
#@108 Select and return a window, if DEST is visible in it.
Return the selected window.

(fn DEST WIN-START-END)
(defalias 'follow-select-if-visible #[514 "\300\211\204<\203<@\262@\236A@Y\205(A@W\206(\3018\266\204\2035\211@\262\302!\210A\262\202\207" [nil 2 select-window] 10 (#$ . 26843)])
#@74 Select and return a window, if end is visible in it.

(fn WIN-START-END)
(defalias 'follow-select-if-end-visible #[257 "\300\211\204<\203<d\301@8=\2035\302@8\2035\303@@!\211\205'dd^=\262\2035@@\262\304!\210A\262\202\207" [nil 2 3 window-end select-window] 6 (#$ . 27160)])
#@242 Try to select one of WINDOWS without repositioning the topmost window.
If one of the windows in WINDOWS contains DEST, select it, call
`follow-redisplay', move point to DEST, and return that window.
Otherwise, return nil.

(fn DEST WINDOWS)
(defalias 'follow-select-if-visible-from-first #[514 "\300\211\212\301@!b\210\302\303@\"\210`Y\203S\304 \305\306\"\216\204P\211\203P\307@`\310#\210\311@!\262@b\210A@\204B`W\203I\211@\262\202\211A\262\202\210)\210)\203e\312!\210\313\211@\"\210b\210\207" [nil window-start vertical-motion 0 current-window-configuration make-closure #[0 "\301\300!\207" [V0 set-window-configuration] 2] set-window-start noforce follow-calc-win-end select-window follow-redisplay] 10 (#$ . 27459)])
#@70 When non-nil, indicates `follow-windows-start-end-cache' is invalid.
(defvar follow-start-end-invalid t (#$ . 28214))
(make-variable-buffer-local 'follow-start-end-invalid)
#@500 Reposition the WINDOWS around WIN.
Should 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.
If PRESERVE-WIN is non-nil, keep WIN itself unchanged while
repositioning the other windows.

(fn &optional WINDOWS WIN PRESERVE-WIN)
(defalias 'follow-redisplay #[768 "\204\302 \262\204\303!\262\304!\305#\306#\211U\203;\307C\310\300!\2055\2055\311\312\"\266\202z\211W\203_\313C\310\300!\205Q\205Q\311\312\"\266\314$\202z\315C\310\300!\205o\205o\311\312\"\266\316$\211\203\240\211@\203\216\211=\204\223\317\"\210\320!@\262A\266\202\202|\210\321\211\207" [follow-debug follow-start-end-invalid selected-window follow-all-followers window-start follow-estimate-first-window-start follow-calc-win-start "exact" boundp apply message "above" follow-calculate-first-window-start-from-above "below" follow-calculate-first-window-start-from-below set-window-start follow-calc-win-end nil] 12 (#$ . 28394)])
#@189 Estimate the position of the first window.
The estimate is computed by assuming that the window WIN, which
should be a member of WINDOWS, starts at position START.

(fn WINDOWS WIN START)
(defalias 'follow-estimate-first-window-start #[771 "\300\"@\212b\210\301\302\"\210\211\211\203$\211@\301\303![\"\210A\266\202\202\210`)\207" [follow-split-followers vertical-motion 0 window-text-height] 9 (#$ . 29634)])
#@32 

(fn WINDOWS GUESS WIN START)
(defalias 'follow-calculate-first-window-start-from-above #[1028 "\212\300\211\211b\210\2047\301\302@\"\302U\204\303\262d\262\202\304`#\262Y\203\303\262`\262\202\266\202)\207" [nil vertical-motion 1 t follow-calc-win-start] 11 (#$ . 30059)])
#@42 

(fn WINDOWS GUESS &optional WIN START)
(defalias 'follow-calculate-first-window-start-from-below #[1026 "\206\300 \262\211\206\301!\262\212\302\211\211\211b\210\303\304	@\"\210`\262\204x`\262\303\305	@\"\305U\204?\306\262e\262\202$\307`#\262`Y\203W\306\262`\262\202$U\203f\306\262`\262\202$W\203r\306\262\202$`\262\202$\266\204)\207" [selected-window window-start nil vertical-motion 0 -1 t follow-calc-win-start] 12 (#$ . 30362)])
#@180 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.

(fn &rest REST)
(defalias 'follow-avoid-tail-recenter #[128 "p\301 \211\302\303!?\205J\304!\305!\306!B\305!q\210\211\235\204)\211B\262\2028\2038d=\2038\307\"\210\310\311\312#\262=?\266\202\204\fq\207" [follow-mode frame-first-window nil window-minibuffer-p window-start window-buffer window-frame set-window-start next-window not t] 11 (#$ . 30847)])
#@128 The buffer current at the last call to `follow-adjust-window' or nil.
`follow-mode' is not necessarily enabled in this buffer.
(defvar follow-prev-buffer nil (#$ . 31391))
#@13 

(fn WINS)
(defalias 'follow-pre-redisplay-function #[257 "\211\300=\204\211\203\211<\205\301 >\205\302 \207" [t selected-window follow-post-command-hook] 3 (#$ . 31569)])
#@73 Ensure that the windows in Follow mode are adjacent after each command.
(defalias 'follow-post-command-hook #[0 "\303 ?\205$\304\305 r\306!q\210	9\203	\307N\204\310\311!*\266\202\207" [follow-inside-post-command-hook-call this-command follow-windows-start-end-cache input-pending-p t selected-window window-buffer follow-mode-use-cache nil follow-adjust-window] 4 (#$ . 31757)])
#@52 Adjust the window WIN and its followers.

(fn WIN)
(defalias 'follow-adjust-window #[257 "\306!p=\204\f\307\310!\210p=\204?\311!\203+rq\210	\203*\312\302!\203*\313\302!)	\2037\312\302!\2037\314\311p!\203?p	\205\345\315!?\205\345\316!\203p\317C\320\304!\205a\f\205a\321\322\"\266\323\"\210\324`\"b\210\314`\325@!\210\326!\211\327\203\233\211\203\233A\203\224\330@8A@A@=\262A\262\202{\262\236A@Y\205\266A@W\206\266\3308\266\204\314\203\301\204\303\3147\204=d=\203<\203\362\203\3628\331>\204\362\332C\320\304!\205\355\f\205\355\321\322\"\266\202\374\333!\203\334C\320\304!\205\f\205\321\322\"\266\327\262\314\262b\210\202\374\335C\320\304!\205&\f\205&\321\322\"\266\336\337!@!\210b\210\314\262\314\262\202\374\203Y\203Y\340C\320\304!\205T\f\205T\321\322\"\266\202\374\341\"\203{\342C\320\304!\205p\f\205p\321\322\"\266b\210\314\262\202\374\203\224\343C\320\304!\205\217\f\205\217\321\322\"\266\202\374@A@W\203\301\344C\320\304!\205\255\f\205\255\321\322\"\266\336@!\210b\210\314\262\314\262\202\374\345\"\203\344\346C\320\304!\205\331\f\205\331\321\322\"\266\327\262\327\262\202\374\347C\320\304!\205\364\f\205\364\321\322\"\266\314\262\314\262\350 =\204=\351!\352\353\n!\314#\210\330\354\n\327#8\2036\355!r\356\357\"\216\336@\360\"\210\314y\210*\266\202=\361\"\266\204c`\362 \210`U\204Q\211b\210\362 \210\210\327\262\363 \210\326!\262\314\211\2627\204\231\204\223\327\203\216\211\203\216A\203\207\330@8A@A@=\262A\262\202n\262\203\231\364!\204\323\3147\323\350 #\210\326!\262\314\236A@Y\205\306A@W\206\306\3308\266\204\204\323\341\"\210b\210\365 \203\341\366\350 #\210\266\363 \207" [follow-prev-buffer follow-mode cursor-in-non-selected-windows follow-fixed-window follow-debug follow-windows-start-end-cache window-buffer cl--assertion-failed (eq (window-buffer win) (current-buffer)) buffer-live-p local-variable-p default-value nil window-minibuffer-p follow-all-followers "fixed" boundp apply message follow-redisplay follow-get-scrolled-point follow-update-window-start follow-windows-start-end t 2 (backward-delete-char delete-backward-char backward-delete-char-untabify kill-region) "Max: same" follow-select-if-end-visible "Max: end visible" "Max: default" select-window last "same" follow-select-if-visible "visible" "visible in selected." "before first" follow-select-if-visible-from-first "Below first" "None" selected-window window-point set-window-start window-start pos-visible-in-window-p internal--before-with-selected-window make-closure #[0 "\301\300!\207" [V0 internal--after-with-selected-window] 2] norecord set-window-point redisplay follow-avoid-tail-recenter follow-point-visible-all-windows-p region-active-p follow-maximize-region follow-internal-force-redisplay this-command] 14 (#$ . 32152)])
#@98 Make a highlighted region stretching multiple windows look good.

(fn WIN WINDOWS WIN-START-END)
(defalias 'follow-maximize-region #[771 "\300\"\211@A\301\203'@\236\262\302@A@\3038S]\"\210A\262\202	\205>\302@@\236A@\"\210A\262\202'\207" [follow-split-followers nil set-window-point 2] 12 (#$ . 35113)])
#@14 

(fn EVENT)
(defalias 'follow-scroll-bar-toolkit-scroll #[257 "\300!\210\301!\207" [scroll-bar-toolkit-scroll follow-redraw-after-event] 3 (#$ . 35445) "e"])
#@14 

(fn EVENT)
(defalias 'follow-scroll-bar-drag #[257 "\300!\210\301!\207" [scroll-bar-drag follow-redraw-after-event] 3 (#$ . 35612) "e"])
#@14 

(fn EVENT)
(defalias 'follow-scroll-bar-scroll-up #[257 "\300!\210\301!\207" [scroll-bar-scroll-up follow-redraw-after-event] 3 (#$ . 35759) "e"])
#@14 

(fn EVENT)
(defalias 'follow-scroll-bar-scroll-down #[257 "\300!\210\301!\207" [scroll-bar-scroll-down follow-redraw-after-event] 3 (#$ . 35916) "e"])
#@14 

(fn EVENT)
(defalias 'follow-mwheel-scroll #[257 "\300!\210\301!\207" [mwheel-scroll follow-redraw-after-event] 3 (#$ . 36077) "e"])
#@65 Re-align the Follow mode windows affected by EVENT.

(fn EVENT)
(defalias 'follow-redraw-after-event #[257 "\300!@\301!\302 \303\304\"\205+\302 =?\205+\305!\210\306 \210\301!=?\205+\305!\207" [event-end window-buffer selected-window buffer-local-value follow-mode select-window follow-redisplay] 7 (#$ . 36220)])
#@63 Redraw all windows in FRAME, when in Follow mode.

(fn FRAME)
(defalias 'follow-window-size-change #[257 "?\205(r\301 \302!\210\303 C\304C\305\306\"\216\307\305\310#\311\"\210)\266\302!\262)\207" [follow-inside-post-command-hook-call selected-frame select-frame selected-window nil make-closure #[0 "\301\300\242\302\"\207" [V0 select-window norecord] 3] walk-windows #[257 "\303!\211\301\242>?\205:\211q\210\n\205:\304!\300\242>\204%\305\"\266\2024\306\300\242\307\"\210\310 \210\300\311 \240\266\301\301\242B\240\207" [V0 V1 follow-mode window-buffer follow-all-followers follow-redisplay select-window norecord follow-post-command-hook selected-window] 6 "\n\n(fn WIN)"] no-minibuf] 9 (#$ . 36550)])
(add-hook 'window-scroll-functions 'follow-avoid-tail-recenter t)
#@78 After change function: set `follow-start-end-invalid'.

(fn BEG END OLD-LEN)
(defalias 'follow-after-change #[771 "\301\211\207" [follow-start-end-invalid t] 5 (#$ . 37346)])
#@267 Return position at which display currently starts in the
Follow Mode group of windows which includes WINDOW.

WINDOW must be a live window and defaults to the selected one.
This is updated by redisplay or by calling
`follow-set-window-start'.

(fn &optional WINDOW)
(defalias 'follow-window-start #[256 "\300!\301@!\207" [follow-all-followers window-start] 4 (#$ . 37529)])
#@560 Return position at which display currently ends in the Follow
Mode group of windows which includes WINDOW.

WINDOW must be a live window and defaults to the selected one.
This is updated by redisplay, when it runs to completion.
Simply changing the buffer text or setting `window-start' does
not update this value.

Return nil if there is no recorded value.  (This can happen if
the last redisplay of WINDOW was preempted, and did not
finish.)  If UPDATE is non-nil, compute the up-to-date position
if it isn't already recorded.

(fn &optional WINDOW UPDATE)
(defalias 'follow-window-end #[512 "\301!\302!@\203\203\303\211@\"\210\304\"\207" [follow-start-end-invalid follow-all-followers last follow-redisplay window-end] 7 (#$ . 37912)])
#@359 Make display in the Follow Mode group of windows which includes
WINDOW start at position POS in WINDOW's buffer.

WINDOW must be a live window and defaults to the selected one.  Return
POS.  Optional third arg NOFORCE non-nil inhibits next redisplay from
overriding motion of point in order to display at this exact start.

(fn WINDOW POS &optional NOFORCE)
(defalias 'follow-set-window-start #[770 "\301!\302\303@#\207" [follow-start-end-invalid follow-all-followers t set-window-start] 8 (#$ . 38669)])
#@1179 Return non-nil if position POS is currently on the frame in one of
the windows in the Follow Mode group which includes WINDOW.

WINDOW must be a live window and defaults to the selected one.

Return nil if that position is scrolled vertically out of view.  If a
character is only partially visible, nil is returned, unless the
optional argument PARTIALLY is non-nil.  If POS is only out of view
because of horizontal scrolling, return non-nil.  If POS is t, it
specifies the position of the last visible glyph in WINDOW.  POS
defaults to point in WINDOW; WINDOW defaults to the selected window.

If POS is visible, return t if PARTIALLY is nil; if PARTIALLY is non-nil,
the return value is a list of 2 or 6 elements (X Y [RTOP RBOT ROWH VPOS]),
where X and Y are the pixel coordinates relative to the top left corner
of the actual window containing it.  The remaining elements are
omitted if the character after POS is fully visible; otherwise, RTOP
and RBOT are the number of pixels off-window at the top and bottom of
the screen line ("row") containing POS, ROWH is the visible height
of that row, and VPOS is the row number (zero-based).

(fn &optional POS WINDOW PARTIALLY)
(defalias 'follow-pos-visible-in-window-p #[768 "\301!\203
\302\211@\"\210\303!\304!@\305\211\306=\203!\202I\206'`\262\3072I\203G\310@8W\203@\311\307@\"\210A\262\202-0\262\312@#\207" [follow-start-end-invalid follow-all-followers follow-redisplay follow-windows-start-end last nil t element 2 throw pos-visible-in-window-p] 12 (#$ . 39187)])
#@333 Position point relative to the Follow mode group containing the selected window.
ARG nil means position point at center of the window group.
Else, ARG specifies vertical position within the window group;
zero means top of the first window in the group, negative means
  relative to bottom of the last window in the group.

(fn ARG)
(defalias 'follow-move-to-window-line #[257 "\300 \301!\302!\303\304\211\305\204@G\306\245\233\262@@A\211\262\203\314@\262\307A@\3068\304@$\262\\\262\202\303Y\203}A\203w@\262\307A@\3068\304@$\262Y\203wZ\262\\\262A\262\202G@@\202\314A@\203\246@\262\310A@\3068\"\262[X\203\246\\\262A\262\202}@@A\211\262\203\314@\262\307A@\3068\304@$\262\\\262\202\251!\210\311!\\\207" [follow-all-followers follow-windows-start-end reverse 0 nil select-window 2 count-screen-lines count-lines move-to-window-line] 14 (#$ . 40745)])
(provide 'follow)

Youez - 2016 - github.com/yon3zu
LinuXploit