Emacs: What's Hook?

By Xah Lee. Date: . Last updated: .

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.

For example,

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, not events from emacs.)

Examples of Using Hook

Here's example of turning on line number only for some modes:

(add-hook 'emacs-lisp-mode-hook 'linum-mode)
(add-hook 'js-mode-hook 'linum-mode)
(add-hook 'css-mode-hook 'linum-mode)
(add-hook 'html-mode-hook 'linum-mode)
(add-hook 'nxml-mode-hook 'linum-mode)

Here's example of use variable-width font for some modes:

;; use variable-width font for some modes
(add-hook 'nxml-mode-hook 'variable-pitch-mode)
(add-hook 'emacs-lisp-mode-hook 'variable-pitch-mode)
(add-hook 'js-mode-hook 'variable-pitch-mode)
(add-hook 'css-mode-hook 'variable-pitch-mode)
(add-hook 'html-mode-hook 'variable-pitch-mode)

[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.

Alt+x describe-variable, then try to type a name you guessed, press Tab for completion.

Or,

  1. call apropos-variable
  2. type “-hook”, press Enter.

Note: A major mode may have more than 1 hook.

How to See the Value of a Hook?

Alt+x 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?

See: Emacs: Change Major Mode Keys

Avoid Lambda in Hook

Emacs: Avoid Lambda in Hook

Emacs Customization

  1. How to Set Emacs's User Interface
  2. Emacs: How to Install Packages Using ELPA, MELPA
  3. How to Install Emacs Package Manually
  4. Emacs: How to Define Keys
  5. Emacs: M-x customize Tutorial
  6. Emacs: Set File to Open in a Major Mode
  7. Emacs: Organize Init File
  8. Emacs: Byte Compile Elisp Files
  9. Emacs: What's Hook?
  10. Emacs: Set Environment Variables within Emacs
  11. Elisp: Determine OS, Emacs Version, Machine Host Name
  12. Elisp: Check If a {function, variable, feature} is Defined/Loaded
  13. Emacs: Set Default Window (frame) Size
  14. Emacs: Font Setup
  15. Emacs: Set Color Theme
  16. Emacs: Save Cursor Position
  17. Emacs: Turn Off Auto Backup; Set Backups into a Directory; How to Delete Backup Files
  18. Emacs: Stop Cursor Going into Minibuffer Prompt
Like my tutorial? Put $5 at patreon

Or Buy Xah Emacs Tutorial

Or buy a nice keyboard: Best Keyboard for Emacs

Ask me question on patreon