[ < ] | [ > ] | [ << ] | [Plus haut] | [ >> ] | [Top] | [Table des matières] | [Index] | [ ? ] |
When you define a variable whose value is a function, or a list of functions, use a name that ends in ‘-function’ or ‘-functions’, respectively.
There are several other variable name conventions; here is a complete list:
The variable is a normal hook (voir la section Hooks).
The value is a function.
The value is a list of functions.
The value is a form (an expression).
The value is a list of forms (expressions).
The value is a predicate—a function of one argument that returns
non-nil
for “good” arguments and nil
for “bad” arguments.
The value is significant only as to whether it is nil
or not.
The value is a program name.
The value is a whole shell command.
The value specifies options for a command.
When you define a variable, always consider whether you should mark it as “risky”; see File Local Variables.
When defining and initializing a variable that holds a complicated value
(such as a keymap with bindings in it), it's best to put the entire
computation of the value into the defvar
, like this:
(defvar my-mode-map (let ((map (make-sparse-keymap))) (define-key map "\C-c\C-a" 'my-command) … map) docstring) |
This method has several benefits. First, if the user quits while loading
the file, the variable is either still uninitialized or initialized
properly, never in-between. If it is still uninitialized, reloading the
file will initialize it properly. Second, reloading the file once the
variable is initialized will not alter it; that is important if the user has
run hooks to alter part of the contents (such as, to rebind keys). Third,
evaluating the defvar
form with C-M-x will reinitialize
the map completely.
Putting so much code in the defvar
form has one disadvantage: it puts
the documentation string far away from the line which names the variable.
Here's a safe way to avoid that:
(defvar my-mode-map nil docstring) (unless my-mode-map (let ((map (make-sparse-keymap))) (define-key map "\C-c\C-a" 'my-command) … (setq my-mode-map map))) |
This has all the same advantages as putting the initialization inside the
defvar
, except that you must type C-M-x twice, once on each
form, if you do want to reinitialize the variable.
But be careful not to write the code like this:
(defvar my-mode-map nil docstring) (unless my-mode-map (setq my-mode-map (make-sparse-keymap)) (define-key my-mode-map "\C-c\C-a" 'my-command) …) |
This code sets the variable, then alters it, but it does so in more than one
step. If the user quits just after the setq
, that leaves the
variable neither correctly initialized nor void nor nil
. Once that
happens, reloading the file will not initialize the variable; it will remain
incomplete.
[ < ] | [ > ] | [ << ] | [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.