[ < ] | [ > ] | [ << ] | [Plus haut] | [ >> ] | [Top] | [Table des matières] | [Index] | [ ? ] |
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, the use of a hook at the end of the initialization function, and the use of keymaps and other tables.
In addition, there are several conventions that are specific to minor
modes. (The easiest way to follow all the conventions is to use the macro
define-minor-mode
; Defining Minor Modes.)
nil
to disable; anything else to enable).
If possible, implement the mode so that setting the variable automatically enables or disables the mode. Then the minor mode command does not need to do anything except set the variable.
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.
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). It should turn the mode on if the argument is a positive
integer, the symbol t
, or a list whose CAR is one of those. It
should turn the mode off if the argument is a negative integer or zero, the
symbol -
, or a list whose CAR is a negative integer or zero.
The meaning of other arguments is not specified.
Here is an example taken from the definition of transient-mark-mode
.
It shows the use of transient-mark-mode
as a variable that enables or
disables the mode's behavior, and also shows the proper way to toggle,
enable or disable the minor mode based on the raw prefix argument value.
(setq transient-mark-mode (if (null arg) (not transient-mark-mode) (> (prefix-numeric-value arg) 0))) |
minor-mode-alist
for each minor mode
(voir Definition of minor-mode-alist), if you want to indicate the minor
mode in the mode line. This element should be a list of the following form:
(mode-variable string) |
Here mode-variable is the variable that controls enabling 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:
(unless (assq 'leif-mode minor-mode-alist) (setq minor-mode-alist (cons '(leif-mode " Leif") minor-mode-alist))) |
or like this, using add-to-list
(voir la section Modifying List Variables):
(add-to-list 'minor-mode-alist '(leif-mode " Leif")) |
Global minor modes distributed with Emacs should if possible support
enabling and disabling via Custom (voir la section Writing Customization Definitions). To do this, the
first step is to define the mode variable with defcustom
, and specify
:type boolean
.
If just setting the variable is not sufficient to enable the mode, you
should also specify a :set
method which enables the mode by invoking
the mode command. Note in the variable's documentation string that setting
the variable other than via Custom may not take effect.
Also mark the definition with an autoload cookie (voir autoload cookie),
and specify a :require
so that customizing the variable will load the
library that defines the mode. This will copy suitable definitions into
‘loaddefs.el’ so that users can use customize-option
to enable
the mode. For example:
;;;###autoload (defcustom msb-mode nil "Toggle msb-mode. Setting this variable directly does not take effect; use either \\[customize] or the function `msb-mode'." :set 'custom-set-minor-mode :initialize 'custom-initialize-default :version "20.4" :type 'boolean :group 'msb :require 'msb) |
[ < ] | [ > ] | [ << ] | [Plus haut] | [ >> ] | [Top] | [Table des matières] | [Index] | [ ? ] |
Ce document a été généré par Eric Reinbold le 13 Octobre 2007 en utilisant texi2html 1.78.