Emacs: What's Hook?
What's a hook?
A hook is a variable, its value is a list of functions (lisp symbols or lambda).
Each hook is designed to “run” when some event happens. When a hook “run”, all functions in that hook are called.
js-modeis loaded, js-mode-hook's functions are run.
- when any command is called, post-command-hook's functions are run.
There are hundreds of hooks. Each major mode usually have at least 1 hook, designed to run when the mode is loaded. [see List of Emacs Hooks]
A hook is similar to the concept of events in other systems. Adding function to a hook is similar to adding event handlers. (note: emacs lisp manual also uses the term “event”, but that is lower level events to emacs (such as pressing a key), not events from emacs.)
Examples of Using Hook
Here's example of use variable-width font for some modes:
;; use variable-width font for some modes (add-hook 'emacs-lisp-mode-hook 'variable-pitch-mode) (add-hook 'ruby-mode-hook 'variable-pitch-mode) (add-hook 'js-mode-hook 'variable-pitch-mode) (add-hook 'css-mode-hook 'variable-pitch-mode) (add-hook 'nxml-mode-hook 'variable-pitch-mode) (add-hook 'html-mode-hook 'variable-pitch-mode) (add-hook 'mhtml-mode-hook 'variable-pitch-mode) ; emacs 26
[see Emacs: Avoid Lambda in Hook]
How to List All Hooks?
List of Emacs Hooks
How to find the name of hook?
Most major modes have a hook. If a mode's name is “xyz-mode”, its hook by convention is named “xyz-mode-hook”.
First, be sure you load the mode first. Some hook many not show when the mode isn't loaded or initialized.
To load a mode, just e.g. Alt+x
To find a mode's hook,
describe-variable, then try to type a name you guessed, press Tab for completion.
- Type “-hook”, press Enter.
Note: A major mode may have more than 1 hook.
How to See the Value of a Hook?
describe-variable, then type the hook name, to see its current value.
How to Remove a Function in a Hook?
;; remove a hook (remove-hook 'html-mode-hook 'xyz-function-name)
How to Bind Keys for Major Mode?
Emacs: Change Major Mode Keys
Avoid Lambda in Hook
Emacs: Avoid Lambda in Hook
- Emacs init file
- Install Packages
- Install Package Manually
- Define Keys
- M-x customize
- What's Major Mode?
- What's Minor Mode?
- Set File to Open in a Major Mode
- Organize Init File
- Byte Compile Elisp
- What's Hook?
- Environment Variables in Emacs
- Set Default Window Size
- Font Setup
- Set Color Theme
- Turn Off Auto Backup
- Check OS, Version, Host Name
- Check Defined/Loaded