(lispref.info)Minor Mode Conventions
Next: Keymaps and Minor Modes Up: Minor Modes
Conventions for Writing Minor Modes
There are conventions for writing minor modes just as there are for
major modes. Several of the major mode conventions apply to minor
modes as well: those regarding the name of the mode initialization
function, the names of global symbols, and the use of keymaps and other
In addition, there are several conventions that are specific to
* Make a variable whose name ends in `-mode' to represent the minor
mode. Its value should enable or disable the mode (`nil' to
disable; anything else to enable.) We call this the "mode
This variable is used in conjunction with the `minor-mode-alist' to
display the minor mode name in the mode line. It can also enable
or disable a minor mode keymap. Individual commands or hooks can
also check the variable's value.
If you want the minor mode to be enabled separately in each buffer,
make the variable buffer-local.
* Define a command whose name is the same as the mode variable. Its
job is to enable and disable the mode by setting the variable.
The command should accept one optional argument. If the argument
is `nil', it should toggle the mode (turn it on if it is off, and
off if it is on). Otherwise, it should turn the mode on if the
argument is a positive integer, a symbol other than `nil' or `-',
or a list whose CAR is such an integer or symbol; it should turn
the mode off otherwise.
Here is an example taken from the definition of `overwrite-mode'.
It shows the use of `overwrite-mode' as a variable which enables or
disables the mode's behavior.
(if (null arg) (not overwrite-mode)
(> (prefix-numeric-value arg) 0)))
* Add an element to `minor-mode-alist' for each minor mode (*note
Mode Line Variables::.). This element should be a list of the
Here MODE-VARIABLE is the variable that controls enablement of the
minor mode, and STRING is a short string, starting with a space,
to represent the mode in the mode line. These strings must be
short so that there is room for several of them at once.
When you add an element to `minor-mode-alist', use `assq' to check
for an existing element, to avoid duplication. For example:
(or (assq 'leif-mode minor-mode-alist)
(cons '(leif-mode " Leif") minor-mode-alist)))
automatically generated by info2www