elisp: Window Hooks

 
 27.27 Hooks for Window Scrolling and Changes
 ============================================
 
 This section describes how a Lisp program can take action whenever a
 window displays a different part of its buffer or a different buffer.
 There are three actions that can change this: scrolling the window,
 switching buffers in the window, and changing the size of the window.
 The first two actions run ‘window-scroll-functions’; the last runs
 ‘window-size-change-functions’.
 
  -- Variable: window-scroll-functions
      This variable holds a list of functions that Emacs should call
      before redisplaying a window with scrolling.  Displaying a
      different buffer in the window also runs these functions.
 
      This variable is not a normal hook, because each function is called
      with two arguments: the window, and its new display-start position.
 
      These functions must take care when using ‘window-end’ (See
      Window Start and End); if you need an up-to-date value, you must
      use the UPDATE argument to ensure you get it.
 
      *Warning:* don’t use this feature to alter the way the window is
      scrolled.  It’s not designed for that, and such use probably won’t
      work.
 
  -- Variable: window-size-change-functions
      This variable holds a list of functions to be called if the size of
      any window changes for any reason.  The functions are called at the
      beginning of a redisplay cycle, and just once for each frame on
      which size changes have occurred.
 
      Each function receives the frame as its sole argument.  There is no
      direct way to find out which windows on that frame have changed
      size, or precisely how.  However, if a size-change function
      records, at each call, the existing windows and their sizes, it can
      also compare the present sizes and the previous sizes.
 
      Creating or deleting windows counts as a size change, and therefore
      causes these functions to be called.  Changing the frame size also
      counts, because it changes the sizes of the existing windows.
 
      You may use ‘save-selected-window’ in these functions (See
      Selecting Windows).  However, do not use ‘save-window-excursion’
      (SeeWindow Configurations); exiting that macro counts as a
      size change, which would cause these functions to be called over
      and over.
 
  -- Variable: window-configuration-change-hook
      A normal hook that is run every time you change the window
      configuration of an existing frame.  This includes splitting or
      deleting windows, changing the sizes of windows, or displaying a
      different buffer in a window.
 
      The buffer-local part of this hook is run once for each window on
      the affected frame, with the relevant window selected and its
      buffer current.  The global part is run once for the modified
      frame, with that frame selected.
 
    In addition, you can use ‘jit-lock-register’ to register a Font Lock
 fontification function, which will be called whenever parts of a buffer
 are (re)fontified because a window was scrolled or its size changed.
 SeeOther Font Lock Variables.