annotate man/xemacs/major.texi @ 2951:b694dfd2f40e

[xemacs-hg @ 2005-09-26 08:13:00 by ben] Compile Windows with gmp, ldap, postgresql, db, etc. README: Major rewrite. Document how to compile various optional libs. config.inc.samp: Update to recent versions of optional libs. Add support for gmp, db, postgresql, ldap. Turn on optimization when not debug. minitar.c: Include config.h. xemacs.mak: Figure out VC++ version and use it to set debug and browser flags appropriately. Add support for building gmp, db, postgresql, ldap. Rewrite handling of optional stuff so it is all added to single variables OPT_* rather than to various FOO_* variables. Pass -I$(SRC) to minitar.c so it compiles. Pass module sources, not objects, to make-docfile. Delete more stuff in `make clean'.
author ben
date Mon, 26 Sep 2005 08:13:00 +0000
parents 40dc584fce16
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2 @node Major Modes, Indentation, Mule, Top
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3 @chapter Major Modes
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4 @cindex major modes
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5 @kindex TAB
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
6 @kindex DEL
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
7 @kindex LFD
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
8
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
9 Emacs has many different @dfn{major modes}, each of which customizes
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
10 Emacs for editing text of a particular sort. The major modes are mutually
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
11 exclusive; at any time, each buffer has one major mode. The mode line
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
12 normally contains the name of the current major mode in parentheses.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
13 @xref{Mode Line}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
14
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
15 The least specialized major mode is called @dfn{Fundamental mode}. This
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
16 mode has no mode-specific redefinitions or variable settings. Each
2736
40dc584fce16 [xemacs-hg @ 2005-04-18 03:59:48 by stephent]
stephent
parents: 2522
diff changeset
17 Emacs command behaves in its most generic manner, and each option is in its
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
18 default state. For editing any specific type of text, such as Lisp code or
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
19 English text, you should switch to the appropriate major mode, such as Lisp
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
20 mode or Text mode.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
21
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
22 Selecting a major mode changes the meanings of a few keys to become
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
23 more specifically adapted to the language being edited. @key{TAB},
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
24 @key{DEL}, and @key{LFD} are changed frequently. In addition, commands
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
25 which handle comments use the mode to determine how to delimit comments.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
26 Many major modes redefine the syntactical properties of characters
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
27 appearing in the buffer. @xref{Syntax}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
28
2522
52dc9b940348 [xemacs-hg @ 2005-01-28 00:12:32 by ben]
ben
parents: 428
diff changeset
29 The major modes fall into three major groups. Programming modes
2736
40dc584fce16 [xemacs-hg @ 2005-04-18 03:59:48 by stephent]
stephent
parents: 2522
diff changeset
30 (@pxref{Programs}) are for specific programming languages. They tend to
40dc584fce16 [xemacs-hg @ 2005-04-18 03:59:48 by stephent]
stephent
parents: 2522
diff changeset
31 be line-oriented, often enforcing indentation. They emphasize
40dc584fce16 [xemacs-hg @ 2005-04-18 03:59:48 by stephent]
stephent
parents: 2522
diff changeset
32 facilities for creating and displaying structure. Text modes
2522
52dc9b940348 [xemacs-hg @ 2005-01-28 00:12:32 by ben]
ben
parents: 428
diff changeset
33 (like Nroff mode, @TeX{} mode, Outline mode, XML mode, etc.@:) are for
52dc9b940348 [xemacs-hg @ 2005-01-28 00:12:32 by ben]
ben
parents: 428
diff changeset
34 editing human readable text. The remaining major modes are not intended
52dc9b940348 [xemacs-hg @ 2005-01-28 00:12:32 by ben]
ben
parents: 428
diff changeset
35 for direct use in editing user files; they are used in buffers created
52dc9b940348 [xemacs-hg @ 2005-01-28 00:12:32 by ben]
ben
parents: 428
diff changeset
36 by Emacs for specific purposes. Examples of such modes include Dired
52dc9b940348 [xemacs-hg @ 2005-01-28 00:12:32 by ben]
ben
parents: 428
diff changeset
37 mode which is used for buffers made by Dired (@pxref{Dired}), Mail mode
52dc9b940348 [xemacs-hg @ 2005-01-28 00:12:32 by ben]
ben
parents: 428
diff changeset
38 for buffers made by @kbd{C-x m} (@pxref{Sending Mail}), and Shell mode
52dc9b940348 [xemacs-hg @ 2005-01-28 00:12:32 by ben]
ben
parents: 428
diff changeset
39 for buffers used for communicating with an inferior shell process
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
40 (@pxref{Interactive Shell}).
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
41
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
42 Most programming language major modes specify that only blank lines
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
43 separate paragraphs. This is so that the paragraph commands remain useful.
2736
40dc584fce16 [xemacs-hg @ 2005-04-18 03:59:48 by stephent]
stephent
parents: 2522
diff changeset
44 @xref{Paragraphs}. They also cause Auto Fill minor mode to use the
40dc584fce16 [xemacs-hg @ 2005-04-18 03:59:48 by stephent]
stephent
parents: 2522
diff changeset
45 definition of
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
46 @key{TAB} to indent the new lines it creates. This is because most lines
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
47 in a program are usually indented. @xref{Indentation}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
48
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
49 @menu
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
50 * Choosing Modes:: How major modes are specified or chosen.
2522
52dc9b940348 [xemacs-hg @ 2005-01-28 00:12:32 by ben]
ben
parents: 428
diff changeset
51 * Mode Hooks:: Customizing a major mode
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
52 @end menu
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
53
2522
52dc9b940348 [xemacs-hg @ 2005-01-28 00:12:32 by ben]
ben
parents: 428
diff changeset
54 @node Choosing Modes, Mode Hooks, Major Modes, Major Modes
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
55 @section Choosing Major Modes
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
56
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
57 You can select a major mode explicitly for the current buffer, but
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
58 most of the time Emacs determines which mode to use based on the file
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
59 name or some text in the file.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
60
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
61 Use a @kbd{M-x} command to explicitly select a new major mode. Add
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
62 @code{-mode} to the name of a major mode to get the name of a command to
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
63 select that mode. For example, to enter Lisp mode, execute @kbd{M-x
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
64 lisp-mode}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
65
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
66 @vindex auto-mode-alist
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
67 When you visit a file, Emacs usually chooses the right major mode
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
68 based on the file's name. For example, files whose names end in
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
69 @code{.c} are edited in C mode. The variable @code{auto-mode-alist}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
70 controls the correspondence between file names and major mode. Its value
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
71 is a list in which each element has the form:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
72
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
73 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
74 (@var{regexp} . @var{mode-function})
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
75 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
76
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
77 @noindent
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
78 For example, one element normally found in the list has the form
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
79 @code{(@t{"\\.c$"} . c-mode)}. It is responsible for selecting C mode
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
80 for files whose names end in @file{.c}. (Note that @samp{\\} is needed in
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
81 Lisp syntax to include a @samp{\} in the string, which is needed to
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
82 suppress the special meaning of @samp{.} in regexps.) The only practical
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
83 way to change this variable is with Lisp code.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
84
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
85 You can specify which major mode should be used for editing a certain
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
86 file by a special sort of text in the first non-blank line of the file.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
87 The mode name should appear in this line both preceded and followed by
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
88 @samp{-*-}. Other text may appear on the line as well. For example,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
89
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
90 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
91 ;-*-Lisp-*-
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
92 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
93
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
94 @noindent
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
95 tells Emacs to use Lisp mode. Note how the semicolon is used to make Lisp
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
96 treat this line as a comment. Such an explicit specification overrides any
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
97 default mode based on the file name.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
98
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
99 Another format of mode specification is:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
100
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
101 @example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
102 -*-Mode: @var{modename};-*-
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
103 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
104
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
105 @noindent
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
106 which allows other things besides the major mode name to be specified.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
107 However, Emacs does not look for anything except the mode name.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
108
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
109 The major mode can also be specified in a local variables list.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
110 @xref{File Variables}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
111
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
112 @vindex default-major-mode
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
113 When you visit a file that does not specify a major mode to use, or
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
114 when you create a new buffer with @kbd{C-x b}, Emacs uses the major mode
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
115 specified by the variable @code{default-major-mode}. Normally this
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
116 value is the symbol @code{fundamental-mode}, which specifies Fundamental
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
117 mode. If @code{default-major-mode} is @code{nil}, the major mode is
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
118 taken from the previously selected buffer.
2522
52dc9b940348 [xemacs-hg @ 2005-01-28 00:12:32 by ben]
ben
parents: 428
diff changeset
119
52dc9b940348 [xemacs-hg @ 2005-01-28 00:12:32 by ben]
ben
parents: 428
diff changeset
120 @node Mode Hooks, , Choosing Modes, Major Modes
52dc9b940348 [xemacs-hg @ 2005-01-28 00:12:32 by ben]
ben
parents: 428
diff changeset
121 @section Mode Hook Variables
52dc9b940348 [xemacs-hg @ 2005-01-28 00:12:32 by ben]
ben
parents: 428
diff changeset
122
52dc9b940348 [xemacs-hg @ 2005-01-28 00:12:32 by ben]
ben
parents: 428
diff changeset
123 @cindex Hook variables
52dc9b940348 [xemacs-hg @ 2005-01-28 00:12:32 by ben]
ben
parents: 428
diff changeset
124 @cindex mode hook
52dc9b940348 [xemacs-hg @ 2005-01-28 00:12:32 by ben]
ben
parents: 428
diff changeset
125 @findex add-hook
52dc9b940348 [xemacs-hg @ 2005-01-28 00:12:32 by ben]
ben
parents: 428
diff changeset
126 @findex remove-hook
52dc9b940348 [xemacs-hg @ 2005-01-28 00:12:32 by ben]
ben
parents: 428
diff changeset
127 @vindex lisp-mode-hook
52dc9b940348 [xemacs-hg @ 2005-01-28 00:12:32 by ben]
ben
parents: 428
diff changeset
128 @vindex emacs-lisp-mode-hook
52dc9b940348 [xemacs-hg @ 2005-01-28 00:12:32 by ben]
ben
parents: 428
diff changeset
129 @vindex lisp-interaction-mode-hook
52dc9b940348 [xemacs-hg @ 2005-01-28 00:12:32 by ben]
ben
parents: 428
diff changeset
130 @vindex scheme-mode-hook
52dc9b940348 [xemacs-hg @ 2005-01-28 00:12:32 by ben]
ben
parents: 428
diff changeset
131
52dc9b940348 [xemacs-hg @ 2005-01-28 00:12:32 by ben]
ben
parents: 428
diff changeset
132 The last step taken by a major mode, by convention, is to invoke a
2736
40dc584fce16 [xemacs-hg @ 2005-04-18 03:59:48 by stephent]
stephent
parents: 2522
diff changeset
133 list of user supplied functions that are stored in a @dfn{hook}
40dc584fce16 [xemacs-hg @ 2005-04-18 03:59:48 by stephent]
stephent
parents: 2522
diff changeset
134 variable. This allows a user to further customize the major mode, and
40dc584fce16 [xemacs-hg @ 2005-04-18 03:59:48 by stephent]
stephent
parents: 2522
diff changeset
135 is particularly convenient for associating minor modes with major modes.
40dc584fce16 [xemacs-hg @ 2005-04-18 03:59:48 by stephent]
stephent
parents: 2522
diff changeset
136 @xref{Minor Modes}. For example, to automatically turn on the Auto Fill
40dc584fce16 [xemacs-hg @ 2005-04-18 03:59:48 by stephent]
stephent
parents: 2522
diff changeset
137 minor mode when Text mode is invoked, add the following code to the
40dc584fce16 [xemacs-hg @ 2005-04-18 03:59:48 by stephent]
stephent
parents: 2522
diff changeset
138 initialization file (@pxref{Init File})
2522
52dc9b940348 [xemacs-hg @ 2005-01-28 00:12:32 by ben]
ben
parents: 428
diff changeset
139
52dc9b940348 [xemacs-hg @ 2005-01-28 00:12:32 by ben]
ben
parents: 428
diff changeset
140 @example
52dc9b940348 [xemacs-hg @ 2005-01-28 00:12:32 by ben]
ben
parents: 428
diff changeset
141 (add-hook 'text-mode-hook 'turn-on-auto-fill)
52dc9b940348 [xemacs-hg @ 2005-01-28 00:12:32 by ben]
ben
parents: 428
diff changeset
142 @end example
52dc9b940348 [xemacs-hg @ 2005-01-28 00:12:32 by ben]
ben
parents: 428
diff changeset
143
2736
40dc584fce16 [xemacs-hg @ 2005-04-18 03:59:48 by stephent]
stephent
parents: 2522
diff changeset
144 Derived modes often @dfn{inherit} the parent mode's hooks. For
40dc584fce16 [xemacs-hg @ 2005-04-18 03:59:48 by stephent]
stephent
parents: 2522
diff changeset
145 example, Texinfo Mode is derived from Text Mode, so customizing
40dc584fce16 [xemacs-hg @ 2005-04-18 03:59:48 by stephent]
stephent
parents: 2522
diff changeset
146 @code{text-mode-hook} as above will also enable Auto Fill minor mode in
40dc584fce16 [xemacs-hg @ 2005-04-18 03:59:48 by stephent]
stephent
parents: 2522
diff changeset
147 buffers containing Texinfo files.
40dc584fce16 [xemacs-hg @ 2005-04-18 03:59:48 by stephent]
stephent
parents: 2522
diff changeset
148
40dc584fce16 [xemacs-hg @ 2005-04-18 03:59:48 by stephent]
stephent
parents: 2522
diff changeset
149 Hooks are also commonly used to set up buffer local variables
40dc584fce16 [xemacs-hg @ 2005-04-18 03:59:48 by stephent]
stephent
parents: 2522
diff changeset
150 (@pxref{Locals}).
40dc584fce16 [xemacs-hg @ 2005-04-18 03:59:48 by stephent]
stephent
parents: 2522
diff changeset
151
40dc584fce16 [xemacs-hg @ 2005-04-18 03:59:48 by stephent]
stephent
parents: 2522
diff changeset
152 The name of the hook variable is created by appending the string
40dc584fce16 [xemacs-hg @ 2005-04-18 03:59:48 by stephent]
stephent
parents: 2522
diff changeset
153 @code{-hook} to the name of the function used to invoke the major mode.
40dc584fce16 [xemacs-hg @ 2005-04-18 03:59:48 by stephent]
stephent
parents: 2522
diff changeset
154 For example, as seen above, the hook variable used by Text Mode would be
40dc584fce16 [xemacs-hg @ 2005-04-18 03:59:48 by stephent]
stephent
parents: 2522
diff changeset
155 named @code{text-mode-hook}. By convention the mode hook function
40dc584fce16 [xemacs-hg @ 2005-04-18 03:59:48 by stephent]
stephent
parents: 2522
diff changeset
156 receives no arguments. If a hook variable does not exist, or it has the
40dc584fce16 [xemacs-hg @ 2005-04-18 03:59:48 by stephent]
stephent
parents: 2522
diff changeset
157 value @code{nil}, the major mode simply ignores it.
40dc584fce16 [xemacs-hg @ 2005-04-18 03:59:48 by stephent]
stephent
parents: 2522
diff changeset
158
40dc584fce16 [xemacs-hg @ 2005-04-18 03:59:48 by stephent]
stephent
parents: 2522
diff changeset
159 The recommended way to add functions to a hook variable is with the
40dc584fce16 [xemacs-hg @ 2005-04-18 03:59:48 by stephent]
stephent
parents: 2522
diff changeset
160 @code{add-hook} function.
40dc584fce16 [xemacs-hg @ 2005-04-18 03:59:48 by stephent]
stephent
parents: 2522
diff changeset
161 @code{add-hook} will check that the function is not already
2522
52dc9b940348 [xemacs-hg @ 2005-01-28 00:12:32 by ben]
ben
parents: 428
diff changeset
162 listed in the hook variable before adding it. It will also create a hook
52dc9b940348 [xemacs-hg @ 2005-01-28 00:12:32 by ben]
ben
parents: 428
diff changeset
163 variable with the value @code{nil} if one does not exist before adding
52dc9b940348 [xemacs-hg @ 2005-01-28 00:12:32 by ben]
ben
parents: 428
diff changeset
164 the function. @code{add-hook} adds functions to the front of the hook
52dc9b940348 [xemacs-hg @ 2005-01-28 00:12:32 by ben]
ben
parents: 428
diff changeset
165 variable list. This means that the last hook added is run first by the
52dc9b940348 [xemacs-hg @ 2005-01-28 00:12:32 by ben]
ben
parents: 428
diff changeset
166 major mode. It is considered very poor style to write hook functions
52dc9b940348 [xemacs-hg @ 2005-01-28 00:12:32 by ben]
ben
parents: 428
diff changeset
167 that depend on the order that hooks are executed.
52dc9b940348 [xemacs-hg @ 2005-01-28 00:12:32 by ben]
ben
parents: 428
diff changeset
168
52dc9b940348 [xemacs-hg @ 2005-01-28 00:12:32 by ben]
ben
parents: 428
diff changeset
169 Hooks can be removed from hook variables with @code{remove-hook}.
52dc9b940348 [xemacs-hg @ 2005-01-28 00:12:32 by ben]
ben
parents: 428
diff changeset
170
52dc9b940348 [xemacs-hg @ 2005-01-28 00:12:32 by ben]
ben
parents: 428
diff changeset
171