Add 2008 to copyright years.
[bpt/emacs.git] / lispref / modes.texi
CommitLineData
a44af9f2
RS
1@c -*-texinfo-*-
2@c This is part of the GNU Emacs Lisp Reference Manual.
b3d90e46
GM
3@c Copyright (C) 1990, 1991, 1992, 1993, 1994, 1995, 1998, 1999, 2001,
4@c 2002, 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
a44af9f2
RS
5@c See the file elisp.texi for copying conditions.
6@setfilename ../info/modes
3ebe0346 7@node Modes, Documentation, Keymaps, Top
a44af9f2
RS
8@chapter Major and Minor Modes
9@cindex mode
10
11 A @dfn{mode} is a set of definitions that customize Emacs and can be
12turned on and off while you edit. There are two varieties of modes:
13@dfn{major modes}, which are mutually exclusive and used for editing
14particular kinds of text, and @dfn{minor modes}, which provide features
15that users can enable individually.
16
17 This chapter describes how to write both major and minor modes, how to
18indicate them in the mode line, and how they run hooks supplied by the
19user. For related topics such as keymaps and syntax tables, see
20@ref{Keymaps}, and @ref{Syntax Tables}.
21
22@menu
302691ab 23* Hooks:: How to use hooks; how to write code that provides hooks.
a44af9f2
RS
24* Major Modes:: Defining major modes.
25* Minor Modes:: Defining minor modes.
26* Mode Line Format:: Customizing the text that appears in the mode line.
f9f59935
RS
27* Imenu:: How a mode can provide a menu
28 of definitions in the buffer.
29* Font Lock Mode:: How modes can highlight text according to syntax.
f730cc62
LH
30* Desktop Save Mode:: How modes can have buffer state saved between
31 Emacs sessions.
a44af9f2
RS
32@end menu
33
302691ab
LT
34@node Hooks
35@section Hooks
36@cindex hooks
37
38 A @dfn{hook} is a variable where you can store a function or functions
39to be called on a particular occasion by an existing program. Emacs
40provides hooks for the sake of customization. Most often, hooks are set
41up in the init file (@pxref{Init File}), but Lisp programs can set them also.
42@xref{Standard Hooks}, for a list of standard hook variables.
43
44@cindex normal hook
45 Most of the hooks in Emacs are @dfn{normal hooks}. These variables
34e5974a
CY
46contain lists of functions to be called with no arguments. By
47convention, whenever the hook name ends in @samp{-hook}, that tells
48you it is normal. We try to make all hooks normal, as much as
49possible, so that you can use them in a uniform way.
50
51 Every major mode function is supposed to run a normal hook called
52the @dfn{mode hook} as the one of the last steps of initialization.
53This makes it easy for a user to customize the behavior of the mode,
54by overriding the buffer-local variable assignments already made by
02a2b2ad
RS
55the mode. Most minor mode functions also run a mode hook at the end.
56But hooks are used in other contexts too. For example, the hook
34e5974a
CY
57@code{suspend-hook} runs just before Emacs suspends itself
58(@pxref{Suspending Emacs}).
302691ab
LT
59
60 The recommended way to add a hook function to a normal hook is by
61calling @code{add-hook} (see below). The hook functions may be any of
62the valid kinds of functions that @code{funcall} accepts (@pxref{What
63Is a Function}). Most normal hook variables are initially void;
64@code{add-hook} knows how to deal with this. You can add hooks either
65globally or buffer-locally with @code{add-hook}.
66
67@cindex abnormal hook
68 If the hook variable's name does not end with @samp{-hook}, that
02a2b2ad
RS
69indicates it is probably an @dfn{abnormal hook}. That means the hook
70functions are called with arguments, or their return values are used
71in some way. The hook's documentation says how the functions are
72called. You can use @code{add-hook} to add a function to an abnormal
73hook, but you must write the function to follow the hook's calling
74convention.
302691ab 75
02a2b2ad
RS
76 By convention, abnormal hook names end in @samp{-functions} or
77@samp{-hooks}. If the variable's name ends in @samp{-function}, then
78its value is just a single function, not a list of functions.
302691ab
LT
79
80 Here's an example that uses a mode hook to turn on Auto Fill mode when
81in Lisp Interaction mode:
82
83@example
84(add-hook 'lisp-interaction-mode-hook 'turn-on-auto-fill)
85@end example
86
87 At the appropriate time, Emacs uses the @code{run-hooks} function to
b4a83bb8 88run particular hooks.
302691ab
LT
89
90@defun run-hooks &rest hookvars
91This function takes one or more normal hook variable names as
92arguments, and runs each hook in turn. Each argument should be a
93symbol that is a normal hook variable. These arguments are processed
94in the order specified.
95
34e5974a 96If a hook variable has a non-@code{nil} value, that value should be a
02a2b2ad
RS
97list of functions. @code{run-hooks} calls all the functions, one by
98one, with no arguments.
34e5974a 99
02a2b2ad
RS
100The hook variable's value can also be a single function---either a
101lambda expression or a symbol with a function definition---which
102@code{run-hooks} calls. But this usage is obsolete.
302691ab
LT
103@end defun
104
105@defun run-hook-with-args hook &rest args
106This function is the way to run an abnormal hook and always call all
107of the hook functions. It calls each of the hook functions one by
108one, passing each of them the arguments @var{args}.
109@end defun
110
111@defun run-hook-with-args-until-failure hook &rest args
112This function is the way to run an abnormal hook until one of the hook
113functions fails. It calls each of the hook functions, passing each of
114them the arguments @var{args}, until some hook function returns
115@code{nil}. It then stops and returns @code{nil}. If none of the
116hook functions return @code{nil}, it returns a non-@code{nil} value.
117@end defun
118
119@defun run-hook-with-args-until-success hook &rest args
120This function is the way to run an abnormal hook until a hook function
121succeeds. It calls each of the hook functions, passing each of them
122the arguments @var{args}, until some hook function returns
123non-@code{nil}. Then it stops, and returns whatever was returned by
124the last hook function that was called. If all hook functions return
125@code{nil}, it returns @code{nil} as well.
126@end defun
127
128@defun add-hook hook function &optional append local
129This function is the handy way to add function @var{function} to hook
130variable @var{hook}. You can use it for abnormal hooks as well as for
131normal hooks. @var{function} can be any Lisp function that can accept
132the proper number of arguments for @var{hook}. For example,
133
134@example
135(add-hook 'text-mode-hook 'my-text-hook-function)
136@end example
137
138@noindent
139adds @code{my-text-hook-function} to the hook called @code{text-mode-hook}.
140
141If @var{function} is already present in @var{hook} (comparing using
142@code{equal}), then @code{add-hook} does not add it a second time.
143
144It is best to design your hook functions so that the order in which they
145are executed does not matter. Any dependence on the order is ``asking
827b7ee7 146for trouble.'' However, the order is predictable: normally,
302691ab
LT
147@var{function} goes at the front of the hook list, so it will be
148executed first (barring another @code{add-hook} call). If the optional
149argument @var{append} is non-@code{nil}, the new hook function goes at
150the end of the hook list and will be executed last.
151
152@code{add-hook} can handle the cases where @var{hook} is void or its
153value is a single function; it sets or changes the value to a list of
154functions.
155
156If @var{local} is non-@code{nil}, that says to add @var{function} to
157the buffer-local hook list instead of to the global hook list. If
158needed, this makes the hook buffer-local and adds @code{t} to the
159buffer-local value. The latter acts as a flag to run the hook
160functions in the default value as well as in the local value.
161@end defun
162
163@defun remove-hook hook function &optional local
164This function removes @var{function} from the hook variable
165@var{hook}. It compares @var{function} with elements of @var{hook}
166using @code{equal}, so it works for both symbols and lambda
167expressions.
168
169If @var{local} is non-@code{nil}, that says to remove @var{function}
170from the buffer-local hook list instead of from the global hook list.
171@end defun
172
a44af9f2
RS
173@node Major Modes
174@section Major Modes
175@cindex major mode
a44af9f2
RS
176
177 Major modes specialize Emacs for editing particular kinds of text.
22c94cf2
RS
178Each buffer has only one major mode at a time. For each major mode
179there is a function to switch to that mode in the current buffer; its
180name should end in @samp{-mode}. These functions work by setting
181buffer-local variable bindings and other data associated with the
182buffer, such as a local keymap. The effect lasts until you switch
183to another major mode in the same buffer.
a44af9f2 184
302691ab
LT
185@menu
186* Major Mode Basics::
187* Major Mode Conventions:: Coding conventions for keymaps, etc.
302691ab
LT
188* Auto Major Mode:: How Emacs chooses the major mode automatically.
189* Mode Help:: Finding out how to use a mode.
190* Derived Modes:: Defining a new major mode based on another major
191 mode.
192* Generic Modes:: Defining a simple major mode that supports
193 comment syntax and Font Lock mode.
194* Mode Hooks:: Hooks run at the end of major mode functions.
34e5974a 195* Example Major Modes:: Text mode and Lisp modes.
302691ab
LT
196@end menu
197
198@node Major Mode Basics
199@subsection Major Mode Basics
200@cindex Fundamental mode
201
a44af9f2
RS
202 The least specialized major mode is called @dfn{Fundamental mode}.
203This mode has no mode-specific definitions or variable settings, so each
204Emacs command behaves in its default manner, and each option is in its
205default state. All other major modes redefine various keys and options.
206For example, Lisp Interaction mode provides special key bindings for
969fe9b5 207@kbd{C-j} (@code{eval-print-last-sexp}), @key{TAB}
a44af9f2
RS
208(@code{lisp-indent-line}), and other keys.
209
210 When you need to write several editing commands to help you perform a
211specialized editing task, creating a new major mode is usually a good
212idea. In practice, writing a major mode is easy (in contrast to
213writing a minor mode, which is often difficult).
214
34e5974a
CY
215 If the new mode is similar to an old one, it is often unwise to
216modify the old one to serve two purposes, since it may become harder
217to use and maintain. Instead, copy and rename an existing major mode
218definition and alter the copy---or use @code{define-derived-mode} to
219define a @dfn{derived mode} (@pxref{Derived Modes}). For example,
220Rmail Edit mode is a major mode that is very similar to Text mode
221except that it provides two additional commands. Its definition is
222distinct from that of Text mode, but uses that of Text mode.
a44af9f2 223
5858d11f 224 Even if the new mode is not an obvious derivative of any other mode,
0b41c65c
SM
225it is convenient to use @code{define-derived-mode} with a @code{nil}
226parent argument, since it automatically enforces the most important
227coding conventions for you.
5858d11f 228
44607ed4 229 For a very simple programming language major mode that handles
28e7aba4
LK
230comments and fontification, you can use @code{define-generic-mode}.
231@xref{Generic Modes}.
44607ed4 232
969fe9b5
RS
233 Rmail Edit mode offers an example of changing the major mode
234temporarily for a buffer, so it can be edited in a different way (with
1911e6e5 235ordinary Emacs commands rather than Rmail commands). In such cases, the
8241495d 236temporary major mode usually provides a command to switch back to the
969fe9b5
RS
237buffer's usual mode (Rmail mode, in this case). You might be tempted to
238present the temporary redefinitions inside a recursive edit and restore
239the usual ones when the user exits; but this is a bad idea because it
240constrains the user's options when it is done in more than one buffer:
241recursive edits must be exited most-recently-entered first. Using an
242alternative major mode avoids this limitation. @xref{Recursive
a44af9f2
RS
243Editing}.
244
8241495d
RS
245 The standard GNU Emacs Lisp library directory tree contains the code
246for several major modes, in files such as @file{text-mode.el},
a44af9f2 247@file{texinfo.el}, @file{lisp-mode.el}, @file{c-mode.el}, and
a40d4712
PR
248@file{rmail.el}. They are found in various subdirectories of the
249@file{lisp} directory. You can study these libraries to see how modes
250are written. Text mode is perhaps the simplest major mode aside from
a44af9f2
RS
251Fundamental mode. Rmail mode is a complicated and specialized mode.
252
a44af9f2
RS
253@node Major Mode Conventions
254@subsection Major Mode Conventions
ad8d30b3
EZ
255@cindex major mode conventions
256@cindex conventions for writing major modes
a44af9f2
RS
257
258 The code for existing major modes follows various coding conventions,
259including conventions for local keymap and syntax table initialization,
260global names, and hooks. Please follow these conventions when you
2419927e
RS
261define a new major mode. (Fundamental mode is an exception to many
262of these conventions, because its definition is to present the global
263state of Emacs.)
008c5e26
RS
264
265 This list of conventions is only partial, because each major mode
266should aim for consistency in general with other Emacs major modes.
267This makes Emacs as a whole more coherent. It is impossible to list
268here all the possible points where this issue might come up; if the
269Emacs developers point out an area where your major mode deviates from
270the usual conventions, please make it compatible.
a44af9f2
RS
271
272@itemize @bullet
273@item
274Define a command whose name ends in @samp{-mode}, with no arguments,
275that switches to the new mode in the current buffer. This command
969fe9b5
RS
276should set up the keymap, syntax table, and buffer-local variables in an
277existing buffer, without changing the buffer's contents.
a44af9f2
RS
278
279@item
de9f0bd9 280Write a documentation string for this command that describes the
a44af9f2
RS
281special commands available in this mode. @kbd{C-h m}
282(@code{describe-mode}) in your mode will display this string.
283
284The documentation string may include the special documentation
285substrings, @samp{\[@var{command}]}, @samp{\@{@var{keymap}@}}, and
86494bd5 286@samp{\<@var{keymap}>}, which enable the documentation to adapt
a44af9f2
RS
287automatically to the user's own key bindings. @xref{Keys in
288Documentation}.
289
290@item
291The major mode command should start by calling
34e5974a
CY
292@code{kill-all-local-variables}. This runs the normal hook
293@code{change-major-mode-hook}, then gets rid of the buffer-local
294variables of the major mode previously in effect. @xref{Creating
295Buffer-Local}.
a44af9f2
RS
296
297@item
298The major mode command should set the variable @code{major-mode} to the
299major mode command symbol. This is how @code{describe-mode} discovers
300which documentation to print.
301
302@item
303The major mode command should set the variable @code{mode-name} to the
969fe9b5
RS
304``pretty'' name of the mode, as a string. This string appears in the
305mode line.
a44af9f2
RS
306
307@item
308@cindex functions in modes
309Since all global names are in the same name space, all the global
310variables, constants, and functions that are part of the mode should
311have names that start with the major mode name (or with an abbreviation
a4b12c74 312of it if the name is long). @xref{Coding Conventions}.
a44af9f2 313
008c5e26
RS
314@item
315In a major mode for editing some kind of structured text, such as a
316programming language, indentation of text according to structure is
317probably useful. So the mode should set @code{indent-line-function}
318to a suitable function, and probably customize other variables
319for indentation.
320
a44af9f2
RS
321@item
322@cindex keymaps in modes
323The major mode should usually have its own keymap, which is used as the
969fe9b5
RS
324local keymap in all buffers in that mode. The major mode command should
325call @code{use-local-map} to install this local map. @xref{Active
326Keymaps}, for more information.
a44af9f2 327
969fe9b5 328This keymap should be stored permanently in a global variable named
a44af9f2 329@code{@var{modename}-mode-map}. Normally the library that defines the
de9f0bd9 330mode sets this variable.
a44af9f2 331
23ce41fc
RS
332@xref{Tips for Defining}, for advice about how to write the code to set
333up the mode's keymap variable.
334
a4b12c74
RS
335@item
336The key sequences bound in a major mode keymap should usually start with
969fe9b5 337@kbd{C-c}, followed by a control character, a digit, or @kbd{@{},
a4b12c74
RS
338@kbd{@}}, @kbd{<}, @kbd{>}, @kbd{:} or @kbd{;}. The other punctuation
339characters are reserved for minor modes, and ordinary letters are
340reserved for users.
341
e0dbfecc
RS
342A major mode can also rebind the keys @kbd{M-n}, @kbd{M-p} and
343@kbd{M-s}. The bindings for @kbd{M-n} and @kbd{M-p} should normally
344be some kind of ``moving forward and backward,'' but this does not
345necessarily mean cursor motion.
346
347It is legitimate for a major mode to rebind a standard key sequence if
348it provides a command that does ``the same job'' in a way better
349suited to the text this mode is used for. For example, a major mode
350for editing a programming language might redefine @kbd{C-M-a} to
351``move to the beginning of a function'' in a way that works better for
352that language.
353
354It is also legitimate for a major mode to rebind a standard key
355sequence whose standard meaning is rarely useful in that mode. For
356instance, minibuffer modes rebind @kbd{M-r}, whose standard meaning is
357rarely of any use in the minibuffer. Major modes such as Dired or
358Rmail that do not allow self-insertion of text can reasonably redefine
359letters and other printing characters as special commands.
a4b12c74 360
c2e903c0 361@item
34e5974a 362Major modes modes for editing text should not define @key{RET} to do
02a2b2ad
RS
363anything other than insert a newline. However, it is ok for
364specialized modes for text that users don't directly edit, such as
365Dired and Info modes, to redefine @key{RET} to do something entirely
366different.
008c5e26
RS
367
368@item
2a233172 369Major modes should not alter options that are primarily a matter of user
008c5e26
RS
370preference, such as whether Auto-Fill mode is enabled. Leave this to
371each user to decide. However, a major mode should customize other
372variables so that Auto-Fill mode will work usefully @emph{if} the user
373decides to use it.
c2e903c0 374
a44af9f2
RS
375@item
376@cindex syntax tables in modes
377The mode may have its own syntax table or may share one with other
378related modes. If it has its own syntax table, it should store this in
de9f0bd9 379a variable named @code{@var{modename}-mode-syntax-table}. @xref{Syntax
a44af9f2
RS
380Tables}.
381
be9345cf
RS
382@item
383If the mode handles a language that has a syntax for comments, it should
384set the variables that define the comment syntax. @xref{Options for
385Comments,, Options Controlling Comments, emacs, The GNU Emacs Manual}.
386
a44af9f2
RS
387@item
388@cindex abbrev tables in modes
389The mode may have its own abbrev table or may share one with other
ec9b0882
RS
390related modes. If it has its own abbrev table, it should store this
391in a variable named @code{@var{modename}-mode-abbrev-table}. If the
392major mode command defines any abbrevs itself, it should pass @code{t}
393for the @var{system-flag} argument to @code{define-abbrev}.
302691ab 394@xref{Defining Abbrevs}.
a44af9f2 395
be9345cf 396@item
be9345cf
RS
397The mode should specify how to do highlighting for Font Lock mode, by
398setting up a buffer-local value for the variable
969fe9b5 399@code{font-lock-defaults} (@pxref{Font Lock Mode}).
be9345cf
RS
400
401@item
be9345cf
RS
402The mode should specify how Imenu should find the definitions or
403sections of a buffer, by setting up a buffer-local value for the
342fd6cd 404variable @code{imenu-generic-expression}, for the two variables
10ee4e90
LK
405@code{imenu-prev-index-position-function} and
406@code{imenu-extract-index-name-function}, or for the variable
969fe9b5 407@code{imenu-create-index-function} (@pxref{Imenu}).
be9345cf 408
e54eeb44
RS
409@item
410The mode can specify a local value for
411@code{eldoc-documentation-function} to tell ElDoc mode how to handle
412this mode.
413
de9f0bd9 414@item
969fe9b5
RS
415Use @code{defvar} or @code{defcustom} to set mode-related variables, so
416that they are not reinitialized if they already have a value. (Such
417reinitialization could discard customizations made by the user.)
de9f0bd9 418
a44af9f2
RS
419@item
420@cindex buffer-local variables in modes
421To make a buffer-local binding for an Emacs customization variable, use
422@code{make-local-variable} in the major mode command, not
423@code{make-variable-buffer-local}. The latter function would make the
424variable local to every buffer in which it is subsequently set, which
425would affect buffers that do not use this mode. It is undesirable for a
426mode to have such global effects. @xref{Buffer-Local Variables}.
427
177c0ea7 428With rare exceptions, the only reasonable way to use
a40d4712
PR
429@code{make-variable-buffer-local} in a Lisp package is for a variable
430which is used only within that package. Using it on a variable used by
431other packages would interfere with them.
a44af9f2
RS
432
433@item
434@cindex mode hook
435@cindex major mode hook
34e5974a
CY
436Each major mode should have a normal @dfn{mode hook} named
437@code{@var{modename}-mode-hook}. The very last thing the major mode command
438should do is to call @code{run-mode-hooks}. This runs the mode hook,
439and then runs the normal hook @code{after-change-major-mode-hook}.
440@xref{Mode Hooks}.
a44af9f2
RS
441
442@item
fdba9ef4
RS
443The major mode command may start by calling some other major mode
444command (called the @dfn{parent mode}) and then alter some of its
445settings. A mode that does this is called a @dfn{derived mode}. The
446recommended way to define one is to use @code{define-derived-mode},
01f52a87
LT
447but this is not required. Such a mode should call the parent mode
448command inside a @code{delay-mode-hooks} form. (Using
a3ee0299
LT
449@code{define-derived-mode} does this automatically.) @xref{Derived
450Modes}, and @ref{Mode Hooks}.
a44af9f2
RS
451
452@item
453If something special should be done if the user switches a buffer from
f9f59935 454this mode to any other major mode, this mode can set up a buffer-local
969fe9b5 455value for @code{change-major-mode-hook} (@pxref{Creating Buffer-Local}).
a44af9f2
RS
456
457@item
458If this mode is appropriate only for specially-prepared text, then the
459major mode command symbol should have a property named @code{mode-class}
460with value @code{special}, put on as follows:
461
ace41f7d 462@kindex mode-class @r{(property)}
a44af9f2
RS
463@cindex @code{special}
464@example
465(put 'funny-mode 'mode-class 'special)
466@end example
467
468@noindent
ec9b0882
RS
469This tells Emacs that new buffers created while the current buffer is
470in Funny mode should not inherit Funny mode, in case
471@code{default-major-mode} is @code{nil}. Modes such as Dired, Rmail,
a44af9f2
RS
472and Buffer List use this feature.
473
474@item
475If you want to make the new mode the default for files with certain
476recognizable names, add an element to @code{auto-mode-alist} to select
b4a83bb8
LT
477the mode for those file names (@pxref{Auto Major Mode}). If you
478define the mode command to autoload, you should add this element in
479the same file that calls @code{autoload}. If you use an autoload
480cookie for the mode command, you can also use an autoload cookie for
481the form that adds the element (@pxref{autoload cookie}). If you do
482not autoload the mode command, it is sufficient to add the element in
483the file that contains the mode definition.
a44af9f2
RS
484
485@item
ec9b0882
RS
486In the comments that document the file, you should provide a sample
487@code{autoload} form and an example of how to add to
488@code{auto-mode-alist}, that users can include in their init files
489(@pxref{Init File}).
a44af9f2
RS
490
491@item
492@cindex mode loading
de9f0bd9 493The top-level forms in the file defining the mode should be written so
a44af9f2
RS
494that they may be evaluated more than once without adverse consequences.
495Even if you never load the file more than once, someone else will.
496@end itemize
497
a44af9f2
RS
498@node Auto Major Mode
499@subsection How Emacs Chooses a Major Mode
ad8d30b3 500@cindex major mode, automatic selection
a44af9f2
RS
501
502 Based on information in the file name or in the file itself, Emacs
503automatically selects a major mode for the new buffer when a file is
969fe9b5 504visited. It also processes local variables specified in the file text.
a44af9f2
RS
505
506@deffn Command fundamental-mode
507 Fundamental mode is a major mode that is not specialized for anything
508in particular. Other major modes are defined in effect by comparison
509with this one---their definitions say what to change, starting from
510Fundamental mode. The @code{fundamental-mode} function does @emph{not}
a3ee0299 511run any mode hooks; you're not supposed to customize it. (If you want Emacs
a44af9f2
RS
512to behave differently in Fundamental mode, change the @emph{global}
513state of Emacs.)
514@end deffn
515
516@deffn Command normal-mode &optional find-file
969fe9b5 517This function establishes the proper major mode and buffer-local variable
302691ab
LT
518bindings for the current buffer. First it calls @code{set-auto-mode}
519(see below), then it runs @code{hack-local-variables} to parse, and
520bind or evaluate as appropriate, the file's local variables
521(@pxref{File Local Variables}).
a44af9f2 522
969fe9b5
RS
523If the @var{find-file} argument to @code{normal-mode} is non-@code{nil},
524@code{normal-mode} assumes that the @code{find-file} function is calling
302691ab
LT
525it. In this case, it may process local variables in the @samp{-*-}
526line or at the end of the file. The variable
969fe9b5 527@code{enable-local-variables} controls whether to do so. @xref{File
302691ab
LT
528Variables, , Local Variables in Files, emacs, The GNU Emacs Manual},
529for the syntax of the local variables section of a file.
a44af9f2 530
bfe721d1 531If you run @code{normal-mode} interactively, the argument
a44af9f2 532@var{find-file} is normally @code{nil}. In this case,
302691ab
LT
533@code{normal-mode} unconditionally processes any file local variables.
534
535If @code{normal-mode} processes the local variables list and this list
536specifies a major mode, that mode overrides any mode chosen by
537@code{set-auto-mode}. If neither @code{set-auto-mode} nor
538@code{hack-local-variables} specify a major mode, the buffer stays in
539the major mode determined by @code{default-major-mode} (see below).
a44af9f2
RS
540
541@cindex file mode specification error
bfe721d1 542@code{normal-mode} uses @code{condition-case} around the call to the
a44af9f2
RS
543major mode function, so errors are caught and reported as a @samp{File
544mode specification error}, followed by the original error message.
545@end deffn
546
302691ab 547@defun set-auto-mode &optional keep-mode-if-same
a44af9f2
RS
548@cindex visited file mode
549 This function selects the major mode that is appropriate for the
302691ab
LT
550current buffer. It bases its decision (in order of precedence) on
551the @w{@samp{-*-}} line, on the @w{@samp{#!}} line (using
552@code{interpreter-mode-alist}), on the text at the beginning of the
553buffer (using @code{magic-mode-alist}), and finally on the visited
554file name (using @code{auto-mode-alist}). @xref{Choosing Modes, , How
555Major Modes are Chosen, emacs, The GNU Emacs Manual}. However, this
556function does not look for the @samp{mode:} local variable near the
557end of a file; the @code{hack-local-variables} function does that.
558If @code{enable-local-variables} is @code{nil}, @code{set-auto-mode}
559does not check the @w{@samp{-*-}} line for a mode tag either.
560
561If @var{keep-mode-if-same} is non-@code{nil}, this function does not
562call the mode command if the buffer is already in the proper major
563mode. For instance, @code{set-visited-file-name} sets this to
564@code{t} to avoid killing buffer local variables that the user may
565have set.
a44af9f2
RS
566@end defun
567
177c0ea7 568@defopt default-major-mode
969fe9b5 569This variable holds the default major mode for new buffers. The
a44af9f2
RS
570standard value is @code{fundamental-mode}.
571
969fe9b5 572If the value of @code{default-major-mode} is @code{nil}, Emacs uses
302691ab
LT
573the (previously) current buffer's major mode as the default major mode
574of a new buffer. However, if that major mode symbol has a @code{mode-class}
a44af9f2
RS
575property with value @code{special}, then it is not used for new buffers;
576Fundamental mode is used instead. The modes that have this property are
577those such as Dired and Rmail that are useful only with text that has
578been specially prepared.
579@end defopt
580
22697dac
KH
581@defun set-buffer-major-mode buffer
582This function sets the major mode of @var{buffer} to the value of
302691ab
LT
583@code{default-major-mode}; if that variable is @code{nil}, it uses the
584current buffer's major mode (if that is suitable). As an exception,
585if @var{buffer}'s name is @samp{*scratch*}, it sets the mode to
586@code{initial-major-mode}.
22697dac
KH
587
588The low-level primitives for creating buffers do not use this function,
bfe721d1
KH
589but medium-level commands such as @code{switch-to-buffer} and
590@code{find-file-noselect} use it whenever they create buffers.
22697dac
KH
591@end defun
592
302691ab 593@defopt initial-major-mode
a44af9f2
RS
594@cindex @samp{*scratch*}
595The value of this variable determines the major mode of the initial
596@samp{*scratch*} buffer. The value should be a symbol that is a major
f9f59935 597mode command. The default value is @code{lisp-interaction-mode}.
302691ab
LT
598@end defopt
599
600@defvar interpreter-mode-alist
601This variable specifies major modes to use for scripts that specify a
602command interpreter in a @samp{#!} line. Its value is an alist with
603elements of the form @code{(@var{interpreter} . @var{mode})}; for
604example, @code{("perl" . perl-mode)} is one element present by
605default. The element says to use mode @var{mode} if the file
abd10ce8 606specifies an interpreter which matches @var{interpreter}.
302691ab
LT
607@end defvar
608
609@defvar magic-mode-alist
610This variable's value is an alist with elements of the form
611@code{(@var{regexp} . @var{function})}, where @var{regexp} is a
612regular expression and @var{function} is a function or @code{nil}.
613After visiting a file, @code{set-auto-mode} calls @var{function} if
614the text at the beginning of the buffer matches @var{regexp} and
615@var{function} is non-@code{nil}; if @var{function} is @code{nil},
616@code{auto-mode-alist} gets to decide the mode.
a44af9f2
RS
617@end defvar
618
92228a10 619@defvar magic-fallback-mode-alist
4c88cf6d
RS
620This works like @code{magic-mode-alist}, except that it is handled
621only if @code{auto-mode-alist} does not specify a mode for this file.
622@end defvar
623
a44af9f2
RS
624@defvar auto-mode-alist
625This variable contains an association list of file name patterns
302691ab
LT
626(regular expressions) and corresponding major mode commands. Usually,
627the file name patterns test for suffixes, such as @samp{.el} and
628@samp{.c}, but this need not be the case. An ordinary element of the
629alist looks like @code{(@var{regexp} . @var{mode-function})}.
a44af9f2
RS
630
631For example,
632
633@smallexample
634@group
969fe9b5 635(("\\`/tmp/fol/" . text-mode)
24675e99
RS
636 ("\\.texinfo\\'" . texinfo-mode)
637 ("\\.texi\\'" . texinfo-mode)
a44af9f2
RS
638@end group
639@group
24675e99 640 ("\\.el\\'" . emacs-lisp-mode)
177c0ea7 641 ("\\.c\\'" . c-mode)
24675e99 642 ("\\.h\\'" . c-mode)
a44af9f2
RS
643 @dots{})
644@end group
645@end smallexample
646
647When you visit a file whose expanded file name (@pxref{File Name
302691ab
LT
648Expansion}), with version numbers and backup suffixes removed using
649@code{file-name-sans-versions} (@pxref{File Name Components}), matches
650a @var{regexp}, @code{set-auto-mode} calls the corresponding
651@var{mode-function}. This feature enables Emacs to select the proper
652major mode for most files.
a44af9f2
RS
653
654If an element of @code{auto-mode-alist} has the form @code{(@var{regexp}
655@var{function} t)}, then after calling @var{function}, Emacs searches
656@code{auto-mode-alist} again for a match against the portion of the file
969fe9b5
RS
657name that did not match before. This feature is useful for
658uncompression packages: an entry of the form @code{("\\.gz\\'"
659@var{function} t)} can uncompress the file and then put the uncompressed
660file in the proper mode according to the name sans @samp{.gz}.
a44af9f2
RS
661
662Here is an example of how to prepend several pattern pairs to
663@code{auto-mode-alist}. (You might use this sort of expression in your
a40d4712 664init file.)
a44af9f2
RS
665
666@smallexample
667@group
668(setq auto-mode-alist
177c0ea7 669 (append
f9f59935 670 ;; @r{File name (within directory) starts with a dot.}
177c0ea7 671 '(("/\\.[^/]*\\'" . fundamental-mode)
de9f0bd9 672 ;; @r{File name has no dot.}
177c0ea7 673 ("[^\\./]*\\'" . fundamental-mode)
de9f0bd9 674 ;; @r{File name ends in @samp{.C}.}
24675e99 675 ("\\.C\\'" . c++-mode))
a44af9f2
RS
676 auto-mode-alist))
677@end group
678@end smallexample
679@end defvar
680
a44af9f2
RS
681@node Mode Help
682@subsection Getting Help about a Major Mode
683@cindex mode help
684@cindex help for major mode
685@cindex documentation for major mode
686
687 The @code{describe-mode} function is used to provide information
688about major modes. It is normally called with @kbd{C-h m}. The
689@code{describe-mode} function uses the value of @code{major-mode},
690which is why every major mode function needs to set the
691@code{major-mode} variable.
692
693@deffn Command describe-mode
694This function displays the documentation of the current major mode.
695
696The @code{describe-mode} function calls the @code{documentation}
697function using the value of @code{major-mode} as an argument. Thus, it
698displays the documentation string of the major mode function.
699(@xref{Accessing Documentation}.)
700@end deffn
701
702@defvar major-mode
475aab0d
CY
703This buffer-local variable holds the symbol for the current buffer's
704major mode. This symbol should have a function definition that is the
705command to switch to that major mode. The @code{describe-mode}
706function uses the documentation string of the function as the
707documentation of the major mode.
a44af9f2
RS
708@end defvar
709
710@node Derived Modes
711@subsection Defining Derived Modes
010a3386 712@cindex derived mode
a44af9f2
RS
713
714 It's often useful to define a new major mode in terms of an existing
715one. An easy way to do this is to use @code{define-derived-mode}.
716
302691ab 717@defmac define-derived-mode variant parent name docstring keyword-args@dots{} body@dots{}
a44af9f2 718This construct defines @var{variant} as a major mode command, using
302691ab
LT
719@var{name} as the string form of the mode name. @var{variant} and
720@var{parent} should be unquoted symbols.
a44af9f2 721
de9f0bd9
RS
722The new command @var{variant} is defined to call the function
723@var{parent}, then override certain aspects of that parent mode:
a44af9f2 724
177c0ea7 725@itemize @bullet
a44af9f2 726@item
302691ab
LT
727The new mode has its own sparse keymap, named
728@code{@var{variant}-map}. @code{define-derived-mode}
729makes the parent mode's keymap the parent of the new map, unless
730@code{@var{variant}-map} is already set and already has a parent.
a44af9f2
RS
731
732@item
de9f0bd9 733The new mode has its own syntax table, kept in the variable
302691ab
LT
734@code{@var{variant}-syntax-table}, unless you override this using the
735@code{:syntax-table} keyword (see below). @code{define-derived-mode}
736makes the parent mode's syntax-table the parent of
737@code{@var{variant}-syntax-table}, unless the latter is already set
703ba947 738and already has a parent different from the standard syntax table.
a44af9f2
RS
739
740@item
de9f0bd9 741The new mode has its own abbrev table, kept in the variable
302691ab
LT
742@code{@var{variant}-abbrev-table}, unless you override this using the
743@code{:abbrev-table} keyword (see below).
a44af9f2
RS
744
745@item
302691ab
LT
746The new mode has its own mode hook, @code{@var{variant}-hook}. It
747runs this hook, after running the hooks of its ancestor modes, with
b4a83bb8 748@code{run-mode-hooks}, as the last thing it does. @xref{Mode Hooks}.
a44af9f2
RS
749@end itemize
750
751In addition, you can specify how to override other aspects of
de9f0bd9 752@var{parent} with @var{body}. The command @var{variant}
177c0ea7 753evaluates the forms in @var{body} after setting up all its usual
b4a83bb8 754overrides, just before running the mode hooks.
a44af9f2 755
302691ab
LT
756You can also specify @code{nil} for @var{parent}. This gives the new
757mode no parent. Then @code{define-derived-mode} behaves as described
758above, but, of course, omits all actions connected with @var{parent}.
759
760The argument @var{docstring} specifies the documentation string for
761the new mode. @code{define-derived-mode} adds some general
762information about the mode's hook, followed by the mode's keymap, at
763the end of this docstring. If you omit @var{docstring},
764@code{define-derived-mode} generates a documentation string.
765
766The @var{keyword-args} are pairs of keywords and values. The values
767are evaluated. The following keywords are currently supported:
768
769@table @code
302691ab
LT
770@item :syntax-table
771You can use this to explicitly specify a syntax table for the new
772mode. If you specify a @code{nil} value, the new mode uses the same
703ba947 773syntax table as @var{parent}, or the standard syntax table if
302691ab
LT
774@var{parent} is @code{nil}. (Note that this does @emph{not} follow
775the convention used for non-keyword arguments that a @code{nil} value
776is equivalent with not specifying the argument.)
777
778@item :abbrev-table
779You can use this to explicitly specify an abbrev table for the new
780mode. If you specify a @code{nil} value, the new mode uses the same
7cefdf1d
LT
781abbrev table as @var{parent}, or @code{fundamental-mode-abbrev-table}
782if @var{parent} is @code{nil}. (Again, a @code{nil} value is
302691ab 783@emph{not} equivalent to not specifying this keyword.)
a217fa21
LT
784
785@item :group
786If this is specified, the value should be the customization group for
787this mode. (Not all major modes have one.) Only the (still
788experimental and unadvertised) command @code{customize-mode} currently
789uses this. @code{define-derived-mode} does @emph{not} automatically
790define the specified customization group.
302691ab 791@end table
a44af9f2
RS
792
793Here is a hypothetical example:
794
795@example
796(define-derived-mode hypertext-mode
797 text-mode "Hypertext"
798 "Major mode for hypertext.
799\\@{hypertext-mode-map@}"
800 (setq case-fold-search nil))
801
34e5974a
CY
802(define-key hypertext-mode-map
803 [down-mouse-3] 'do-hyper-link)
804@end example
805
806Do not write an @code{interactive} spec in the definition;
807@code{define-derived-mode} does that automatically.
808@end defmac
809
810@node Generic Modes
811@subsection Generic Modes
812@cindex generic mode
813
02a2b2ad 814 @dfn{Generic modes} are simple major modes with basic support for
34e5974a
CY
815comment syntax and Font Lock mode. To define a generic mode, use the
816macro @code{define-generic-mode}. See the file @file{generic-x.el}
817for some examples of the use of @code{define-generic-mode}.
818
819@defmac define-generic-mode mode comment-list keyword-list font-lock-list auto-mode-list function-list &optional docstring
02a2b2ad
RS
820This macro defines a generic mode command named @var{mode} (a symbol,
821not quoted). The optional argument @var{docstring} is the
822documentation for the mode command. If you do not supply it,
823@code{define-generic-mode} generates one by default.
824
825The argument @var{comment-list} is a list in which each element is
826either a character, a string of one or two characters, or a cons cell.
827A character or a string is set up in the mode's syntax table as a
34e5974a
CY
828``comment starter.'' If the entry is a cons cell, the @sc{car} is set
829up as a ``comment starter'' and the @sc{cdr} as a ``comment ender.''
830(Use @code{nil} for the latter if you want comments to end at the end
02a2b2ad
RS
831of the line.) Note that the syntax table mechanism has limitations
832about what comment starters and enders are actually possible.
833@xref{Syntax Tables}.
834
835The argument @var{keyword-list} is a list of keywords to highlight
836with @code{font-lock-keyword-face}. Each keyword should be a string.
837Meanwhile, @var{font-lock-list} is a list of additional expressions to
838highlight. Each element of this list should have the same form as an
839element of @code{font-lock-keywords}. @xref{Search-based
840Fontification}.
841
842The argument @var{auto-mode-list} is a list of regular expressions to
843add to the variable @code{auto-mode-alist}. They are added by the execution
844of the @code{define-generic-mode} form, not by expanding the macro call.
845
846Finally, @var{function-list} is a list of functions for the mode
847command to call for additional setup. It calls these functions just
848before it runs the mode hook variable @code{@var{mode}-hook}.
34e5974a
CY
849@end defmac
850
851@node Mode Hooks
852@subsection Mode Hooks
853
02a2b2ad
RS
854 Every major mode function should finish by running its mode hook and
855the mode-independent normal hook @code{after-change-major-mode-hook}.
856It does this by calling @code{run-mode-hooks}. If the major mode is a
857derived mode, that is if it calls another major mode (the parent mode)
858in its body, it should do this inside @code{delay-mode-hooks} so that
859the parent won't run these hooks itself. Instead, the derived mode's
860call to @code{run-mode-hooks} runs the parent's mode hook too.
861@xref{Major Mode Conventions}.
862
863 Emacs versions before Emacs 22 did not have @code{delay-mode-hooks}.
864When user-implemented major modes have not been updated to use it,
865they won't entirely follow these conventions: they may run the
866parent's mode hook too early, or fail to run
867@code{after-change-major-mode-hook}. If you encounter such a major
868mode, please correct it to follow these conventions.
34e5974a
CY
869
870 When you defined a major mode using @code{define-derived-mode}, it
871automatically makes sure these conventions are followed. If you
02a2b2ad
RS
872define a major mode ``by hand,'' not using @code{define-derived-mode},
873use the following functions to handle these conventions automatically.
34e5974a
CY
874
875@defun run-mode-hooks &rest hookvars
876Major modes should run their mode hook using this function. It is
877similar to @code{run-hooks} (@pxref{Hooks}), but it also runs
878@code{after-change-major-mode-hook}.
879
02a2b2ad
RS
880When this function is called during the execution of a
881@code{delay-mode-hooks} form, it does not run the hooks immediately.
34e5974a 882Instead, it arranges for the next call to @code{run-mode-hooks} to run
02a2b2ad 883them.
34e5974a
CY
884@end defun
885
886@defmac delay-mode-hooks body@dots{}
02a2b2ad
RS
887When one major mode command calls another, it should do so inside of
888@code{delay-mode-hooks}.
889
890This macro executes @var{body}, but tells all @code{run-mode-hooks}
891calls during the execution of @var{body} to delay running their hooks.
892The hooks will actually run during the next call to
893@code{run-mode-hooks} after the end of the @code{delay-mode-hooks}
894construct.
34e5974a
CY
895@end defmac
896
897@defvar after-change-major-mode-hook
02a2b2ad
RS
898This is a normal hook run by @code{run-mode-hooks}. It is run at the
899very end of every properly-written major mode function.
34e5974a
CY
900@end defvar
901
902@node Example Major Modes
903@subsection Major Mode Examples
904
905 Text mode is perhaps the simplest mode besides Fundamental mode.
906Here are excerpts from @file{text-mode.el} that illustrate many of
907the conventions listed above:
908
909@smallexample
910@group
911;; @r{Create the syntax table for this mode.}
912(defvar text-mode-syntax-table
913 (let ((st (make-syntax-table)))
914 (modify-syntax-entry ?\" ". " st)
915 (modify-syntax-entry ?\\ ". " st)
916 ;; Add `p' so M-c on `hello' leads to `Hello', not `hello'.
917 (modify-syntax-entry ?' "w p" st)
918 st)
919 "Syntax table used while in `text-mode'.")
920@end group
921
922;; @r{Create the keymap for this mode.}
923@group
924(defvar text-mode-map
925 (let ((map (make-sparse-keymap)))
926 (define-key map "\e\t" 'ispell-complete-word)
927 (define-key map "\es" 'center-line)
928 (define-key map "\eS" 'center-paragraph)
929 map)
930 "Keymap for `text-mode'.
931Many other modes, such as Mail mode, Outline mode
932and Indented Text mode, inherit all the commands
933defined in this map.")
934@end group
935@end smallexample
936
937 Here is how the actual mode command is defined now:
938
939@smallexample
940@group
941(define-derived-mode text-mode nil "Text"
942 "Major mode for editing text written for humans to read.
943In this mode, paragraphs are delimited only by blank or white lines.
944You can thus get the full benefit of adaptive filling
945 (see the variable `adaptive-fill-mode').
946\\@{text-mode-map@}
947Turning on Text mode runs the normal hook `text-mode-hook'."
948@end group
949@group
950 (make-local-variable 'text-mode-variant)
951 (setq text-mode-variant t)
952 ;; @r{These two lines are a feature added recently.}
953 (set (make-local-variable 'require-final-newline)
954 mode-require-final-newline)
955 (set (make-local-variable 'indent-line-function) 'indent-relative))
956@end group
957@end smallexample
958
76ee3296
RS
959@noindent
960(The last line is redundant nowadays, since @code{indent-relative} is
961the default value, and we'll delete it in a future version.)
962
963 Here is how it was defined formerly, before
34e5974a
CY
964@code{define-derived-mode} existed:
965
966@smallexample
967@group
968;; @r{This isn't needed nowadays, since @code{define-derived-mode} does it.}
969(defvar text-mode-abbrev-table nil
970 "Abbrev table used while in text mode.")
971(define-abbrev-table 'text-mode-abbrev-table ())
972@end group
973
974@group
975(defun text-mode ()
976 "Major mode for editing text intended for humans to read...
977 Special commands: \\@{text-mode-map@}
978@end group
979@group
980Turning on text-mode runs the hook `text-mode-hook'."
981 (interactive)
982 (kill-all-local-variables)
983 (use-local-map text-mode-map)
984@end group
985@group
986 (setq local-abbrev-table text-mode-abbrev-table)
987 (set-syntax-table text-mode-syntax-table)
988@end group
989@group
990 ;; @r{These four lines are absent from the current version}
991 ;; @r{not because this is done some other way, but rather}
992 ;; @r{because nowadays Text mode uses the normal definition of paragraphs.}
993 (make-local-variable 'paragraph-start)
994 (setq paragraph-start (concat "[ \t]*$\\|" page-delimiter))
995 (make-local-variable 'paragraph-separate)
996 (setq paragraph-separate paragraph-start)
997 (make-local-variable 'indent-line-function)
998 (setq indent-line-function 'indent-relative-maybe)
999@end group
1000@group
1001 (setq mode-name "Text")
1002 (setq major-mode 'text-mode)
1003 (run-mode-hooks 'text-mode-hook)) ; @r{Finally, this permits the user to}
1004 ; @r{customize the mode with a hook.}
1005@end group
1006@end smallexample
1007
1008@cindex @file{lisp-mode.el}
1009 The three Lisp modes (Lisp mode, Emacs Lisp mode, and Lisp
1010Interaction mode) have more features than Text mode and the code is
1011correspondingly more complicated. Here are excerpts from
1012@file{lisp-mode.el} that illustrate how these modes are written.
f140458b 1013
34e5974a
CY
1014@cindex syntax table example
1015@smallexample
1016@group
1017;; @r{Create mode-specific table variables.}
1018(defvar lisp-mode-syntax-table nil "")
1019(defvar lisp-mode-abbrev-table nil "")
1020@end group
a44af9f2 1021
34e5974a
CY
1022@group
1023(defvar emacs-lisp-mode-syntax-table
1024 (let ((table (make-syntax-table)))
1025 (let ((i 0))
1026@end group
010a3386 1027
34e5974a
CY
1028@group
1029 ;; @r{Set syntax of chars up to @samp{0} to say they are}
1030 ;; @r{part of symbol names but not words.}
1031 ;; @r{(The digit @samp{0} is @code{48} in the @acronym{ASCII} character set.)}
1032 (while (< i ?0)
1033 (modify-syntax-entry i "_ " table)
1034 (setq i (1+ i)))
1035 ;; @r{@dots{} similar code follows for other character ranges.}
1036@end group
1037@group
1038 ;; @r{Then set the syntax codes for characters that are special in Lisp.}
1039 (modify-syntax-entry ? " " table)
1040 (modify-syntax-entry ?\t " " table)
1041 (modify-syntax-entry ?\f " " table)
1042 (modify-syntax-entry ?\n "> " table)
1043@end group
1044@group
1045 ;; @r{Give CR the same syntax as newline, for selective-display.}
1046 (modify-syntax-entry ?\^m "> " table)
1047 (modify-syntax-entry ?\; "< " table)
1048 (modify-syntax-entry ?` "' " table)
1049 (modify-syntax-entry ?' "' " table)
1050 (modify-syntax-entry ?, "' " table)
1051@end group
1052@group
1053 ;; @r{@dots{}likewise for many other characters@dots{}}
1054 (modify-syntax-entry ?\( "() " table)
1055 (modify-syntax-entry ?\) ")( " table)
1056 (modify-syntax-entry ?\[ "(] " table)
1057 (modify-syntax-entry ?\] ")[ " table))
1058 table))
1059@end group
1060@group
1061;; @r{Create an abbrev table for lisp-mode.}
1062(define-abbrev-table 'lisp-mode-abbrev-table ())
1063@end group
1064@end smallexample
010a3386 1065
02a2b2ad
RS
1066 The three modes for Lisp share much of their code. For instance,
1067each calls the following function to set various variables:
010a3386 1068
34e5974a
CY
1069@smallexample
1070@group
1071(defun lisp-mode-variables (lisp-syntax)
1072 (when lisp-syntax
1073 (set-syntax-table lisp-mode-syntax-table))
1074 (setq local-abbrev-table lisp-mode-abbrev-table)
1075 @dots{}
1076@end group
1077@end smallexample
010a3386 1078
02a2b2ad
RS
1079 In Lisp and most programming languages, we want the paragraph
1080commands to treat only blank lines as paragraph separators. And the
219d320a 1081modes should understand the Lisp conventions for comments. The rest of
02a2b2ad 1082@code{lisp-mode-variables} sets this up:
010a3386 1083
34e5974a
CY
1084@smallexample
1085@group
1086 (make-local-variable 'paragraph-start)
1087 (setq paragraph-start (concat page-delimiter "\\|$" ))
1088 (make-local-variable 'paragraph-separate)
1089 (setq paragraph-separate paragraph-start)
1090 @dots{}
1091@end group
1092@group
1093 (make-local-variable 'comment-indent-function)
1094 (setq comment-indent-function 'lisp-comment-indent))
1095 @dots{}
1096@end group
1097@end smallexample
010a3386 1098
34e5974a
CY
1099 Each of the different Lisp modes has a slightly different keymap. For
1100example, Lisp mode binds @kbd{C-c C-z} to @code{run-lisp}, but the other
1101Lisp modes do not. However, all Lisp modes have some commands in
1102common. The following code sets up the common commands:
010a3386 1103
34e5974a
CY
1104@smallexample
1105@group
1106(defvar shared-lisp-mode-map ()
1107 "Keymap for commands shared by all sorts of Lisp modes.")
a3ee0299 1108
34e5974a
CY
1109;; @r{Putting this @code{if} after the @code{defvar} is an older style.}
1110(if shared-lisp-mode-map
1111 ()
1112 (setq shared-lisp-mode-map (make-sparse-keymap))
1113 (define-key shared-lisp-mode-map "\e\C-q" 'indent-sexp)
1114 (define-key shared-lisp-mode-map "\177"
1115 'backward-delete-char-untabify))
1116@end group
1117@end smallexample
801f0dc3 1118
34e5974a
CY
1119@noindent
1120And here is the code to set up the keymap for Lisp mode:
801f0dc3 1121
34e5974a
CY
1122@smallexample
1123@group
1124(defvar lisp-mode-map ()
1125 "Keymap for ordinary Lisp mode...")
a3ee0299 1126
34e5974a
CY
1127(if lisp-mode-map
1128 ()
1129 (setq lisp-mode-map (make-sparse-keymap))
1130 (set-keymap-parent lisp-mode-map shared-lisp-mode-map)
1131 (define-key lisp-mode-map "\e\C-x" 'lisp-eval-defun)
1132 (define-key lisp-mode-map "\C-c\C-z" 'run-lisp))
1133@end group
1134@end smallexample
801f0dc3 1135
34e5974a
CY
1136 Finally, here is the complete major mode function definition for
1137Lisp mode.
a3ee0299 1138
34e5974a
CY
1139@smallexample
1140@group
1141(defun lisp-mode ()
1142 "Major mode for editing Lisp code for Lisps other than GNU Emacs Lisp.
1143Commands:
1144Delete converts tabs to spaces as it moves back.
1145Blank lines separate paragraphs. Semicolons start comments.
1146\\@{lisp-mode-map@}
1147Note that `run-lisp' may be used either to start an inferior Lisp job
1148or to switch back to an existing one.
1149@end group
a3ee0299 1150
34e5974a
CY
1151@group
1152Entry to this mode calls the value of `lisp-mode-hook'
1153if that value is non-nil."
1154 (interactive)
1155 (kill-all-local-variables)
1156@end group
1157@group
1158 (use-local-map lisp-mode-map) ; @r{Select the mode's keymap.}
1159 (setq major-mode 'lisp-mode) ; @r{This is how @code{describe-mode}}
1160 ; @r{finds out what to describe.}
1161 (setq mode-name "Lisp") ; @r{This goes into the mode line.}
1162 (lisp-mode-variables t) ; @r{This defines various variables.}
1163 (make-local-variable 'comment-start-skip)
1164 (setq comment-start-skip
1165 "\\(\\(^\\|[^\\\\\n]\\)\\(\\\\\\\\\\)*\\)\\(;+\\|#|\\) *")
1166 (make-local-variable 'font-lock-keywords-case-fold-search)
1167 (setq font-lock-keywords-case-fold-search t)
1168@end group
1169@group
1170 (setq imenu-case-fold-search t)
1171 (set-syntax-table lisp-mode-syntax-table)
997b849e 1172 (run-mode-hooks 'lisp-mode-hook)) ; @r{This permits the user to use a}
34e5974a
CY
1173 ; @r{hook to customize the mode.}
1174@end group
1175@end smallexample
a3ee0299 1176
a44af9f2
RS
1177@node Minor Modes
1178@section Minor Modes
1179@cindex minor mode
1180
1181 A @dfn{minor mode} provides features that users may enable or disable
1182independently of the choice of major mode. Minor modes can be enabled
1183individually or in combination. Minor modes would be better named
969fe9b5
RS
1184``generally available, optional feature modes,'' except that such a name
1185would be unwieldy.
a44af9f2 1186
8241495d
RS
1187 A minor mode is not usually meant as a variation of a single major mode.
1188Usually they are general and can apply to many major modes. For
969fe9b5 1189example, Auto Fill mode works with any major mode that permits text
a44af9f2
RS
1190insertion. To be general, a minor mode must be effectively independent
1191of the things major modes do.
1192
1193 A minor mode is often much more difficult to implement than a major
1194mode. One reason is that you should be able to activate and deactivate
de9f0bd9
RS
1195minor modes in any order. A minor mode should be able to have its
1196desired effect regardless of the major mode and regardless of the other
1197minor modes in effect.
a44af9f2
RS
1198
1199 Often the biggest problem in implementing a minor mode is finding a
1200way to insert the necessary hook into the rest of Emacs. Minor mode
bfe721d1 1201keymaps make this easier than it used to be.
a44af9f2 1202
fdba9ef4
RS
1203@defvar minor-mode-list
1204The value of this variable is a list of all minor mode commands.
1205@end defvar
1206
a44af9f2
RS
1207@menu
1208* Minor Mode Conventions:: Tips for writing a minor mode.
1209* Keymaps and Minor Modes:: How a minor mode can have its own keymap.
2468d0c0 1210* Defining Minor Modes:: A convenient facility for defining minor modes.
a44af9f2
RS
1211@end menu
1212
1213@node Minor Mode Conventions
1214@subsection Conventions for Writing Minor Modes
1215@cindex minor mode conventions
1216@cindex conventions for writing minor modes
1217
1218 There are conventions for writing minor modes just as there are for
1219major modes. Several of the major mode conventions apply to minor
1220modes as well: those regarding the name of the mode initialization
16b4c38b
SM
1221function, the names of global symbols, the use of a hook at the end of
1222the initialization function, and the use of keymaps and other tables.
a44af9f2
RS
1223
1224 In addition, there are several conventions that are specific to
ec9b0882
RS
1225minor modes. (The easiest way to follow all the conventions is to use
1226the macro @code{define-minor-mode}; @ref{Defining Minor Modes}.)
a44af9f2
RS
1227
1228@itemize @bullet
1229@item
1230@cindex mode variable
969fe9b5
RS
1231Make a variable whose name ends in @samp{-mode} to control the minor
1232mode. We call this the @dfn{mode variable}. The minor mode command
1233should set this variable (@code{nil} to disable; anything else to
1911e6e5 1234enable).
969fe9b5 1235
8241495d 1236If possible, implement the mode so that setting the variable
969fe9b5 1237automatically enables or disables the mode. Then the minor mode command
1911e6e5 1238does not need to do anything except set the variable.
a44af9f2
RS
1239
1240This variable is used in conjunction with the @code{minor-mode-alist} to
1241display the minor mode name in the mode line. It can also enable
1242or disable a minor mode keymap. Individual commands or hooks can also
1243check the variable's value.
1244
1245If you want the minor mode to be enabled separately in each buffer,
1246make the variable buffer-local.
1247
1248@item
1249Define a command whose name is the same as the mode variable.
1250Its job is to enable and disable the mode by setting the variable.
1251
1252The command should accept one optional argument. If the argument is
8cd4f018
RS
1253@code{nil}, it should toggle the mode (turn it on if it is off, and
1254off if it is on). It should turn the mode on if the argument is a
1255positive integer, the symbol @code{t}, or a list whose @sc{car} is one
1256of those. It should turn the mode off if the argument is a negative
4d386728
RS
1257integer or zero, the symbol @code{-}, or a list whose @sc{car} is a
1258negative integer or zero. The meaning of other arguments is not
1259specified.
a44af9f2 1260
bfe721d1
KH
1261Here is an example taken from the definition of @code{transient-mark-mode}.
1262It shows the use of @code{transient-mark-mode} as a variable that enables or
de9f0bd9
RS
1263disables the mode's behavior, and also shows the proper way to toggle,
1264enable or disable the minor mode based on the raw prefix argument value.
a44af9f2
RS
1265
1266@smallexample
1267@group
bfe721d1
KH
1268(setq transient-mark-mode
1269 (if (null arg) (not transient-mark-mode)
a44af9f2
RS
1270 (> (prefix-numeric-value arg) 0)))
1271@end group
1272@end smallexample
1273
1274@item
1275Add an element to @code{minor-mode-alist} for each minor mode
b4a83bb8
LT
1276(@pxref{Definition of minor-mode-alist}), if you want to indicate the
1277minor mode in the mode line. This element should be a list of the
1278following form:
a44af9f2
RS
1279
1280@smallexample
1281(@var{mode-variable} @var{string})
1282@end smallexample
1283
de9f0bd9 1284Here @var{mode-variable} is the variable that controls enabling of the
a44af9f2
RS
1285minor mode, and @var{string} is a short string, starting with a space,
1286to represent the mode in the mode line. These strings must be short so
1287that there is room for several of them at once.
1288
1289When you add an element to @code{minor-mode-alist}, use @code{assq} to
1290check for an existing element, to avoid duplication. For example:
1291
1292@smallexample
1293@group
a40d4712
PR
1294(unless (assq 'leif-mode minor-mode-alist)
1295 (setq minor-mode-alist
1296 (cons '(leif-mode " Leif") minor-mode-alist)))
a44af9f2
RS
1297@end group
1298@end smallexample
a44af9f2 1299
a40d4712 1300@noindent
c45ab038 1301or like this, using @code{add-to-list} (@pxref{List Variables}):
a40d4712
PR
1302
1303@smallexample
1304@group
1305(add-to-list 'minor-mode-alist '(leif-mode " Leif"))
1306@end group
1307@end smallexample
1308@end itemize
1911e6e5 1309
8241495d
RS
1310 Global minor modes distributed with Emacs should if possible support
1311enabling and disabling via Custom (@pxref{Customization}). To do this,
1312the first step is to define the mode variable with @code{defcustom}, and
1313specify @code{:type boolean}.
1314
1315 If just setting the variable is not sufficient to enable the mode, you
1316should also specify a @code{:set} method which enables the mode by
ec9b0882 1317invoking the mode command. Note in the variable's documentation string that
8241495d
RS
1318setting the variable other than via Custom may not take effect.
1319
b4a83bb8 1320 Also mark the definition with an autoload cookie (@pxref{autoload cookie}),
8241495d
RS
1321and specify a @code{:require} so that customizing the variable will load
1322the library that defines the mode. This will copy suitable definitions
1323into @file{loaddefs.el} so that users can use @code{customize-option} to
1324enable the mode. For example:
1325
1326@smallexample
1327@group
1328
1329;;;###autoload
1330(defcustom msb-mode nil
1331 "Toggle msb-mode.
1332Setting this variable directly does not take effect;
1333use either \\[customize] or the function `msb-mode'."
cbad4a9e 1334 :set 'custom-set-minor-mode
8241495d
RS
1335 :initialize 'custom-initialize-default
1336 :version "20.4"
1337 :type 'boolean
1338 :group 'msb
1339 :require 'msb)
1340@end group
1341@end smallexample
1342
a44af9f2
RS
1343@node Keymaps and Minor Modes
1344@subsection Keymaps and Minor Modes
1345
bfe721d1
KH
1346 Each minor mode can have its own keymap, which is active when the mode
1347is enabled. To set up a keymap for a minor mode, add an element to the
b4a83bb8 1348alist @code{minor-mode-map-alist}. @xref{Definition of minor-mode-map-alist}.
a44af9f2
RS
1349
1350@cindex @code{self-insert-command}, minor modes
f9f59935 1351 One use of minor mode keymaps is to modify the behavior of certain
a44af9f2
RS
1352self-inserting characters so that they do something else as well as
1353self-insert. In general, this is the only way to do that, since the
1354facilities for customizing @code{self-insert-command} are limited to
1355special cases (designed for abbrevs and Auto Fill mode). (Do not try
1356substituting your own definition of @code{self-insert-command} for the
1357standard one. The editor command loop handles this function specially.)
1358
a4b12c74 1359The key sequences bound in a minor mode should consist of @kbd{C-c}
0931b43e
RS
1360followed by one of @kbd{.,/?`'"[]\|~!#$%^&*()-_+=}. (The other
1361punctuation characters are reserved for major modes.)
a4b12c74 1362
2468d0c0
DL
1363@node Defining Minor Modes
1364@subsection Defining Minor Modes
f9f59935 1365
2468d0c0 1366 The macro @code{define-minor-mode} offers a convenient way of
8dc811d3 1367implementing a mode in one self-contained definition.
f9f59935 1368
3389865a 1369@defmac define-minor-mode mode doc [init-value [lighter [keymap]]] keyword-args@dots{} body@dots{}
fdba9ef4
RS
1370This macro defines a new minor mode whose name is @var{mode} (a
1371symbol). It defines a command named @var{mode} to toggle the minor
2468d0c0
DL
1372mode, with @var{doc} as its documentation string. It also defines a
1373variable named @var{mode}, which is set to @code{t} or @code{nil} by
1374enabling or disabling the mode. The variable is initialized to
32808f83
RS
1375@var{init-value}. Except in unusual circumstances (see below), this
1376value must be @code{nil}.
f9f59935 1377
fdba9ef4 1378The string @var{lighter} says what to display in the mode line
f9f59935
RS
1379when the mode is enabled; if it is @code{nil}, the mode is not displayed
1380in the mode line.
1381
1382The optional argument @var{keymap} specifies the keymap for the minor mode.
1383It can be a variable name, whose value is the keymap, or it can be an alist
1384specifying bindings in this form:
1385
1386@example
1387(@var{key-sequence} . @var{definition})
1388@end example
fdba9ef4 1389
f24be0a7
LK
1390The above three arguments @var{init-value}, @var{lighter}, and
1391@var{keymap} can be (partially) omitted when @var{keyword-args} are
1392used. The @var{keyword-args} consist of keywords followed by
1393corresponding values. A few keywords have special meanings:
fdba9ef4
RS
1394
1395@table @code
bfa54668
LK
1396@item :group @var{group}
1397Custom group name to use in all generated @code{defcustom} forms.
4f45f65e
LK
1398Defaults to @var{mode} without the possible trailing @samp{-mode}.
1399@strong{Warning:} don't use this default group name unless you have
1400written a @code{defgroup} to define that group properly. @xref{Group
1401Definitions}.
bfa54668 1402
fdba9ef4 1403@item :global @var{global}
1608076d
CY
1404If non-@code{nil}, this specifies that the minor mode should be global
1405rather than buffer-local. It defaults to @code{nil}.
1406
1407One of the effects of making a minor mode global is that the
af2450e3
CY
1408@var{mode} variable becomes a customization variable. Toggling it
1409through the Custom interface turns the mode on and off, and its value
1410can be saved for future Emacs sessions (@pxref{Saving
1608076d
CY
1411Customizations,,, emacs, The GNU Emacs Manual}. For the saved
1412variable to work, you should ensure that the @code{define-minor-mode}
1413form is evaluated each time Emacs starts; for packages that are not
1414part of Emacs, the easiest way to do this is to specify a
1415@code{:require} keyword.
fdba9ef4
RS
1416
1417@item :init-value @var{init-value}
1418This is equivalent to specifying @var{init-value} positionally.
1419
1420@item :lighter @var{lighter}
1421This is equivalent to specifying @var{lighter} positionally.
1422
1423@item :keymap @var{keymap}
1424This is equivalent to specifying @var{keymap} positionally.
1425@end table
1426
2cde13e4 1427Any other keyword arguments are passed directly to the
fdba9ef4
RS
1428@code{defcustom} generated for the variable @var{mode}.
1429
82ecc38a
LK
1430The command named @var{mode} first performs the standard actions such
1431as setting the variable named @var{mode} and then executes the
1432@var{body} forms, if any. It finishes by running the mode hook
1433variable @code{@var{mode}-hook}.
f9f59935
RS
1434@end defmac
1435
32808f83 1436 The initial value must be @code{nil} except in cases where (1) the
7fdc81ab 1437mode is preloaded in Emacs, or (2) it is painless for loading to
32808f83
RS
1438enable the mode even though the user did not request it. For
1439instance, if the mode has no effect unless something else is enabled,
1440and will always be loaded by that time, enabling it by default is
1441harmless. But these are unusual circumstances. Normally, the
1442initial value must be @code{nil}.
1443
fdba9ef4
RS
1444@findex easy-mmode-define-minor-mode
1445 The name @code{easy-mmode-define-minor-mode} is an alias
1446for this macro.
1447
2468d0c0 1448 Here is an example of using @code{define-minor-mode}:
f9f59935
RS
1449
1450@smallexample
2468d0c0 1451(define-minor-mode hungry-mode
969fe9b5 1452 "Toggle Hungry mode.
177c0ea7 1453With no argument, this command toggles the mode.
f9f59935
RS
1454Non-null prefix argument turns on the mode.
1455Null prefix argument turns off the mode.
1456
1457When Hungry mode is enabled, the control delete key
1458gobbles all preceding whitespace except the last.
1459See the command \\[hungry-electric-delete]."
1460 ;; The initial value.
1461 nil
1462 ;; The indicator for the mode line.
1463 " Hungry"
1464 ;; The minor mode bindings.
ec9b0882 1465 '(("\C-\^?" . hungry-electric-delete))
fdba9ef4 1466 :group 'hunger)
f9f59935
RS
1467@end smallexample
1468
1469@noindent
827b7ee7 1470This defines a minor mode named ``Hungry mode,'' a command named
f9f59935
RS
1471@code{hungry-mode} to toggle it, a variable named @code{hungry-mode}
1472which indicates whether the mode is enabled, and a variable named
1473@code{hungry-mode-map} which holds the keymap that is active when the
ec9b0882
RS
1474mode is enabled. It initializes the keymap with a key binding for
1475@kbd{C-@key{DEL}}. It puts the variable @code{hungry-mode} into
1476custom group @code{hunger}. There are no @var{body} forms---many
1477minor modes don't need any.
f9f59935 1478
fdba9ef4 1479 Here's an equivalent way to write it:
2468d0c0 1480
fdba9ef4
RS
1481@smallexample
1482(define-minor-mode hungry-mode
1483 "Toggle Hungry mode.
1484With no argument, this command toggles the mode.
1485Non-null prefix argument turns on the mode.
1486Null prefix argument turns off the mode.
1487
1488When Hungry mode is enabled, the control delete key
1489gobbles all preceding whitespace except the last.
1490See the command \\[hungry-electric-delete]."
1491 ;; The initial value.
e890842c 1492 :init-value nil
fdba9ef4
RS
1493 ;; The indicator for the mode line.
1494 :lighter " Hungry"
1495 ;; The minor mode bindings.
1496 :keymap
1497 '(("\C-\^?" . hungry-electric-delete)
1498 ("\C-\M-\^?"
1499 . (lambda ()
1500 (interactive)
1501 (hungry-electric-delete t))))
1502 :group 'hunger)
1503@end smallexample
2468d0c0 1504
1608076d 1505@defmac define-globalized-minor-mode global-mode mode turn-on keyword-args@dots{}
14bafd7e
RS
1506This defines a global toggle named @var{global-mode} whose meaning is
1507to enable or disable the buffer-local minor mode @var{mode} in all
1508buffers. To turn on the minor mode in a buffer, it uses the function
cbb8b77d
RS
1509@var{turn-on}; to turn off the minor mode, it calls @code{mode} with
1510@minus{}1 as argument.
1511
14bafd7e 1512Globally enabling the mode also affects buffers subsequently created
c5954f14
RS
1513by visiting files, and buffers that use a major mode other than
1514Fundamental mode; but it does not detect the creation of a new buffer
1515in Fundamental mode.
14bafd7e 1516
1608076d
CY
1517This defines the customization option @var{global-mode} (@pxref{Customization}),
1518which can be toggled in the Custom interface to turn the minor mode on
1519and off. As with @code{define-minor-mode}, you should ensure that the
1520@code{define-globalized-minor-mode} form is evaluated each time Emacs
1521starts, for example by providing a @code{:require} keyword.
1522
cbb8b77d
RS
1523Use @code{:group @var{group}} in @var{keyword-args} to specify the
1524custom group for the mode variable of the global minor mode.
1525@end defmac
1526
a44af9f2 1527@node Mode Line Format
06862374 1528@section Mode-Line Format
a44af9f2
RS
1529@cindex mode line
1530
8241495d
RS
1531 Each Emacs window (aside from minibuffer windows) typically has a mode
1532line at the bottom, which displays status information about the buffer
1533displayed in the window. The mode line contains information about the
1534buffer, such as its name, associated file, depth of recursive editing,
1535and major and minor modes. A window can also have a @dfn{header
1536line}, which is much like the mode line but appears at the top of the
8caa1356 1537window.
a44af9f2 1538
8241495d
RS
1539 This section describes how to control the contents of the mode line
1540and header line. We include it in this chapter because much of the
a44af9f2
RS
1541information displayed in the mode line relates to the enabled major and
1542minor modes.
1543
302691ab 1544@menu
94a867a6
RS
1545* Base: Mode Line Basics. Basic ideas of mode line control.
1546* Data: Mode Line Data. The data structure that controls the mode line.
d1b6c896 1547* Top: Mode Line Top. The top level variable, mode-line-format.
302691ab
LT
1548* Mode Line Variables:: Variables used in that data structure.
1549* %-Constructs:: Putting information into a mode line.
1550* Properties in Mode:: Using text properties in the mode line.
1551* Header Lines:: Like a mode line, but at the top.
1552* Emulating Mode Line:: Formatting text as the mode line would.
1553@end menu
1554
1555@node Mode Line Basics
1556@subsection Mode Line Basics
1557
a44af9f2 1558 @code{mode-line-format} is a buffer-local variable that holds a
34e5974a
CY
1559@dfn{mode line construct}, a kind of template, which controls what is
1560displayed on the mode line of the current buffer. The value of
1561@code{header-line-format} specifies the buffer's header line in the
1562same way. All windows for the same buffer use the same
1563@code{mode-line-format} and @code{header-line-format}.
1564
1565 For efficiency, Emacs does not continuously recompute the mode
1566line and header line of a window. It does so when circumstances
8e0f7b5b
RS
1567appear to call for it---for instance, if you change the window
1568configuration, switch buffers, narrow or widen the buffer, scroll, or
1569change the buffer's modification status. If you modify any of the
1570variables referenced by @code{mode-line-format} (@pxref{Mode Line
1571Variables}), or any other variables and data structures that affect
1572how text is displayed (@pxref{Display}), you may want to force an
1573update of the mode line so as to display the new information or
1574display it in the new way.
a44af9f2 1575
0ad8cce8 1576@defun force-mode-line-update &optional all
8241495d 1577Force redisplay of the current buffer's mode line and header line.
8e0f7b5b 1578The next redisplay will update the mode line and header line based on
0ad8cce8
LK
1579the latest values of all relevant variables. With optional
1580non-@code{nil} @var{all}, force redisplay of all mode lines and header
1581lines.
8e0f7b5b
RS
1582
1583This function also forces recomputation of the menu bar menus
1584and the frame title.
a44af9f2
RS
1585@end defun
1586
ec9b0882
RS
1587 The selected window's mode line is usually displayed in a different
1588color using the face @code{mode-line}. Other windows' mode lines
1589appear in the face @code{mode-line-inactive} instead. @xref{Faces}.
a44af9f2 1590
a44af9f2
RS
1591@node Mode Line Data
1592@subsection The Data Structure of the Mode Line
06862374 1593@cindex mode-line construct
a44af9f2 1594
94a867a6
RS
1595 The mode-line contents are controlled by a data structure called a
1596@dfn{mode-line construct}, made up of lists, strings, symbols, and
1597numbers kept in buffer-local variables. Each data type has a specific
1598meaning for the mode-line appearance, as described below. The same
1599data structure is used for constructing frame titles (@pxref{Frame
1600Titles}) and header lines (@pxref{Header Lines}).
a44af9f2 1601
94a867a6
RS
1602 A mode-line construct may be as simple as a fixed string of text,
1603but it usually specifies how to combine fixed strings with variables'
1604values to construct the text. Many of these variables are themselves
1605defined to have mode-line constructs as their values.
06862374 1606
94a867a6 1607 Here are the meanings of various data types as mode-line constructs:
8241495d 1608
a44af9f2
RS
1609@table @code
1610@cindex percent symbol in mode line
1611@item @var{string}
34e5974a
CY
1612A string as a mode-line construct appears verbatim except for
1613@dfn{@code{%}-constructs} in it. These stand for substitution of
1614other data; see @ref{%-Constructs}.
1615
1616If parts of the string have @code{face} properties, they control
1617display of the text just as they would text in the buffer. Any
1618characters which have no @code{face} properties are displayed, by
1619default, in the face @code{mode-line} or @code{mode-line-inactive}
1620(@pxref{Standard Faces,,, emacs, The GNU Emacs Manual}). The
1621@code{help-echo} and @code{local-map} properties in @var{string} have
1622special meanings. @xref{Properties in Mode}.
a44af9f2
RS
1623
1624@item @var{symbol}
06862374
LK
1625A symbol as a mode-line construct stands for its value. The value of
1626@var{symbol} is used as a mode-line construct, in place of @var{symbol}.
8241495d 1627However, the symbols @code{t} and @code{nil} are ignored, as is any
de9f0bd9 1628symbol whose value is void.
a44af9f2
RS
1629
1630There is one exception: if the value of @var{symbol} is a string, it is
de9f0bd9 1631displayed verbatim: the @code{%}-constructs are not recognized.
a44af9f2 1632
a232a240 1633Unless @var{symbol} is marked as ``risky'' (i.e., it has a
94a867a6
RS
1634non-@code{nil} @code{risky-local-variable} property), all text
1635properties specified in @var{symbol}'s value are ignored. This
1636includes the text properties of strings in @var{symbol}'s value, as
34e5974a
CY
1637well as all @code{:eval} and @code{:propertize} forms in it. (The
1638reason for this is security: non-risky variables could be set
1639automatically from file variables without prompting the user.)
a232a240 1640
94a867a6
RS
1641@item (@var{string} @var{rest}@dots{})
1642@itemx (@var{list} @var{rest}@dots{})
de9f0bd9
RS
1643A list whose first element is a string or list means to process all the
1644elements recursively and concatenate the results. This is the most
06862374 1645common form of mode-line construct.
a44af9f2 1646
8241495d
RS
1647@item (:eval @var{form})
1648A list whose first element is the symbol @code{:eval} says to evaluate
b4a83bb8
LT
1649@var{form}, and use the result as a string to display. Make sure this
1650evaluation cannot load any files, as doing so could cause infinite
1651recursion.
8241495d 1652
06862374
LK
1653@item (:propertize @var{elt} @var{props}@dots{})
1654A list whose first element is the symbol @code{:propertize} says to
94a867a6 1655process the mode-line construct @var{elt} recursively, then add the text
06862374
LK
1656properties specified by @var{props} to the result. The argument
1657@var{props} should consist of zero or more pairs @var{text-property}
bf247b6e 1658@var{value}. (This feature is new as of Emacs 22.1.)
06862374 1659
a44af9f2 1660@item (@var{symbol} @var{then} @var{else})
03de4399
RS
1661A list whose first element is a symbol that is not a keyword specifies
1662a conditional. Its meaning depends on the value of @var{symbol}. If
1663@var{symbol} has a non-@code{nil} value, the second element,
1664@var{then}, is processed recursively as a mode-line element.
1665Otherwise, the third element, @var{else}, is processed recursively.
1666You may omit @var{else}; then the mode-line element displays nothing
1667if the value of @var{symbol} is @code{nil} or void.
a44af9f2
RS
1668
1669@item (@var{width} @var{rest}@dots{})
1670A list whose first element is an integer specifies truncation or
1671padding of the results of @var{rest}. The remaining elements
06862374 1672@var{rest} are processed recursively as mode-line constructs and
b4a83bb8
LT
1673concatenated together. When @var{width} is positive, the result is
1674space filled on the right if its width is less than @var{width}. When
1675@var{width} is negative, the result is truncated on the right to
1676@minus{}@var{width} columns if its width exceeds @minus{}@var{width}.
a44af9f2
RS
1677
1678For example, the usual way to show what percentage of a buffer is above
de9f0bd9 1679the top of the window is to use a list like this: @code{(-3 "%p")}.
a44af9f2
RS
1680@end table
1681
94a867a6
RS
1682@node Mode Line Top
1683@subsection The Top Level of Mode Line Control
1684
1685 The variable in overall control of the mode line is
1686@code{mode-line-format}.
1687
1688@defvar mode-line-format
1689The value of this variable is a mode-line construct that controls the
1690contents of the mode-line. It is always buffer-local in all buffers.
1691
1692If you set this variable to @code{nil} in a buffer, that buffer does
1693not have a mode line. (A window that is just one line tall never
1694displays a mode line.)
1695@end defvar
1696
1697 The default value of @code{mode-line-format} is designed to use the
1698values of other variables such as @code{mode-line-position} and
1699@code{mode-line-modes} (which in turn incorporates the values of the
1700variables @code{mode-name} and @code{minor-mode-alist}). Very few
1701modes need to alter @code{mode-line-format} itself. For most
1702purposes, it is sufficient to alter some of the variables that
1703@code{mode-line-format} either directly or indirectly refers to.
1704
a44af9f2 1705 If you do alter @code{mode-line-format} itself, the new value should
de9f0bd9
RS
1706use the same variables that appear in the default value (@pxref{Mode
1707Line Variables}), rather than duplicating their contents or displaying
1708the information in another fashion. This way, customizations made by
bfe721d1
KH
1709the user or by Lisp programs (such as @code{display-time} and major
1710modes) via changes to those variables remain effective.
a44af9f2 1711
a44af9f2 1712 Here is an example of a @code{mode-line-format} that might be
969fe9b5 1713useful for @code{shell-mode}, since it contains the host name and default
a44af9f2
RS
1714directory.
1715
1716@example
1717@group
1718(setq mode-line-format
969fe9b5
RS
1719 (list "-"
1720 'mode-line-mule-info
a44af9f2 1721 'mode-line-modified
969fe9b5 1722 'mode-line-frame-identification
177c0ea7 1723 "%b--"
a44af9f2 1724@end group
f9f59935
RS
1725@group
1726 ;; @r{Note that this is evaluated while making the list.}
06862374 1727 ;; @r{It makes a mode-line construct which is just a string.}
f9f59935
RS
1728 (getenv "HOST")
1729@end group
177c0ea7 1730 ":"
a44af9f2
RS
1731 'default-directory
1732 " "
1733 'global-mode-string
de9f0bd9 1734 " %[("
8241495d 1735 '(:eval (mode-line-mode-name))
177c0ea7
JB
1736 'mode-line-process
1737 'minor-mode-alist
1738 "%n"
969fe9b5 1739 ")%]--"
a44af9f2 1740@group
969fe9b5 1741 '(which-func-mode ("" which-func-format "--"))
bfe721d1 1742 '(line-number-mode "L%l--")
969fe9b5 1743 '(column-number-mode "C%c--")
a232a240 1744 '(-3 "%p")
a44af9f2
RS
1745 "-%-"))
1746@end group
1747@end example
1748
1911e6e5
RS
1749@noindent
1750(The variables @code{line-number-mode}, @code{column-number-mode}
1751and @code{which-func-mode} enable particular minor modes; as usual,
1752these variable names are also the minor mode command names.)
1753
a44af9f2
RS
1754@node Mode Line Variables
1755@subsection Variables Used in the Mode Line
1756
94a867a6
RS
1757 This section describes variables incorporated by the standard value
1758of @code{mode-line-format} into the text of the mode line. There is
1759nothing inherently special about these variables; any other variables
1760could have the same effects on the mode line if
1761@code{mode-line-format}'s value were changed to use them. However,
1762various parts of Emacs set these variables on the understanding that
1763they will control parts of the mode line; therefore, practically
1764speaking, it is essential for the mode line to use them.
a44af9f2 1765
969fe9b5
RS
1766@defvar mode-line-mule-info
1767This variable holds the value of the mode-line construct that displays
1768information about the language environment, buffer coding system, and
a9f0a989 1769current input method. @xref{Non-ASCII Characters}.
969fe9b5
RS
1770@end defvar
1771
a44af9f2 1772@defvar mode-line-modified
de9f0bd9 1773This variable holds the value of the mode-line construct that displays
a44af9f2
RS
1774whether the current buffer is modified.
1775
969fe9b5
RS
1776The default value of @code{mode-line-modified} is @code{("%1*%1+")}.
1777This means that the mode line displays @samp{**} if the buffer is
1778modified, @samp{--} if the buffer is not modified, @samp{%%} if the
1779buffer is read only, and @samp{%*} if the buffer is read only and
1780modified.
a44af9f2
RS
1781
1782Changing this variable does not force an update of the mode line.
1783@end defvar
1784
969fe9b5
RS
1785@defvar mode-line-frame-identification
1786This variable identifies the current frame. The default value is
06862374
LK
1787@code{" "} if you are using a window system which can show multiple
1788frames, or @code{"-%F "} on an ordinary terminal which shows only one
969fe9b5
RS
1789frame at a time.
1790@end defvar
1791
a44af9f2 1792@defvar mode-line-buffer-identification
de9f0bd9 1793This variable identifies the buffer being displayed in the window. Its
ebc6903b
RS
1794default value is @code{("%12b")}, which displays the buffer name, padded
1795with spaces to at least 12 columns.
a44af9f2
RS
1796@end defvar
1797
06862374
LK
1798@defvar mode-line-position
1799This variable indicates the position in the buffer. Here is a
1800simplified version of its default value. The actual default value
1801also specifies addition of the @code{help-echo} text property.
a44af9f2 1802
06862374
LK
1803@example
1804@group
a232a240 1805((-3 "%p")
06862374
LK
1806 (size-indication-mode (8 " of %I"))
1807@end group
1808@group
1809 (line-number-mode
1810 ((column-number-mode
1811 (10 " (%l,%c)")
1812 (6 " L%l")))
1813 ((column-number-mode
1814 (5 " C%c")))))
1815@end group
1816@end example
1817
1818This means that @code{mode-line-position} displays at least the buffer
1819percentage and possibly the buffer size, the line number and the column
1820number.
1821@end defvar
1822
1823@defvar vc-mode
1824The variable @code{vc-mode}, buffer-local in each buffer, records
1825whether the buffer's visited file is maintained with version control,
1826and, if so, which kind. Its value is a string that appears in the mode
1827line, or @code{nil} for no version control.
a44af9f2
RS
1828@end defvar
1829
06862374
LK
1830@defvar mode-line-modes
1831This variable displays the buffer's major and minor modes. Here is a
1832simplified version of its default value. The real default value also
1833specifies addition of text properties.
1834
1835@example
1836@group
1837("%[(" mode-name
1838 mode-line-process minor-mode-alist
1839 "%n" ")%]--")
1840@end group
1841@end example
1842
1843So @code{mode-line-modes} normally also displays the recursive editing
1844level, information on the process status and whether narrowing is in
1845effect.
1846@end defvar
1847
1848 The following three variables are used in @code{mode-line-modes}:
1849
a44af9f2 1850@defvar mode-name
de9f0bd9 1851This buffer-local variable holds the ``pretty'' name of the current
a44af9f2
RS
1852buffer's major mode. Each major mode should set this variable so that the
1853mode name will appear in the mode line.
1854@end defvar
1855
06862374
LK
1856@defvar mode-line-process
1857This buffer-local variable contains the mode-line information on process
1858status in modes used for communicating with subprocesses. It is
1859displayed immediately following the major mode name, with no intervening
1860space. For example, its value in the @samp{*shell*} buffer is
1861@code{(":%s")}, which allows the shell to display its status along
1862with the major mode as: @samp{(Shell:run)}. Normally this variable
1863is @code{nil}.
1864@end defvar
1865
a44af9f2 1866@defvar minor-mode-alist
b4a83bb8 1867@anchor{Definition of minor-mode-alist}
de9f0bd9 1868This variable holds an association list whose elements specify how the
a44af9f2
RS
1869mode line should indicate that a minor mode is active. Each element of
1870the @code{minor-mode-alist} should be a two-element list:
1871
1872@example
1873(@var{minor-mode-variable} @var{mode-line-string})
1874@end example
1875
06862374
LK
1876More generally, @var{mode-line-string} can be any mode-line spec. It
1877appears in the mode line when the value of @var{minor-mode-variable}
1878is non-@code{nil}, and not otherwise. These strings should begin with
a44af9f2 1879spaces so that they don't run together. Conventionally, the
06862374
LK
1880@var{minor-mode-variable} for a specific mode is set to a
1881non-@code{nil} value when that minor mode is activated.
a44af9f2 1882
f9f59935
RS
1883@code{minor-mode-alist} itself is not buffer-local. Each variable
1884mentioned in the alist should be buffer-local if its minor mode can be
1885enabled separately in each buffer.
a44af9f2
RS
1886@end defvar
1887
06862374 1888@defvar global-mode-string
1074a881
JB
1889This variable holds a mode-line spec that, by default, appears in the
1890mode line just after the @code{which-func-mode} minor mode if set,
1891else after @code{mode-line-modes}. The command @code{display-time}
06862374 1892sets @code{global-mode-string} to refer to the variable
1074a881
JB
1893@code{display-time-string}, which holds a string containing the time
1894and load information.
a40d4712 1895
06862374
LK
1896The @samp{%M} construct substitutes the value of
1897@code{global-mode-string}, but that is obsolete, since the variable is
1898included in the mode line from @code{mode-line-format}.
a40d4712
PR
1899@end defvar
1900
1901 The variable @code{default-mode-line-format} is where
1902@code{mode-line-format} usually gets its value:
1903
a44af9f2 1904@defvar default-mode-line-format
de9f0bd9 1905This variable holds the default @code{mode-line-format} for buffers
a44af9f2
RS
1906that do not override it. This is the same as @code{(default-value
1907'mode-line-format)}.
1908
06862374
LK
1909Here is a simplified version of the default value of
1910@code{default-mode-line-format}. The real default value also
1911specifies addition of text properties.
a44af9f2
RS
1912
1913@example
1914@group
f9f59935
RS
1915("-"
1916 mode-line-mule-info
a44af9f2 1917 mode-line-modified
f9f59935 1918 mode-line-frame-identification
a44af9f2 1919 mode-line-buffer-identification
f9f59935 1920@end group
a44af9f2 1921 " "
06862374
LK
1922 mode-line-position
1923 (vc-mode vc-mode)
1924 " "
f9f59935 1925@group
06862374 1926 mode-line-modes
f9f59935 1927 (which-func-mode ("" which-func-format "--"))
06862374 1928 (global-mode-string ("--" global-mode-string))
a44af9f2
RS
1929 "-%-")
1930@end group
1931@end example
1932@end defvar
1933
1934@node %-Constructs
1935@subsection @code{%}-Constructs in the Mode Line
1936
94a867a6
RS
1937 Strings used as mode-line constructs can use certain
1938@code{%}-constructs to substitute various kinds of data. Here is a
1939list of the defined @code{%}-constructs, and what they mean. In any
1940construct except @samp{%%}, you can add a decimal integer after the
1941@samp{%} to specify a minimum field width. If the width is less, the
1942field is padded with spaces to the right.
a44af9f2
RS
1943
1944@table @code
1945@item %b
1946The current buffer name, obtained with the @code{buffer-name} function.
1947@xref{Buffer Names}.
1948
a40d4712
PR
1949@item %c
1950The current column number of point.
1951
f202a77d
JL
1952@item %e
1953When Emacs is nearly out of memory for Lisp objects, a brief message
1954saying so. Otherwise, this is empty.
1955
a44af9f2
RS
1956@item %f
1957The visited file name, obtained with the @code{buffer-file-name}
1958function. @xref{Buffer File Name}.
1959
22697dac 1960@item %F
969fe9b5 1961The title (only on a window system) or the name of the selected frame.
8deadbd4 1962@xref{Basic Parameters}.
22697dac 1963
08622028
LK
1964@item %i
1965The size of the accessible part of the current buffer; basically
1966@code{(- (point-max) (point-min))}.
1967
1968@item %I
1969Like @samp{%i}, but the size is printed in a more readable way by using
1970@samp{k} for 10^3, @samp{M} for 10^6, @samp{G} for 10^9, etc., to
1971abbreviate.
1972
22697dac 1973@item %l
8241495d
RS
1974The current line number of point, counting within the accessible portion
1975of the buffer.
22697dac 1976
a40d4712
PR
1977@item %n
1978@samp{Narrow} when narrowing is in effect; nothing otherwise (see
1979@code{narrow-to-region} in @ref{Narrowing}).
1980
1981@item %p
1982The percentage of the buffer text above the @strong{top} of window, or
1983@samp{Top}, @samp{Bottom} or @samp{All}. Note that the default
1984mode-line specification truncates this to three characters.
1985
1986@item %P
1987The percentage of the buffer text that is above the @strong{bottom} of
1988the window (which includes the text visible in the window, as well as
1989the text above the top), plus @samp{Top} if the top of the buffer is
1990visible on screen; or @samp{Bottom} or @samp{All}.
1991
1992@item %s
1993The status of the subprocess belonging to the current buffer, obtained with
1994@code{process-status}. @xref{Process Information}.
1995
1996@item %t
1997Whether the visited file is a text file or a binary file. This is a
1998meaningful distinction only on certain operating systems (@pxref{MS-DOS
1999File Types}).
2000
f202a77d 2001@item %z
d29bb3ad 2002The mnemonics of keyboard, terminal, and buffer coding systems.
f202a77d
JL
2003
2004@item %Z
2005Like @samp{%z}, but including the end-of-line format.
2006
a44af9f2
RS
2007@item %*
2008@samp{%} if the buffer is read only (see @code{buffer-read-only}); @*
2009@samp{*} if the buffer is modified (see @code{buffer-modified-p}); @*
2010@samp{-} otherwise. @xref{Buffer Modification}.
2011
2012@item %+
22697dac
KH
2013@samp{*} if the buffer is modified (see @code{buffer-modified-p}); @*
2014@samp{%} if the buffer is read only (see @code{buffer-read-only}); @*
2015@samp{-} otherwise. This differs from @samp{%*} only for a modified
2016read-only buffer. @xref{Buffer Modification}.
2017
2018@item %&
de9f0bd9 2019@samp{*} if the buffer is modified, and @samp{-} otherwise.
a44af9f2 2020
a44af9f2
RS
2021@item %[
2022An indication of the depth of recursive editing levels (not counting
2023minibuffer levels): one @samp{[} for each editing level.
2024@xref{Recursive Editing}.
2025
2026@item %]
2027One @samp{]} for each recursive editing level (not counting minibuffer
2028levels).
2029
a40d4712
PR
2030@item %-
2031Dashes sufficient to fill the remainder of the mode line.
2032
a44af9f2
RS
2033@item %%
2034The character @samp{%}---this is how to include a literal @samp{%} in a
2035string in which @code{%}-constructs are allowed.
a44af9f2
RS
2036@end table
2037
2038The following two @code{%}-constructs are still supported, but they are
2039obsolete, since you can get the same results with the variables
2040@code{mode-name} and @code{global-mode-string}.
2041
2042@table @code
2043@item %m
2044The value of @code{mode-name}.
2045
2046@item %M
8392fe4a 2047The value of @code{global-mode-string}.
a44af9f2
RS
2048@end table
2049
8241495d
RS
2050@node Properties in Mode
2051@subsection Properties in the Mode Line
06862374 2052@cindex text properties in the mode line
8241495d 2053
8caa1356 2054 Certain text properties are meaningful in the
8241495d 2055mode line. The @code{face} property affects the appearance of text; the
b4a83bb8 2056@code{help-echo} property associates help strings with the text, and
ce75fd23 2057@code{local-map} can make the text mouse-sensitive.
8241495d 2058
06862374 2059 There are four ways to specify text properties for text in the mode
8241495d
RS
2060line:
2061
2062@enumerate
2063@item
06862374
LK
2064Put a string with a text property directly into the mode-line data
2065structure.
2066
2067@item
2068Put a text property on a mode-line %-construct such as @samp{%12b}; then
2069the expansion of the %-construct will have that same text property.
8241495d
RS
2070
2071@item
06862374
LK
2072Use a @code{(:propertize @var{elt} @var{props}@dots{})} construct to
2073give @var{elt} a text property specified by @var{props}.
8241495d
RS
2074
2075@item
2076Use a list containing @code{:eval @var{form}} in the mode-line data
06862374
LK
2077structure, and make @var{form} evaluate to a string that has a text
2078property.
8241495d
RS
2079@end enumerate
2080
34e5974a
CY
2081 You can use the @code{local-map} property to specify a keymap. This
2082keymap only takes real effect for mouse clicks; binding character keys
2083and function keys to it has no effect, since it is impossible to move
2084point into the mode line.
8241495d 2085
ec9b0882
RS
2086 When the mode line refers to a variable which does not have a
2087non-@code{nil} @code{risky-local-variable} property, any text
2088properties given or specified within that variable's values are
2089ignored. This is because such properties could otherwise specify
2090functions to be called, and those functions could come from file
2091local variables.
2092
8241495d
RS
2093@node Header Lines
2094@subsection Window Header Lines
2095@cindex header line (of a window)
2096@cindex window header line
2097
8caa1356 2098 A window can have a @dfn{header line} at the
8241495d 2099top, just as it can have a mode line at the bottom. The header line
06862374 2100feature works just like the mode-line feature, except that it's
8241495d
RS
2101controlled by different variables.
2102
8241495d
RS
2103@defvar header-line-format
2104This variable, local in every buffer, specifies how to display the
2105header line, for windows displaying the buffer. The format of the value
13ede7fc 2106is the same as for @code{mode-line-format} (@pxref{Mode Line Data}).
8241495d
RS
2107@end defvar
2108
8241495d
RS
2109@defvar default-header-line-format
2110This variable holds the default @code{header-line-format} for buffers
2111that do not override it. This is the same as @code{(default-value
2112'header-line-format)}.
2113
2114It is normally @code{nil}, so that ordinary buffers have no header line.
2115@end defvar
2116
94a867a6
RS
2117 A window that is just one line tall never displays a header line. A
2118window that is two lines tall cannot display both a mode line and a
2119header line at once; if it has a mode line, then it does not display a
2120header line.
2121
bda7c6dd 2122@node Emulating Mode Line
06862374 2123@subsection Emulating Mode-Line Formatting
bda7c6dd
RS
2124
2125 You can use the function @code{format-mode-line} to compute
2126the text that would appear in a mode line or header line
b4a83bb8 2127based on a certain mode-line specification.
bda7c6dd 2128
f2dfc856 2129@defun format-mode-line format &optional face window buffer
bda7c6dd
RS
2130This function formats a line of text according to @var{format} as if
2131it were generating the mode line for @var{window}, but instead of
2132displaying the text in the mode line or the header line, it returns
0a54d76e
RS
2133the text as a string. The argument @var{window} defaults to the
2134selected window. If @var{buffer} is non-@code{nil}, all the
2135information used is taken from @var{buffer}; by default, it comes from
2136@var{window}'s buffer.
bda7c6dd
RS
2137
2138The value string normally has text properties that correspond to the
0fee24ae
RS
2139faces, keymaps, etc., that the mode line would have. And any character
2140for which no @code{face} property is specified gets a default
2141value which is usually @var{face}. (If @var{face} is @code{t},
2142that stands for either @code{mode-line} if @var{window} is selected,
b4a83bb8
LT
2143otherwise @code{mode-line-inactive}. If @var{face} is @code{nil} or
2144omitted, that stands for no face property.)
0fee24ae 2145
f2dfc856 2146However, if @var{face} is an integer, the value has no text properties.
0a54d76e
RS
2147
2148For example, @code{(format-mode-line header-line-format)} returns the
2149text that would appear in the selected window's header line (@code{""}
0fee24ae 2150if it has no header line). @code{(format-mode-line header-line-format
f2dfc856 2151'header-line)} returns the same text, with each character
0fee24ae 2152carrying the face that it will have in the header line itself.
bda7c6dd
RS
2153@end defun
2154
f9f59935
RS
2155@node Imenu
2156@section Imenu
2157
2158@cindex Imenu
969fe9b5
RS
2159 @dfn{Imenu} is a feature that lets users select a definition or
2160section in the buffer, from a menu which lists all of them, to go
5a5d2aec
RS
2161directly to that location in the buffer. Imenu works by constructing
2162a buffer index which lists the names and buffer positions of the
a40d4712 2163definitions, or other named portions of the buffer; then the user can
ec9b0882
RS
2164choose one of them and move point to it. Major modes can add a menu
2165bar item to use Imenu using @code{imenu-add-to-menubar}.
2166
2167@defun imenu-add-to-menubar name
2168This function defines a local menu bar item named @var{name}
2169to run Imenu.
2170@end defun
2171
2172 The user-level commands for using Imenu are described in the Emacs
2173Manual (@pxref{Imenu,, Imenu, emacs, the Emacs Manual}). This section
2174explains how to customize Imenu's method of finding definitions or
2175buffer portions for a particular major mode.
969fe9b5
RS
2176
2177 The usual and simplest way is to set the variable
2178@code{imenu-generic-expression}:
f9f59935
RS
2179
2180@defvar imenu-generic-expression
10ee4e90
LK
2181This variable, if non-@code{nil}, is a list that specifies regular
2182expressions for finding definitions for Imenu. Simple elements of
2183@code{imenu-generic-expression} look like this:
f9f59935
RS
2184
2185@example
10ee4e90 2186(@var{menu-title} @var{regexp} @var{index})
f9f59935
RS
2187@end example
2188
2189Here, if @var{menu-title} is non-@code{nil}, it says that the matches
2190for this element should go in a submenu of the buffer index;
2191@var{menu-title} itself specifies the name for the submenu. If
2192@var{menu-title} is @code{nil}, the matches for this element go directly
2193in the top level of the buffer index.
2194
2195The second item in the list, @var{regexp}, is a regular expression
10ee4e90
LK
2196(@pxref{Regular Expressions}); anything in the buffer that it matches
2197is considered a definition, something to mention in the buffer index.
2198The third item, @var{index}, is a non-negative integer that indicates
2199which subexpression in @var{regexp} matches the definition's name.
f9f59935
RS
2200
2201An element can also look like this:
2202
2203@example
2204(@var{menu-title} @var{regexp} @var{index} @var{function} @var{arguments}@dots{})
2205@end example
2206
c759f47b
RS
2207Each match for this element creates an index item, and when the index
2208item is selected by the user, it calls @var{function} with arguments
2209consisting of the item name, the buffer position, and @var{arguments}.
f9f59935 2210
10ee4e90
LK
2211For Emacs Lisp mode, @code{imenu-generic-expression} could look like
2212this:
f9f59935 2213
a9f0a989 2214@c should probably use imenu-syntax-alist and \\sw rather than [-A-Za-z0-9+]
f9f59935
RS
2215@example
2216@group
2217((nil "^\\s-*(def\\(un\\|subst\\|macro\\|advice\\)\
2218\\s-+\\([-A-Za-z0-9+]+\\)" 2)
2219@end group
2220@group
2221 ("*Vars*" "^\\s-*(def\\(var\\|const\\)\
2222\\s-+\\([-A-Za-z0-9+]+\\)" 2)
2223@end group
2224@group
2225 ("*Types*"
a9f0a989
RS
2226 "^\\s-*\
2227(def\\(type\\|struct\\|class\\|ine-condition\\)\
f9f59935
RS
2228\\s-+\\([-A-Za-z0-9+]+\\)" 2))
2229@end group
2230@end example
2231
969fe9b5 2232Setting this variable makes it buffer-local in the current buffer.
f9f59935
RS
2233@end defvar
2234
2235@defvar imenu-case-fold-search
10ee4e90
LK
2236This variable controls whether matching against the regular
2237expressions in the value of @code{imenu-generic-expression} is
2238case-sensitive: @code{t}, the default, means matching should ignore
2239case.
a9f0a989
RS
2240
2241Setting this variable makes it buffer-local in the current buffer.
2242@end defvar
2243
2244@defvar imenu-syntax-alist
2245This variable is an alist of syntax table modifiers to use while
1911e6e5
RS
2246processing @code{imenu-generic-expression}, to override the syntax table
2247of the current buffer. Each element should have this form:
a9f0a989
RS
2248
2249@example
2250(@var{characters} . @var{syntax-description})
2251@end example
2252
2253The @sc{car}, @var{characters}, can be either a character or a string.
2254The element says to give that character or characters the syntax
2255specified by @var{syntax-description}, which is passed to
2256@code{modify-syntax-entry} (@pxref{Syntax Table Functions}).
2257
2258This feature is typically used to give word syntax to characters which
2259normally have symbol syntax, and thus to simplify
2260@code{imenu-generic-expression} and speed up matching.
2261For example, Fortran mode uses it this way:
2262
2263@example
5a5d2aec 2264(setq imenu-syntax-alist '(("_$" . "w")))
a9f0a989
RS
2265@end example
2266
10ee4e90
LK
2267The @code{imenu-generic-expression} regular expressions can then use
2268@samp{\\sw+} instead of @samp{\\(\\sw\\|\\s_\\)+}. Note that this
2269technique may be inconvenient when the mode needs to limit the initial
2270character of a name to a smaller set of characters than are allowed in
2271the rest of a name.
f9f59935 2272
969fe9b5 2273Setting this variable makes it buffer-local in the current buffer.
f9f59935
RS
2274@end defvar
2275
2276 Another way to customize Imenu for a major mode is to set the
2277variables @code{imenu-prev-index-position-function} and
969fe9b5 2278@code{imenu-extract-index-name-function}:
f9f59935
RS
2279
2280@defvar imenu-prev-index-position-function
05aea714 2281If this variable is non-@code{nil}, its value should be a function that
a40d4712
PR
2282finds the next ``definition'' to put in the buffer index, scanning
2283backward in the buffer from point. It should return @code{nil} if it
5fe3b9bc 2284doesn't find another ``definition'' before point. Otherwise it should
7fdc81ab 2285leave point at the place it finds a ``definition'' and return any
a40d4712 2286non-@code{nil} value.
f9f59935 2287
969fe9b5 2288Setting this variable makes it buffer-local in the current buffer.
f9f59935
RS
2289@end defvar
2290
2291@defvar imenu-extract-index-name-function
2292If this variable is non-@code{nil}, its value should be a function to
969fe9b5
RS
2293return the name for a definition, assuming point is in that definition
2294as the @code{imenu-prev-index-position-function} function would leave
2295it.
f9f59935 2296
969fe9b5 2297Setting this variable makes it buffer-local in the current buffer.
f9f59935
RS
2298@end defvar
2299
969fe9b5 2300 The last way to customize Imenu for a major mode is to set the
a40d4712 2301variable @code{imenu-create-index-function}:
969fe9b5 2302
f9f59935 2303@defvar imenu-create-index-function
10ee4e90
LK
2304This variable specifies the function to use for creating a buffer
2305index. The function should take no arguments, and return an index
2306alist for the current buffer. It is called within
2307@code{save-excursion}, so where it leaves point makes no difference.
f9f59935 2308
10ee4e90
LK
2309The index alist can have three types of elements. Simple elements
2310look like this:
f9f59935 2311
10ee4e90
LK
2312@example
2313(@var{index-name} . @var{index-position})
2314@end example
f9f59935 2315
10ee4e90
LK
2316Selecting a simple element has the effect of moving to position
2317@var{index-position} in the buffer. Special elements look like this:
f9f59935 2318
10ee4e90
LK
2319@example
2320(@var{index-name} @var{index-position} @var{function} @var{arguments}@dots{})
2321@end example
f9f59935 2322
10ee4e90 2323Selecting a special element performs:
f9f59935
RS
2324
2325@example
c22c5da6 2326(funcall @var{function}
10ee4e90 2327 @var{index-name} @var{index-position} @var{arguments}@dots{})
f9f59935
RS
2328@end example
2329
10ee4e90
LK
2330A nested sub-alist element looks like this:
2331
2332@example
f008b925 2333(@var{menu-title} @var{sub-alist})
10ee4e90
LK
2334@end example
2335
f008b925 2336It creates the submenu @var{menu-title} specified by @var{sub-alist}.
10ee4e90 2337
f008b925 2338The default value of @code{imenu-create-index-function} is
342fd6cd
RS
2339@code{imenu-default-create-index-function}. This function calls the
2340value of @code{imenu-prev-index-position-function} and the value of
10ee4e90
LK
2341@code{imenu-extract-index-name-function} to produce the index alist.
2342However, if either of these two variables is @code{nil}, the default
2343function uses @code{imenu-generic-expression} instead.
2344
2345Setting this variable makes it buffer-local in the current buffer.
f9f59935
RS
2346@end defvar
2347
2348@node Font Lock Mode
2349@section Font Lock Mode
54a72868 2350@cindex Font Lock mode
f9f59935
RS
2351
2352 @dfn{Font Lock mode} is a feature that automatically attaches
2353@code{face} properties to certain parts of the buffer based on their
2354syntactic role. How it parses the buffer depends on the major mode;
a40d4712 2355most major modes define syntactic criteria for which faces to use in
969fe9b5 2356which contexts. This section explains how to customize Font Lock for a
a40d4712 2357particular major mode.
f9f59935 2358
4f45f65e
LK
2359 Font Lock mode finds text to highlight in two ways: through
2360syntactic parsing based on the syntax table, and through searching
2361(usually for regular expressions). Syntactic fontification happens
2362first; it finds comments and string constants and highlights them.
2363Search-based fontification happens second.
f9f59935
RS
2364
2365@menu
ec9b0882
RS
2366* Font Lock Basics:: Overview of customizing Font Lock.
2367* Search-based Fontification:: Fontification based on regexps.
03de4399 2368* Customizing Keywords:: Customizing search-based fontification.
ec9b0882
RS
2369* Other Font Lock Variables:: Additional customization facilities.
2370* Levels of Font Lock:: Each mode can define alternative levels
2371 so that the user can select more or less.
2372* Precalculated Fontification:: How Lisp programs that produce the buffer
2373 contents can also specify how to fontify it.
2374* Faces for Font Lock:: Special faces specifically for Font Lock.
4f45f65e
LK
2375* Syntactic Font Lock:: Fontification based on syntax tables.
2376* Setting Syntax Properties:: Defining character syntax based on context
ec9b0882 2377 using the Font Lock mechanism.
03475b05
RS
2378* Multiline Font Lock:: How to coerce Font Lock into properly
2379 highlighting multiline constructs.
f9f59935
RS
2380@end menu
2381
2382@node Font Lock Basics
2383@subsection Font Lock Basics
2384
2385 There are several variables that control how Font Lock mode highlights
2386text. But major modes should not set any of these variables directly.
86494bd5 2387Instead, they should set @code{font-lock-defaults} as a buffer-local
969fe9b5
RS
2388variable. The value assigned to this variable is used, if and when Font
2389Lock mode is enabled, to set all the other variables.
f9f59935
RS
2390
2391@defvar font-lock-defaults
2392This variable is set by major modes, as a buffer-local variable, to
4f45f65e 2393specify how to fontify text in that mode. It automatically becomes
4de0c73c
RS
2394buffer-local when you set it. If its value is @code{nil}, Font-Lock
2395mode does no highlighting, and you can use the @samp{Faces} menu
2396(under @samp{Edit} and then @samp{Text Properties} in the menu bar) to
2397assign faces explicitly to text in the buffer.
2398
2399If non-@code{nil}, the value should look like this:
f9f59935
RS
2400
2401@example
4f45f65e
LK
2402(@var{keywords} [@var{keywords-only} [@var{case-fold}
2403 [@var{syntax-alist} [@var{syntax-begin} @var{other-vars}@dots{}]]]])
f9f59935
RS
2404@end example
2405
2406The first element, @var{keywords}, indirectly specifies the value of
4f45f65e
LK
2407@code{font-lock-keywords} which directs search-based fontification.
2408It can be a symbol, a variable or a function whose value is the list
2409to use for @code{font-lock-keywords}. It can also be a list of
2410several such symbols, one for each possible level of fontification.
2411The first symbol specifies how to do level 1 fontification, the second
2412symbol how to do level 2, and so on. @xref{Levels of Font Lock}.
f9f59935
RS
2413
2414The second element, @var{keywords-only}, specifies the value of the
71689c96
CY
2415variable @code{font-lock-keywords-only}. If this is omitted or
2416@code{nil}, syntactic fontification (of strings and comments) is also
2417performed. If this is non-@code{nil}, such fontification is not
2418performed. @xref{Syntactic Font Lock}.
f9f59935
RS
2419
2420The third element, @var{case-fold}, specifies the value of
4f45f65e
LK
2421@code{font-lock-keywords-case-fold-search}. If it is non-@code{nil},
2422Font Lock mode ignores case when searching as directed by
969fe9b5 2423@code{font-lock-keywords}.
f9f59935 2424
4f45f65e
LK
2425If the fourth element, @var{syntax-alist}, is non-@code{nil}, it
2426should be a list of cons cells of the form @code{(@var{char-or-string}
f9f59935 2427. @var{string})}. These are used to set up a syntax table for
4f45f65e
LK
2428syntactic fontification (@pxref{Syntax Table Functions}). The
2429resulting syntax table is stored in @code{font-lock-syntax-table}.
f9f59935
RS
2430
2431The fifth element, @var{syntax-begin}, specifies the value of
3c8572f5
LK
2432@code{font-lock-beginning-of-syntax-function}. We recommend setting
2433this variable to @code{nil} and using @code{syntax-begin-function}
2434instead.
f9f59935 2435
a40d4712
PR
2436All the remaining elements (if any) are collectively called
2437@var{other-vars}. Each of these elements should have the form
4f45f65e
LK
2438@code{(@var{variable} . @var{value})}---which means, make
2439@var{variable} buffer-local and then set it to @var{value}. You can
2440use these @var{other-vars} to set other variables that affect
2441fontification, aside from those you can control with the first five
2442elements. @xref{Other Font Lock Variables}.
f9f59935
RS
2443@end defvar
2444
4de0c73c
RS
2445 If your mode fontifies text explicitly by adding
2446@code{font-lock-face} properties, it can specify @code{(nil t)} for
2447@code{font-lock-defaults} to turn off all automatic fontification.
2448However, this is not required; it is possible to fontify some things
2449using @code{font-lock-face} properties and set up automatic
2450fontification for other parts of the text.
2451
f9f59935
RS
2452@node Search-based Fontification
2453@subsection Search-based Fontification
2454
2455 The most important variable for customizing Font Lock mode is
2456@code{font-lock-keywords}. It specifies the search criteria for
4f45f65e
LK
2457search-based fontification. You should specify the value of this
2458variable with @var{keywords} in @code{font-lock-defaults}.
f9f59935
RS
2459
2460@defvar font-lock-keywords
2461This variable's value is a list of the keywords to highlight. Be
969fe9b5
RS
2462careful when composing regular expressions for this list; a poorly
2463written pattern can dramatically slow things down!
f9f59935
RS
2464@end defvar
2465
2466 Each element of @code{font-lock-keywords} specifies how to find
969fe9b5
RS
2467certain cases of text, and how to highlight those cases. Font Lock mode
2468processes the elements of @code{font-lock-keywords} one by one, and for
2469each element, it finds and handles all matches. Ordinarily, once
2470part of the text has been fontified already, this cannot be overridden
2471by a subsequent match in the same text; but you can specify different
199bb209 2472behavior using the @var{override} element of a @var{subexp-highlighter}.
969fe9b5
RS
2473
2474 Each element of @code{font-lock-keywords} should have one of these
2475forms:
f9f59935
RS
2476
2477@table @code
2478@item @var{regexp}
2479Highlight all matches for @var{regexp} using
2480@code{font-lock-keyword-face}. For example,
2481
2482@example
199bb209 2483;; @r{Highlight occurrences of the word @samp{foo}}
f9f59935
RS
2484;; @r{using @code{font-lock-keyword-face}.}
2485"\\<foo\\>"
2486@end example
2487
199bb209
LK
2488The function @code{regexp-opt} (@pxref{Regexp Functions}) is useful
2489for calculating optimal regular expressions to match a number of
2490different keywords.
f9f59935
RS
2491
2492@item @var{function}
2493Find text by calling @var{function}, and highlight the matches
2494it finds using @code{font-lock-keyword-face}.
2495
2496When @var{function} is called, it receives one argument, the limit of
022cb162 2497the search; it should begin searching at point, and not search beyond the
07f7b41c
RS
2498limit. It should return non-@code{nil} if it succeeds, and set the
2499match data to describe the match that was found. Returning @code{nil}
2500indicates failure of the search.
2501
2502Fontification will call @var{function} repeatedly with the same limit,
2503and with point where the previous invocation left it, until
2504@var{function} fails. On failure, @var{function} need not reset point
2505in any particular way.
f9f59935 2506
199bb209 2507@item (@var{matcher} . @var{subexp})
86494bd5 2508In this kind of element, @var{matcher} is either a regular
f9f59935 2509expression or a function, as described above. The @sc{cdr},
199bb209 2510@var{subexp}, specifies which subexpression of @var{matcher} should be
969fe9b5 2511highlighted (instead of the entire text that @var{matcher} matched).
f9f59935
RS
2512
2513@example
8241495d 2514;; @r{Highlight the @samp{bar} in each occurrence of @samp{fubar},}
f9f59935
RS
2515;; @r{using @code{font-lock-keyword-face}.}
2516("fu\\(bar\\)" . 1)
2517@end example
2518
969fe9b5 2519If you use @code{regexp-opt} to produce the regular expression
342fd6cd 2520@var{matcher}, you can use @code{regexp-opt-depth} (@pxref{Regexp
199bb209 2521Functions}) to calculate the value for @var{subexp}.
f9f59935 2522
3ab66863 2523@item (@var{matcher} . @var{facespec})
ed35c736
RS
2524In this kind of element, @var{facespec} is an expression whose value
2525specifies the face to use for highlighting. In the simplest case,
2526@var{facespec} is a Lisp variable (a symbol) whose value is a face
2527name.
f9f59935
RS
2528
2529@example
2530;; @r{Highlight occurrences of @samp{fubar},}
2531;; @r{using the face which is the value of @code{fubar-face}.}
2532("fubar" . fubar-face)
2533@end example
2534
ed35c736 2535However, @var{facespec} can also evaluate to a list of this form:
fdba9ef4
RS
2536
2537@example
2538(face @var{face} @var{prop1} @var{val1} @var{prop2} @var{val2}@dots{})
2539@end example
2540
ed35c736 2541@noindent
199bb209
LK
2542to specify the face @var{face} and various additional text properties
2543to put on the text that matches. If you do this, be sure to add the
2544other text property names that you set in this way to the value of
2545@code{font-lock-extra-managed-props} so that the properties will also
2546be cleared out when they are no longer appropriate. Alternatively,
2547you can set the variable @code{font-lock-unfontify-region-function} to
4f45f65e
LK
2548a function that clears these properties. @xref{Other Font Lock
2549Variables}.
fdba9ef4 2550
199bb209
LK
2551@item (@var{matcher} . @var{subexp-highlighter})
2552In this kind of element, @var{subexp-highlighter} is a list
f9f59935 2553which specifies how to highlight matches found by @var{matcher}.
199bb209 2554It has the form:
f9f59935
RS
2555
2556@example
199bb209 2557(@var{subexp} @var{facespec} [[@var{override} [@var{laxmatch}]])
f9f59935
RS
2558@end example
2559
2560The @sc{car}, @var{subexp}, is an integer specifying which subexpression
969fe9b5 2561of the match to fontify (0 means the entire matching text). The second
ed35c736
RS
2562subelement, @var{facespec}, is an expression whose value specifies the
2563face, as described above.
f9f59935 2564
199bb209
LK
2565The last two values in @var{subexp-highlighter}, @var{override} and
2566@var{laxmatch}, are optional flags. If @var{override} is @code{t},
2567this element can override existing fontification made by previous
2568elements of @code{font-lock-keywords}. If it is @code{keep}, then
2569each character is fontified if it has not been fontified already by
2570some other element. If it is @code{prepend}, the face specified by
3ab66863
RS
2571@var{facespec} is added to the beginning of the @code{font-lock-face}
2572property. If it is @code{append}, the face is added to the end of the
bda7c6dd 2573@code{font-lock-face} property.
f9f59935
RS
2574
2575If @var{laxmatch} is non-@code{nil}, it means there should be no error
2576if there is no subexpression numbered @var{subexp} in @var{matcher}.
99b62845
GM
2577Obviously, fontification of the subexpression numbered @var{subexp} will
2578not occur. However, fontification of other subexpressions (and other
2579regexps) will continue. If @var{laxmatch} is @code{nil}, and the
a3ee0299 2580specified subexpression is missing, then an error is signaled which
99b62845 2581terminates search-based fontification.
f9f59935
RS
2582
2583Here are some examples of elements of this kind, and what they do:
2584
2585@smallexample
199bb209
LK
2586;; @r{Highlight occurrences of either @samp{foo} or @samp{bar}, using}
2587;; @r{@code{foo-bar-face}, even if they have already been highlighted.}
f9f59935
RS
2588;; @r{@code{foo-bar-face} should be a variable whose value is a face.}
2589("foo\\|bar" 0 foo-bar-face t)
2590
8241495d 2591;; @r{Highlight the first subexpression within each occurrence}
f9f59935
RS
2592;; @r{that the function @code{fubar-match} finds,}
2593;; @r{using the face which is the value of @code{fubar-face}.}
2594(fubar-match 1 fubar-face)
2595@end smallexample
2596
199bb209
LK
2597@item (@var{matcher} . @var{anchored-highlighter})
2598In this kind of element, @var{anchored-highlighter} specifies how to
2599highlight text that follows a match found by @var{matcher}. So a
2600match found by @var{matcher} acts as the anchor for further searches
2601specified by @var{anchored-highlighter}. @var{anchored-highlighter}
2602is a list of the following form:
f9f59935 2603
199bb209
LK
2604@example
2605(@var{anchored-matcher} @var{pre-form} @var{post-form}
2606 @var{subexp-highlighters}@dots{})
2607@end example
f9f59935 2608
199bb209
LK
2609Here, @var{anchored-matcher}, like @var{matcher}, is either a regular
2610expression or a function. After a match of @var{matcher} is found,
2611point is at the end of the match. Now, Font Lock evaluates the form
2612@var{pre-form}. Then it searches for matches of
2613@var{anchored-matcher} and uses @var{subexp-highlighters} to highlight
2614these. A @var{subexp-highlighter} is as described above. Finally,
2615Font Lock evaluates @var{post-form}.
2616
2617The forms @var{pre-form} and @var{post-form} can be used to initialize
2618before, and cleanup after, @var{anchored-matcher} is used. Typically,
2619@var{pre-form} is used to move point to some position relative to the
2620match of @var{matcher}, before starting with @var{anchored-matcher}.
2621@var{post-form} might be used to move back, before resuming with
2622@var{matcher}.
2623
2624After Font Lock evaluates @var{pre-form}, it does not search for
2625@var{anchored-matcher} beyond the end of the line. However, if
2626@var{pre-form} returns a buffer position that is greater than the
2627position of point after @var{pre-form} is evaluated, then the position
2628returned by @var{pre-form} is used as the limit of the search instead.
2629It is generally a bad idea to return a position greater than the end
2630of the line; in other words, the @var{anchored-matcher} search should
2631not span lines.
f9f59935 2632
199bb209 2633For example,
f9f59935 2634
199bb209
LK
2635@smallexample
2636;; @r{Highlight occurrences of the word @samp{item} following}
2637;; @r{an occurrence of the word @samp{anchor} (on the same line)}
2638;; @r{in the value of @code{item-face}.}
2639("\\<anchor\\>" "\\<item\\>" nil nil (0 item-face))
2640@end smallexample
f9f59935 2641
199bb209
LK
2642Here, @var{pre-form} and @var{post-form} are @code{nil}. Therefore
2643searching for @samp{item} starts at the end of the match of
2644@samp{anchor}, and searching for subsequent instances of @samp{anchor}
2645resumes from where searching for @samp{item} concluded.
f9f59935 2646
199bb209
LK
2647@item (@var{matcher} @var{highlighters}@dots{})
2648This sort of element specifies several @var{highlighter} lists for a
2649single @var{matcher}. A @var{highlighter} list can be of the type
2650@var{subexp-highlighter} or @var{anchored-highlighter} as described
2651above.
f9f59935 2652
199bb209 2653For example,
f9f59935 2654
199bb209
LK
2655@smallexample
2656;; @r{Highlight occurrences of the word @samp{anchor} in the value}
2657;; @r{of @code{anchor-face}, and subsequent occurrences of the word}
2658;; @r{@samp{item} (on the same line) in the value of @code{item-face}.}
2659("\\<anchor\\>" (0 anchor-face)
2660 ("\\<item\\>" nil nil (0 item-face)))
2661@end smallexample
f9f59935
RS
2662
2663@item (eval . @var{form})
969fe9b5 2664Here @var{form} is an expression to be evaluated the first time
f9f59935 2665this value of @code{font-lock-keywords} is used in a buffer.
969fe9b5 2666Its value should have one of the forms described in this table.
f9f59935
RS
2667@end table
2668
2669@strong{Warning:} Do not design an element of @code{font-lock-keywords}
b841df8f 2670to match text which spans lines; this does not work reliably.
03475b05 2671For details, see @xref{Multiline Font Lock}.
f9f59935 2672
4f45f65e
LK
2673You can use @var{case-fold} in @code{font-lock-defaults} to specify
2674the value of @code{font-lock-keywords-case-fold-search} which says
2675whether search-based fontification should be case-insensitive.
f9f59935
RS
2676
2677@defvar font-lock-keywords-case-fold-search
969fe9b5
RS
2678Non-@code{nil} means that regular expression matching for the sake of
2679@code{font-lock-keywords} should be case-insensitive.
f9f59935
RS
2680@end defvar
2681
03de4399
RS
2682@node Customizing Keywords
2683@subsection Customizing Search-Based Fontification
2684
2685 You can use @code{font-lock-add-keywords} to add additional
4f45f65e
LK
2686search-based fontification rules to a major mode, and
2687@code{font-lock-remove-keywords} to removes rules.
2688
b158c851 2689@defun font-lock-add-keywords mode keywords &optional how
03de4399
RS
2690This function adds highlighting @var{keywords}, for the current buffer
2691or for major mode @var{mode}. The argument @var{keywords} should be a
2692list with the same format as the variable @code{font-lock-keywords}.
2693
2694If @var{mode} is a symbol which is a major mode command name, such as
2695@code{c-mode}, the effect is that enabling Font Lock mode in
2696@var{mode} will add @var{keywords} to @code{font-lock-keywords}.
2697Calling with a non-@code{nil} value of @var{mode} is correct only in
2698your @file{~/.emacs} file.
2699
2700If @var{mode} is @code{nil}, this function adds @var{keywords} to
2701@code{font-lock-keywords} in the current buffer. This way of calling
2702@code{font-lock-add-keywords} is usually used in mode hook functions.
4f45f65e
LK
2703
2704By default, @var{keywords} are added at the beginning of
b158c851 2705@code{font-lock-keywords}. If the optional argument @var{how} is
4f45f65e 2706@code{set}, they are used to replace the value of
b158c851
RF
2707@code{font-lock-keywords}. If @var{how} is any other non-@code{nil}
2708value, they are added at the end of @code{font-lock-keywords}.
f9f59935 2709
03de4399
RS
2710Some modes provide specialized support you can use in additional
2711highlighting patterns. See the variables
2712@code{c-font-lock-extra-types}, @code{c++-font-lock-extra-types},
342fd6cd 2713and @code{java-font-lock-extra-types}, for example.
03de4399
RS
2714
2715@strong{Warning:} major mode functions must not call
2716@code{font-lock-add-keywords} under any circumstances, either directly
2717or indirectly, except through their mode hooks. (Doing so would lead
2718to incorrect behavior for some minor modes.) They should set up their
2719rules for search-based fontification by setting
2720@code{font-lock-keywords}.
2721@end defun
2722
2723@defun font-lock-remove-keywords mode keywords
2724This function removes @var{keywords} from @code{font-lock-keywords}
2725for the current buffer or for major mode @var{mode}. As in
2726@code{font-lock-add-keywords}, @var{mode} should be a major mode
b158c851 2727command name or @code{nil}. All the caveats and requirements for
03de4399
RS
2728@code{font-lock-add-keywords} apply here too.
2729@end defun
2730
2731 For example, this code
f9f59935 2732
4f45f65e
LK
2733@smallexample
2734(font-lock-add-keywords 'c-mode
2735 '(("\\<\\(FIXME\\):" 1 font-lock-warning-face prepend)
2736 ("\\<\\(and\\|or\\|not\\)\\>" . font-lock-keyword-face)))
2737@end smallexample
f9f59935 2738
03de4399 2739@noindent
4f45f65e
LK
2740adds two fontification patterns for C mode: one to fontify the word
2741@samp{FIXME}, even in comments, and another to fontify the words
2742@samp{and}, @samp{or} and @samp{not} as keywords.
2743
03de4399
RS
2744@noindent
2745That example affects only C mode proper. To add the same patterns to
2746C mode @emph{and} all modes derived from it, do this instead:
4f45f65e 2747
03de4399
RS
2748@smallexample
2749(add-hook 'c-mode-hook
2750 (lambda ()
2751 (font-lock-add-keywords nil
2752 '(("\\<\\(FIXME\\):" 1 font-lock-warning-face prepend)
2753 ("\\<\\(and\\|or\\|not\\)\\>" .
2754 font-lock-keyword-face)))))
2755@end smallexample
4f45f65e
LK
2756
2757@node Other Font Lock Variables
2758@subsection Other Font Lock Variables
2759
2760 This section describes additional variables that a major mode can
2761set by means of @var{other-vars} in @code{font-lock-defaults}
2762(@pxref{Font Lock Basics}).
f9f59935
RS
2763
2764@defvar font-lock-mark-block-function
969fe9b5
RS
2765If this variable is non-@code{nil}, it should be a function that is
2766called with no arguments, to choose an enclosing range of text for
aaac1251 2767refontification for the command @kbd{M-o M-o}
969fe9b5
RS
2768(@code{font-lock-fontify-block}).
2769
2770The function should report its choice by placing the region around it.
2771A good choice is a range of text large enough to give proper results,
2772but not too large so that refontification becomes slow. Typical values
2773are @code{mark-defun} for programming modes or @code{mark-paragraph} for
2774textual modes.
f9f59935
RS
2775@end defvar
2776
fdba9ef4 2777@defvar font-lock-extra-managed-props
4f45f65e
LK
2778This variable specifies additional properties (other than
2779@code{font-lock-face}) that are being managed by Font Lock mode. It
2780is used by @code{font-lock-default-unfontify-region}, which normally
2781only manages the @code{font-lock-face} property. If you want Font
2782Lock to manage other properties as well, you must specify them in a
2783@var{facespec} in @code{font-lock-keywords} as well as add them to
2784this list. @xref{Search-based Fontification}.
fdba9ef4
RS
2785@end defvar
2786
4f45f65e
LK
2787@defvar font-lock-fontify-buffer-function
2788Function to use for fontifying the buffer. The default value is
2789@code{font-lock-default-fontify-buffer}.
2790@end defvar
8ba2808b 2791
4f45f65e
LK
2792@defvar font-lock-unfontify-buffer-function
2793Function to use for unfontifying the buffer. This is used when
2794turning off Font Lock mode. The default value is
2795@code{font-lock-default-unfontify-buffer}.
2796@end defvar
2797
2798@defvar font-lock-fontify-region-function
2799Function to use for fontifying a region. It should take two
2800arguments, the beginning and end of the region, and an optional third
2801argument @var{verbose}. If @var{verbose} is non-@code{nil}, the
2802function should print status messages. The default value is
2803@code{font-lock-default-fontify-region}.
2804@end defvar
2805
2806@defvar font-lock-unfontify-region-function
2807Function to use for unfontifying a region. It should take two
2808arguments, the beginning and end of the region. The default value is
2809@code{font-lock-default-unfontify-region}.
8ba2808b
SM
2810@end defvar
2811
4f45f65e
LK
2812@ignore
2813@defvar font-lock-inhibit-thing-lock
2814List of Font Lock mode related modes that should not be turned on.
2815Currently, valid mode names are @code{fast-lock-mode},
2816@code{jit-lock-mode} and @code{lazy-lock-mode}.
2817@end defvar
2818@end ignore
2819
f9f59935
RS
2820@node Levels of Font Lock
2821@subsection Levels of Font Lock
2822
2823 Many major modes offer three different levels of fontification. You
2824can define multiple levels by using a list of symbols for @var{keywords}
2825in @code{font-lock-defaults}. Each symbol specifies one level of
2826fontification; it is up to the user to choose one of these levels. The
2827chosen level's symbol value is used to initialize
2828@code{font-lock-keywords}.
2829
969fe9b5
RS
2830 Here are the conventions for how to define the levels of
2831fontification:
2832
f9f59935
RS
2833@itemize @bullet
2834@item
2835Level 1: highlight function declarations, file directives (such as include or
2836import directives), strings and comments. The idea is speed, so only
2837the most important and top-level components are fontified.
2838
2839@item
969fe9b5
RS
2840Level 2: in addition to level 1, highlight all language keywords,
2841including type names that act like keywords, as well as named constant
2842values. The idea is that all keywords (either syntactic or semantic)
2843should be fontified appropriately.
f9f59935
RS
2844
2845@item
969fe9b5
RS
2846Level 3: in addition to level 2, highlight the symbols being defined in
2847function and variable declarations, and all builtin function names,
2848wherever they appear.
f9f59935
RS
2849@end itemize
2850
651f7556
CW
2851@node Precalculated Fontification
2852@subsection Precalculated Fontification
2853
ec9b0882 2854 In addition to using @code{font-lock-defaults} for search-based
651f7556
CW
2855fontification, you may use the special character property
2856@code{font-lock-face} (@pxref{Special Properties}). This property
2857acts just like the explicit @code{face} property, but its activation
2858is toggled when the user calls @kbd{M-x font-lock-mode}. Using
06862374 2859@code{font-lock-face} is especially convenient for special modes
651f7556
CW
2860which construct their text programmatically, such as
2861@code{list-buffers} and @code{occur}.
2862
0ab0c481 2863If your mode does not use any of the other machinery of Font Lock
4f45f65e 2864(i.e. it only uses the @code{font-lock-face} property), it should not
ca768308 2865set the variable @code{font-lock-defaults}.
0ab0c481 2866
f9f59935
RS
2867@node Faces for Font Lock
2868@subsection Faces for Font Lock
ad8d30b3
EZ
2869@cindex faces for font lock
2870@cindex font lock faces
f9f59935
RS
2871
2872 You can make Font Lock mode use any face, but several faces are
2873defined specifically for Font Lock mode. Each of these symbols is both
2874a face name, and a variable whose default value is the symbol itself.
2875Thus, the default value of @code{font-lock-comment-face} is
2876@code{font-lock-comment-face}. This means you can write
2877@code{font-lock-comment-face} in a context such as
2878@code{font-lock-keywords} where a face-name-valued expression is used.
2879
2880@table @code
2881@item font-lock-comment-face
2882@vindex font-lock-comment-face
f9f59935
RS
2883Used (typically) for comments.
2884
4f45f65e
LK
2885@item font-lock-comment-delimiter-face
2886@vindex font-lock-comment-delimiter-face
2887Used (typically) for comments delimiters.
2888
ec9b0882
RS
2889@item font-lock-doc-face
2890@vindex font-lock-doc-face
2891Used (typically) for documentation strings in the code.
2892
f9f59935
RS
2893@item font-lock-string-face
2894@vindex font-lock-string-face
f9f59935
RS
2895Used (typically) for string constants.
2896
2897@item font-lock-keyword-face
2898@vindex font-lock-keyword-face
f9f59935
RS
2899Used (typically) for keywords---names that have special syntactic
2900significance, like @code{for} and @code{if} in C.
2901
2902@item font-lock-builtin-face
2903@vindex font-lock-builtin-face
f9f59935
RS
2904Used (typically) for built-in function names.
2905
2906@item font-lock-function-name-face
2907@vindex font-lock-function-name-face
f9f59935 2908Used (typically) for the name of a function being defined or declared,
177c0ea7 2909in a function definition or declaration.
f9f59935
RS
2910
2911@item font-lock-variable-name-face
2912@vindex font-lock-variable-name-face
f9f59935
RS
2913Used (typically) for the name of a variable being defined or declared,
2914in a variable definition or declaration.
2915
2916@item font-lock-type-face
2917@vindex font-lock-type-face
f9f59935
RS
2918Used (typically) for names of user-defined data types,
2919where they are defined and where they are used.
2920
2921@item font-lock-constant-face
2922@vindex font-lock-constant-face
f9f59935
RS
2923Used (typically) for constant names.
2924
c22c5da6
LK
2925@item font-lock-preprocessor-face
2926@vindex font-lock-preprocessor-face
fdba9ef4
RS
2927Used (typically) for preprocessor commands.
2928
34e5974a
CY
2929@item font-lock-negation-char-face
2930@vindex font-lock-negation-char-face
2931Used (typically) for easily-overlooked negation characters.
2932
f9f59935
RS
2933@item font-lock-warning-face
2934@vindex font-lock-warning-face
f9f59935
RS
2935Used (typically) for constructs that are peculiar, or that greatly
2936change the meaning of other text. For example, this is used for
2937@samp{;;;###autoload} cookies in Emacs Lisp, and for @code{#error}
2938directives in C.
2939@end table
2940
969fe9b5
RS
2941@node Syntactic Font Lock
2942@subsection Syntactic Font Lock
ad8d30b3 2943@cindex syntactic font lock
969fe9b5 2944
4f45f65e
LK
2945Syntactic fontification uses the syntax table to find comments and
2946string constants (@pxref{Syntax Tables}). It highlights them using
fd2adae3
RS
2947@code{font-lock-comment-face} and @code{font-lock-string-face}
2948(@pxref{Faces for Font Lock}), or whatever
2949@code{font-lock-syntactic-face-function} chooses. There are several
2950variables that affect syntactic fontification; you should set them by
2951means of @code{font-lock-defaults} (@pxref{Font Lock Basics}).
4f45f65e
LK
2952
2953@defvar font-lock-keywords-only
2954Non-@code{nil} means Font Lock should not do syntactic fontification;
2955it should only fontify based on @code{font-lock-keywords}. The normal
2956way for a mode to set this variable to @code{t} is with
2957@var{keywords-only} in @code{font-lock-defaults}.
2958@end defvar
2959
2960@defvar font-lock-syntax-table
2961This variable holds the syntax table to use for fontification of
2962comments and strings. Specify it using @var{syntax-alist} in
90b80b69
RS
2963@code{font-lock-defaults}. If this is @code{nil}, fontification uses
2964the buffer's syntax table.
4f45f65e
LK
2965@end defvar
2966
4f45f65e
LK
2967@defvar font-lock-beginning-of-syntax-function
2968If this variable is non-@code{nil}, it should be a function to move
2969point back to a position that is syntactically at ``top level'' and
2970outside of strings or comments. Font Lock uses this when necessary
2971to get the right results for syntactic fontification.
2972
2973This function is called with no arguments. It should leave point at
2974the beginning of any enclosing syntactic block. Typical values are
2975@code{beginning-of-line} (used when the start of the line is known to
2976be outside a syntactic block), or @code{beginning-of-defun} for
2977programming modes, or @code{backward-paragraph} for textual modes.
2978
3c8572f5
LK
2979If the value is @code{nil}, Font Lock uses
2980@code{syntax-begin-function} to move back outside of any comment,
2981string, or sexp. This variable is semi-obsolete; we recommend setting
2982@code{syntax-begin-function} instead.
4f45f65e
LK
2983
2984Specify this variable using @var{syntax-begin} in
2985@code{font-lock-defaults}.
2986@end defvar
2987
2988@defvar font-lock-syntactic-face-function
2989A function to determine which face to use for a given syntactic
2990element (a string or a comment). The function is called with one
2991argument, the parse state at point returned by
2992@code{parse-partial-sexp}, and should return a face. The default
2993value returns @code{font-lock-comment-face} for comments and
2994@code{font-lock-string-face} for strings.
2995
2996This can be used to highlighting different kinds of strings or
2997comments differently. It is also sometimes abused together with
03475b05
RS
2998@code{font-lock-syntactic-keywords} to highlight constructs that span
2999multiple lines, but this is too esoteric to document here.
4f45f65e
LK
3000
3001Specify this variable using @var{other-vars} in
3002@code{font-lock-defaults}.
3003@end defvar
3004
3005@node Setting Syntax Properties
3006@subsection Setting Syntax Properties
3007
969fe9b5 3008 Font Lock mode can be used to update @code{syntax-table} properties
4f45f65e
LK
3009automatically (@pxref{Syntax Properties}). This is useful in
3010languages for which a single syntax table by itself is not sufficient.
969fe9b5
RS
3011
3012@defvar font-lock-syntactic-keywords
4f45f65e
LK
3013This variable enables and controls updating @code{syntax-table}
3014properties by Font Lock. Its value should be a list of elements of
3015this form:
969fe9b5
RS
3016
3017@example
3018(@var{matcher} @var{subexp} @var{syntax} @var{override} @var{laxmatch})
3019@end example
3020
3021The parts of this element have the same meanings as in the corresponding
3022sort of element of @code{font-lock-keywords},
3023
3024@example
4f45f65e 3025(@var{matcher} @var{subexp} @var{facespec} @var{override} @var{laxmatch})
969fe9b5
RS
3026@end example
3027
4f45f65e 3028However, instead of specifying the value @var{facespec} to use for the
f8cecb20
DL
3029@code{face} property, it specifies the value @var{syntax} to use for
3030the @code{syntax-table} property. Here, @var{syntax} can be a string
3031(as taken by @code{modify-syntax-entry}), a syntax table, a cons cell
3032(as returned by @code{string-to-syntax}), or an expression whose value
3033is one of those two types. @var{override} cannot be @code{prepend} or
3034@code{append}.
3035
3036For example, an element of the form:
3037
3038@example
3039("\\$\\(#\\)" 1 ".")
3040@end example
3041
3042highlights syntactically a hash character when following a dollar
3043character, with a SYNTAX of @code{"."} (meaning punctuation syntax).
3044Assuming that the buffer syntax table specifies hash characters to
3045have comment start syntax, the element will only highlight hash
3046characters that do not follow dollar characters as comments
3047syntactically.
3048
3049An element of the form:
3050
3051@example
3052 ("\\('\\).\\('\\)"
3053 (1 "\"")
3054 (2 "\""))
3055@end example
3056
3057highlights syntactically both single quotes which surround a single
3058character, with a SYNTAX of @code{"\""} (meaning string quote syntax).
3059Assuming that the buffer syntax table does not specify single quotes
3060to have quote syntax, the element will only highlight single quotes of
3061the form @samp{'@var{c}'} as strings syntactically. Other forms, such
3062as @samp{foo'bar} or @samp{'fubar'}, will not be highlighted as
3063strings.
3064
4f45f65e
LK
3065Major modes normally set this variable with @var{other-vars} in
3066@code{font-lock-defaults}.
969fe9b5
RS
3067@end defvar
3068
03475b05
RS
3069@node Multiline Font Lock
3070@subsection Multiline Font Lock Constructs
3071@cindex multiline font lock
3072
3073 Normally, elements of @code{font-lock-keywords} should not match
3074across multiple lines; that doesn't work reliably, because Font Lock
3075usually scans just part of the buffer, and it can miss a multi-line
3076construct that crosses the line boundary where the scan starts. (The
3077scan normally starts at the beginning of a line.)
3078
3079 Making elements that match multiline constructs work properly has
3080two aspects: correct @emph{identification} and correct
3081@emph{rehighlighting}. The first means that Font Lock finds all
3082multiline constructs. The second means that Font Lock will correctly
3083rehighlight all the relevant text when a multiline construct is
3084changed---for example, if some of the text that was previously part of
3085a multiline construct ceases to be part of it. The two aspects are
3086closely related, and often getting one of them to work will appear to
3087make the other also work. However, for reliable results you must
3088attend explicitly to both aspects.
3089
05a1066f 3090 There are three ways to ensure correct identification of multiline
03475b05
RS
3091constructs:
3092
830951b0
SM
3093@itemize
3094@item
05a1066f 3095Add a function to @code{font-lock-extend-region-functions} that does
e642d1fe 3096the @emph{identification} and extends the scan so that the scanned
05a1066f 3097text never starts or ends in the middle of a multiline construct.
22e659d7
SM
3098@item
3099Use the @code{font-lock-fontify-region-function} hook similarly to
3100extend the scan so that the scanned text never starts or ends in the
3101middle of a multiline construct.
3102@item
3103Somehow identify the multiline construct right when it gets inserted
3104into the buffer (or at any point after that but before font-lock
3105tries to highlight it), and mark it with a @code{font-lock-multiline}
3106which will instruct font-lock not to start or end the scan in the
3107middle of the construct.
830951b0
SM
3108@end itemize
3109
03475b05
RS
3110 There are three ways to do rehighlighting of multiline constructs:
3111
830951b0
SM
3112@itemize
3113@item
03475b05
RS
3114Place a @code{font-lock-multiline} property on the construct. This
3115will rehighlight the whole construct if any part of it is changed. In
3116some cases you can do this automatically by setting the
22e659d7 3117@code{font-lock-multiline} variable, which see.
03475b05 3118@item
6b28caea
SM
3119Make sure @code{jit-lock-contextually} is set and rely on it doing its
3120job. This will only rehighlight the part of the construct that
3121follows the actual change, and will do it after a short delay.
3122This only works if the highlighting of the various parts of your
3123multiline construct never depends on text in subsequent lines.
3124Since @code{jit-lock-contextually} is activated by default, this can
3125be an attractive solution.
03475b05
RS
3126@item
3127Place a @code{jit-lock-defer-multiline} property on the construct.
6b28caea
SM
3128This works only if @code{jit-lock-contextually} is used, and with the
3129same delay before rehighlighting, but like @code{font-lock-multiline},
3130it also handles the case where highlighting depends on
3131subsequent lines.
830951b0 3132@end itemize
b841df8f
SM
3133
3134@menu
3135* Font Lock Multiline:: Marking multiline chunks with a text property
3136* Region to Fontify:: Controlling which region gets refontified
3137 after a buffer change.
3138@end menu
3139
3140@node Font Lock Multiline
3141@subsubsection Font Lock Multiline
3142
03475b05 3143 One way to ensure reliable rehighlighting of multiline Font Lock
6b28caea 3144constructs is to put on them the text property @code{font-lock-multiline}.
03475b05
RS
3145It should be present and non-@code{nil} for text that is part of a
3146multiline construct.
3147
3148 When Font Lock is about to highlight a range of text, it first
3149extends the boundaries of the range as necessary so that they do not
3150fall within text marked with the @code{font-lock-multiline} property.
3151Then it removes any @code{font-lock-multiline} properties from the
3152range, and highlights it. The highlighting specification (mostly
3153@code{font-lock-keywords}) must reinstall this property each time,
3154whenever it is appropriate.
3155
3156 @strong{Warning:} don't use the @code{font-lock-multiline} property
3157on large ranges of text, because that will make rehighlighting slow.
b841df8f
SM
3158
3159@defvar font-lock-multiline
3160If the @code{font-lock-multiline} variable is set to @code{t}, Font
03475b05
RS
3161Lock will try to add the @code{font-lock-multiline} property
3162automatically on multiline constructs. This is not a universal
3163solution, however, since it slows down Font Lock somewhat. It can
3164miss some multiline constructs, or make the property larger or smaller
3165than necessary.
3166
3167For elements whose @var{matcher} is a function, the function should
3168ensure that submatch 0 covers the whole relevant multiline construct,
3169even if only a small subpart will be highlighted. It is often just as
3170easy to add the @code{font-lock-multiline} property by hand.
b841df8f
SM
3171@end defvar
3172
03475b05
RS
3173 The @code{font-lock-multiline} property is meant to ensure proper
3174refontification; it does not automatically identify new multiline
3175constructs. Identifying the requires that Font-Lock operate on large
3176enough chunks at a time. This will happen by accident on many cases,
3177which may give the impression that multiline constructs magically work.
3178If you set the @code{font-lock-multiline} variable non-@code{nil},
3179this impression will be even stronger, since the highlighting of those
3180constructs which are found will be properly updated from then on.
3181But that does not work reliably.
3182
3183 To find multiline constructs reliably, you must either manually
3184place the @code{font-lock-multiline} property on the text before
3185Font-Lock looks at it, or use
3186@code{font-lock-fontify-region-function}.
830951b0 3187
b841df8f
SM
3188@node Region to Fontify
3189@subsubsection Region to Fontify after a Buffer Change
3190
03475b05
RS
3191 When a buffer is changed, the region that Font Lock refontifies is
3192by default the smallest sequence of whole lines that spans the change.
b841df8f 3193While this works well most of the time, sometimes it doesn't---for
03475b05
RS
3194example, when a change alters the syntactic meaning of text on an
3195earlier line.
b841df8f 3196
03475b05
RS
3197 You can enlarge (or even reduce) the region to fontify by setting
3198one the following variables:
b841df8f 3199
ab0dd59c 3200@defvar font-lock-extend-after-change-region-function
03475b05
RS
3201This buffer-local variable is either @code{nil} or a function for
3202Font-Lock to call to determine the region to scan and fontify.
b841df8f
SM
3203
3204The function is given three parameters, the standard @var{beg},
03475b05
RS
3205@var{end}, and @var{old-len} from after-change-functions
3206(@pxref{Change Hooks}). It should return either a cons of the
3207beginning and end buffer positions (in that order) of the region to
3208fontify, or @code{nil} (which means choose the region in the standard
3209way). This function needs to preserve point, the match-data, and the
3210current restriction. The region it returns may start or end in the
3211middle of a line.
b841df8f
SM
3212
3213Since this function is called after every buffer change, it should be
3214reasonably fast.
3215@end defvar
3216
f730cc62
LH
3217@node Desktop Save Mode
3218@section Desktop Save Mode
3219@cindex desktop save mode
3220
3221@dfn{Desktop Save Mode} is a feature to save the state of Emacs from
3222one session to another. The user-level commands for using Desktop
3223Save Mode are described in the GNU Emacs Manual (@pxref{Saving Emacs
3224Sessions,,, emacs, the GNU Emacs Manual}). Modes whose buffers visit
3225a file, don't have to do anything to use this feature.
3226
3227For buffers not visiting a file to have their state saved, the major
3228mode must bind the buffer local variable @code{desktop-save-buffer} to
a3ee0299 3229a non-@code{nil} value.
f730cc62
LH
3230
3231@defvar desktop-save-buffer
3232If this buffer-local variable is non-@code{nil}, the buffer will have
3233its state saved in the desktop file at desktop save. If the value is
3234a function, it is called at desktop save with argument
3235@var{desktop-dirname}, and its value is saved in the desktop file along
3236with the state of the buffer for which it was called. When file names
3237are returned as part of the auxiliary information, they should be
3238formatted using the call
3239
3240@example
3241(desktop-file-name @var{file-name} @var{desktop-dirname})
3242@end example
3243
3244@end defvar
3245
3246For buffers not visiting a file to be restored, the major mode must
3247define a function to do the job, and that function must be listed in
3248the alist @code{desktop-buffer-mode-handlers}.
3249
3250@defvar desktop-buffer-mode-handlers
3251Alist with elements
3252
3253@example
3254(@var{major-mode} . @var{restore-buffer-function})
3255@end example
3256
3257The function @var{restore-buffer-function} will be called with
3258argument list
3259
3260@example
3261(@var{buffer-file-name} @var{buffer-name} @var{desktop-buffer-misc})
3262@end example
3263
3264and it should return the restored buffer.
3265Here @var{desktop-buffer-misc} is the value returned by the function
3266optionally bound to @code{desktop-save-buffer}.
f730cc62
LH
3267@end defvar
3268
ab5796a9
MB
3269@ignore
3270 arch-tag: 4c7bff41-36e6-4da6-9e7f-9b9289e27c8e
3271@end ignore