Emacs: How to Turn Major/Minor Mode on/off?

By Xah Lee. Date: . Last updated: .

This page is a tutorial on how to turn a emacs mode on, off, or toggle.

Turn On/Switch Major Mode

Each buffer/file is associated with one major mode.

A “major mode” is a set of features, designed for specific task. Typically, for working with programing languages, or other things such as viewing directory (dired) , viewing image files, Web Browser, etc.

To turn on a major mode, just call the associated command. Typically, if a mode is named “xyz-mode”, the command to turn it on is named “xyz” or “xyz-mode”.

To turn “off” a major mode, just switch to another major mode. There's always one major mode on.

The most basic major mode is fundamental-mode. So, in a sense if you want to “turn off” all major modes, just call fundamental-mode.

Minor Modes

Minor modes are like “preference” settings. Each minor mode changes emacs behavior in some way.

Each buffer/file can have multiple minor modes on.

Turn On/Off Minor Mode

To turn on/off a minor mode, call the associated command. Typically, if a mode is named “xyz-mode”, the command to turn it on is named “xyz” or “xyz-mode”. For example, linum-mode is a command to turn on/off line numbers in margin. 〔➤see Emacs: Display Line Numbers linum-mode

Minor mode's on/off command is a toggle.

Global Minor Mode vs Current Buffer

For those per-buffer minor modes, it may not have a comman to toggle on/off for all buffers. For example, auto-fill-mode will toggle for current buffer, but no global command.

If you want to turn a minor mode globally but it doesn't have a global toggle, you have to write a hook. For example, see: Emacs: How to Bind Keys for Major Mode?.

Turn On/Off Minor Mode in Emacs Init

When calling a mode function in init file, give it a argument 1 to turn on, and 0 for off, like this:

(global-linum-mode 1)

Note: the argument to minor mode changed in emacs 23.2 〔➤see Emacs 23.2 Features (released 2010-05)

Current State of a Minor Mode

Typically, if a mode has a command named “xyz-mode”, it also has a variable of the same name “xyz-mode”. Its value is t if the mode is on, else nil. You can check this variable for the mode's on/off state.

If you want to turn on/off a mode, call the function, not set the variable. For example:

(global-linum-mode 1) ; GOOD

(setq global-linum-mode t) ; WRONG!
(setq global-linum-mode 1) ; WRONG!

If you also need to check if a mode (package) is loaded, see: Emacs Lisp: Check If a {function, variable, feature} is Defined/Loaded

Writing a Toggle Mode Command

You can write a toggle command that toggles a set of minor modes or other things such as switching between 2 fonts. See: Emacs Lisp: How to Write a Toggle/Cycle Command

Like it? Buy Xah Emacs Tutorial. Thanks.