@c -*-texinfo-*-
@c This is part of the GNU Emacs Lisp Reference Manual.
@c Copyright (C) 1990-1993, 1998, 2001-2019 Free Software Foundation,
@c Inc.
@c See the file elisp.texi for copying conditions.
@node Standard Hooks
@appendix Standard Hooks
@cindex standard hooks
@cindex hook variables, list of

The following is a list of some hook variables that let you provide
functions to be called from within Emacs on suitable occasions.

Most of these variables have names ending with @samp{-hook}.  They are
@dfn{normal hooks}, run by means of @code{run-hooks}.  The value of such
a hook is a list of functions; the functions are called with no
arguments and their values are completely ignored.  The recommended way
to put a new function on such a hook is to call @code{add-hook}.
@xref{Hooks}, for more information about using hooks.

The variables whose names end in @samp{-functions} are usually @dfn{abnormal
hooks} (some old code may also use the deprecated @samp{-hooks} suffix); their
values are lists of functions, but these functions are called in a special way
(they are passed arguments, or their return values are used).  The variables
whose names end in @samp{-function} have single functions as their values.

This is not an exhaustive list, it only covers the more general hooks.
For example, every major mode defines a hook named
@samp{@var{modename}-mode-hook}.  The major mode command runs this
normal hook with @code{run-mode-hooks} as the very last thing it does.
@xref{Mode Hooks}.  Most minor modes have mode hooks too.

A special feature allows you to specify expressions to evaluate if and
when a file is loaded (@pxref{Hooks for Loading}).  That feature is
not exactly a hook, but does a similar job.

@c We need to xref to where each hook is documented or else document it here.
@c Add vindex for anything not indexed elsewhere.
@c This list is in alphabetical order, grouped by topic.
@c TODO It should probably be more thoroughly ordered by topic.

@table @code
@item activate-mark-hook
@itemx deactivate-mark-hook
@xref{The Mark}.

@item after-change-functions
@itemx before-change-functions
@itemx first-change-hook
@xref{Change Hooks}.

@item after-change-major-mode-hook
@itemx change-major-mode-after-body-hook
@xref{Mode Hooks}.

@item after-init-hook
@itemx before-init-hook
@itemx emacs-startup-hook
@itemx window-setup-hook
@xref{Init File}.

@item after-insert-file-functions
@itemx write-region-annotate-functions
@itemx write-region-post-annotation-function
@xref{Format Conversion}.

@item after-make-frame-functions
@itemx before-make-frame-hook
@xref{Creating Frames}.

@c Not general enough?
@ignore
@item after-revert-hook
@itemx before-revert-hook
@itemx buffer-stale-function
@itemx revert-buffer-function
@itemx revert-buffer-insert-file-contents-function
@xref{Reverting}.
@end ignore

@item after-save-hook
@itemx before-save-hook
@itemx write-contents-functions
@itemx write-file-functions
@xref{Saving Buffers}.

@item after-setting-font-hook
@vindex after-setting-font-hook
Hook run after a frame's font changes.

@item auto-save-hook
@xref{Auto-Saving}.

@item before-hack-local-variables-hook
@itemx hack-local-variables-hook
@xref{File Local Variables}.

@item buffer-access-fontify-functions
@xref{Lazy Properties}.

@item buffer-list-update-hook
@vindex buffer-list-update-hook
Hook run when the buffer list changes (@pxref{Buffer List}).

@item buffer-quit-function
@vindex buffer-quit-function
Function to call to quit the current buffer.

@item change-major-mode-hook
@xref{Creating Buffer-Local}.

@item command-line-functions
@xref{Command-Line Arguments}.

@item delayed-warnings-hook
@vindex delayed-warnings-hook
The command loop runs this soon after @code{post-command-hook} (q.v.).

@item focus-in-hook
@vindex focus-in-hook
@itemx focus-out-hook
@vindex focus-out-hook
@xref{Input Focus}.

@item delete-frame-functions
@xref{Deleting Frames}.

@item delete-terminal-functions
@xref{Multiple Terminals}.

@item pop-up-frame-function
@itemx split-window-preferred-function
@xref{Choosing Window Options}.

@item echo-area-clear-hook
@xref{Echo Area Customization}.

@item find-file-hook
@itemx find-file-not-found-functions
@xref{Visiting Functions}.

@item font-lock-extend-after-change-region-function
@xref{Region to Refontify}.

@item font-lock-extend-region-functions
@xref{Multiline Font Lock}.

@item font-lock-fontify-buffer-function
@itemx font-lock-fontify-region-function
@itemx font-lock-mark-block-function
@itemx font-lock-unfontify-buffer-function
@itemx font-lock-unfontify-region-function
@xref{Other Font Lock Variables}.

@item fontification-functions
@xref{Auto Faces,, Automatic Face Assignment}.

@item frame-auto-hide-function
@xref{Quitting Windows}.

@item kill-buffer-hook
@itemx kill-buffer-query-functions
@xref{Killing Buffers}.

@item kill-emacs-hook
@itemx kill-emacs-query-functions
@xref{Killing Emacs}.

@item menu-bar-update-hook
@xref{Menu Bar}.

@item minibuffer-setup-hook
@itemx minibuffer-exit-hook
@xref{Minibuffer Misc}.

@item mouse-leave-buffer-hook
@vindex mouse-leave-buffer-hook
Hook run when about to switch windows with a mouse command.

@item mouse-position-function
@xref{Mouse Position}.

@item prefix-command-echo-keystrokes-functions
@vindex prefix-command-echo-keystrokes-functions
An abnormal hook run by prefix commands (such as @kbd{C-u}) which
should return a string describing the current prefix state.  For
example, @kbd{C-u} produces @samp{C-u-} and @samp{C-u 1 2 3-}.  Each
hook function is called with no arguments and should return a string
describing the current prefix state, or @code{nil} if there's no
prefix state.  @xref{Prefix Command Arguments}.

@item prefix-command-preserve-state-hook
@vindex prefix-command-preserve-state-hook
Hook run when a prefix command needs to preserve the prefix by passing
the current prefix command state to the next command.  For example,
@kbd{C-u} needs to pass the state to the next command when the user
types @kbd{C-u -} or follows @kbd{C-u} with a digit.

@item pre-redisplay-functions
Hook run in each window just before redisplaying it.  @xref{Forcing
Redisplay}.

@item post-command-hook
@itemx pre-command-hook
@xref{Command Overview}.

@item post-gc-hook
@xref{Garbage Collection}.

@item post-self-insert-hook
@xref{Keymaps and Minor Modes}.

@ignore
@item prog-mode-hook
@itemx special-mode-hook
@vindex special-mode-hook
@xref{Basic Major Modes}.
@end ignore

@item suspend-hook
@itemx suspend-resume-hook
@itemx suspend-tty-functions
@itemx resume-tty-functions
@xref{Suspending Emacs}.

@item syntax-begin-function
@itemx syntax-propertize-extend-region-functions
@itemx syntax-propertize-function
@itemx font-lock-syntactic-face-function
@xref{Syntactic Font Lock}.  @xref{Syntax Properties}.

@item temp-buffer-setup-hook
@itemx temp-buffer-show-function
@itemx temp-buffer-show-hook
@xref{Temporary Displays}.

@item tty-setup-hook
@xref{Terminal-Specific}.

@item window-configuration-change-hook
@itemx window-scroll-functions
@itemx window-size-change-functions
@xref{Window Hooks}.
@end table

@ignore
Some -hook, -function, -functions from preloaded Lisp or C files that
I thought did not need to be mentioned here:

Lisp:
after-load-functions
auto-coding-functions
choose-completion-string-functions
completing-read-function
completion-annotate-function
completion-at-point-functions
completion-list-insert-choice-function
deactivate-current-input-method-function
describe-current-input-method-function
font-lock-function
menu-bar-select-buffer-function
read-file-name-function
replace-re-search-function
replace-search-function
yank-undo-function

C hooks:
kbd-macro-termination-hook
signal-hook-function

C functions:
redisplay-end-trigger-functions
x-lost-selection-functions
x-sent-selection-functions

C function:
auto-composition-function
auto-fill-function
command-error-function
compose-chars-after-function
composition-function-table
deferred-action-function
input-method-function
load-read-function
load-source-file-function
read-buffer-function
ring-bell-function
select-safe-coding-system-function
set-auto-coding-function
show-help-function
signal-hook-function
undo-outer-limit-function

@end ignore
