annotate man/xemacs/major.texi @ 4894:03ab78e48ef6

Add copyright and license information based on Ben's recollections. Remove two unused internationalization programs and associated Makefile rules. See message <870180fe1001281158n556cf90eib0d6abf34a4f83d4@mail.gmail.com> in xemacs-patches for more information.
author Jerry James <james@xemacs.org>
date Thu, 28 Jan 2010 12:59:48 -0700
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