(Minibuffer Misc): Add set-minibuffer-window.
[bpt/emacs.git] / lispref / modes.texi
CommitLineData
a44af9f2
RS
1@c -*-texinfo-*-
2@c This is part of the GNU Emacs Lisp Reference Manual.
f8cecb20 3@c Copyright (C) 1990, 1991, 1992, 1993, 1994, 1995, 1998, 1999, 2003
177c0ea7 4@c 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
23* Major Modes:: Defining major modes.
24* Minor Modes:: Defining minor modes.
25* Mode Line Format:: Customizing the text that appears in the mode line.
f9f59935
RS
26* Imenu:: How a mode can provide a menu
27 of definitions in the buffer.
28* Font Lock Mode:: How modes can highlight text according to syntax.
a44af9f2
RS
29* Hooks:: How to use hooks; how to write code that provides hooks.
30@end menu
31
32@node Major Modes
33@section Major Modes
34@cindex major mode
35@cindex Fundamental mode
36
37 Major modes specialize Emacs for editing particular kinds of text.
22c94cf2
RS
38Each buffer has only one major mode at a time. For each major mode
39there is a function to switch to that mode in the current buffer; its
40name should end in @samp{-mode}. These functions work by setting
41buffer-local variable bindings and other data associated with the
42buffer, such as a local keymap. The effect lasts until you switch
43to another major mode in the same buffer.
a44af9f2
RS
44
45 The least specialized major mode is called @dfn{Fundamental mode}.
46This mode has no mode-specific definitions or variable settings, so each
47Emacs command behaves in its default manner, and each option is in its
48default state. All other major modes redefine various keys and options.
49For example, Lisp Interaction mode provides special key bindings for
969fe9b5 50@kbd{C-j} (@code{eval-print-last-sexp}), @key{TAB}
a44af9f2
RS
51(@code{lisp-indent-line}), and other keys.
52
53 When you need to write several editing commands to help you perform a
54specialized editing task, creating a new major mode is usually a good
55idea. In practice, writing a major mode is easy (in contrast to
56writing a minor mode, which is often difficult).
57
58 If the new mode is similar to an old one, it is often unwise to modify
59the old one to serve two purposes, since it may become harder to use and
60maintain. Instead, copy and rename an existing major mode definition
61and alter the copy---or define a @dfn{derived mode} (@pxref{Derived
62Modes}). For example, Rmail Edit mode, which is in
a40d4712
PR
63@file{emacs/lisp/mail/rmailedit.el}, is a major mode that is very similar to
64Text mode except that it provides two additional commands. Its
65definition is distinct from that of Text mode, but uses that of Text mode.
a44af9f2 66
5858d11f 67 Even if the new mode is not an obvious derivative of any other mode,
0b41c65c
SM
68it is convenient to use @code{define-derived-mode} with a @code{nil}
69parent argument, since it automatically enforces the most important
70coding conventions for you.
5858d11f 71
44607ed4
RS
72@findex define-generic-mode
73 For a very simple programming language major mode that handles
74comments and fontification, you can use @code{define-generic-mode}
75in @file{generic.el}.
76
969fe9b5
RS
77 Rmail Edit mode offers an example of changing the major mode
78temporarily for a buffer, so it can be edited in a different way (with
1911e6e5 79ordinary Emacs commands rather than Rmail commands). In such cases, the
8241495d 80temporary major mode usually provides a command to switch back to the
969fe9b5
RS
81buffer's usual mode (Rmail mode, in this case). You might be tempted to
82present the temporary redefinitions inside a recursive edit and restore
83the usual ones when the user exits; but this is a bad idea because it
84constrains the user's options when it is done in more than one buffer:
85recursive edits must be exited most-recently-entered first. Using an
86alternative major mode avoids this limitation. @xref{Recursive
a44af9f2
RS
87Editing}.
88
8241495d
RS
89 The standard GNU Emacs Lisp library directory tree contains the code
90for several major modes, in files such as @file{text-mode.el},
a44af9f2 91@file{texinfo.el}, @file{lisp-mode.el}, @file{c-mode.el}, and
a40d4712
PR
92@file{rmail.el}. They are found in various subdirectories of the
93@file{lisp} directory. You can study these libraries to see how modes
94are written. Text mode is perhaps the simplest major mode aside from
a44af9f2
RS
95Fundamental mode. Rmail mode is a complicated and specialized mode.
96
97@menu
98* Major Mode Conventions:: Coding conventions for keymaps, etc.
99* Example Major Modes:: Text mode and Lisp modes.
100* Auto Major Mode:: How Emacs chooses the major mode automatically.
101* Mode Help:: Finding out how to use a mode.
177c0ea7 102* Derived Modes:: Defining a new major mode based on another major
a44af9f2
RS
103 mode.
104@end menu
105
106@node Major Mode Conventions
107@subsection Major Mode Conventions
108
109 The code for existing major modes follows various coding conventions,
110including conventions for local keymap and syntax table initialization,
111global names, and hooks. Please follow these conventions when you
008c5e26
RS
112define a new major mode.
113
114 This list of conventions is only partial, because each major mode
115should aim for consistency in general with other Emacs major modes.
116This makes Emacs as a whole more coherent. It is impossible to list
117here all the possible points where this issue might come up; if the
118Emacs developers point out an area where your major mode deviates from
119the usual conventions, please make it compatible.
a44af9f2
RS
120
121@itemize @bullet
122@item
123Define a command whose name ends in @samp{-mode}, with no arguments,
124that switches to the new mode in the current buffer. This command
969fe9b5
RS
125should set up the keymap, syntax table, and buffer-local variables in an
126existing buffer, without changing the buffer's contents.
a44af9f2
RS
127
128@item
de9f0bd9 129Write a documentation string for this command that describes the
a44af9f2
RS
130special commands available in this mode. @kbd{C-h m}
131(@code{describe-mode}) in your mode will display this string.
132
133The documentation string may include the special documentation
134substrings, @samp{\[@var{command}]}, @samp{\@{@var{keymap}@}}, and
86494bd5 135@samp{\<@var{keymap}>}, which enable the documentation to adapt
a44af9f2
RS
136automatically to the user's own key bindings. @xref{Keys in
137Documentation}.
138
139@item
140The major mode command should start by calling
969fe9b5
RS
141@code{kill-all-local-variables}. This is what gets rid of the
142buffer-local variables of the major mode previously in effect.
a44af9f2
RS
143
144@item
145The major mode command should set the variable @code{major-mode} to the
146major mode command symbol. This is how @code{describe-mode} discovers
147which documentation to print.
148
149@item
150The major mode command should set the variable @code{mode-name} to the
969fe9b5
RS
151``pretty'' name of the mode, as a string. This string appears in the
152mode line.
a44af9f2
RS
153
154@item
155@cindex functions in modes
156Since all global names are in the same name space, all the global
157variables, constants, and functions that are part of the mode should
158have names that start with the major mode name (or with an abbreviation
a4b12c74 159of it if the name is long). @xref{Coding Conventions}.
a44af9f2 160
008c5e26
RS
161@item
162In a major mode for editing some kind of structured text, such as a
163programming language, indentation of text according to structure is
164probably useful. So the mode should set @code{indent-line-function}
165to a suitable function, and probably customize other variables
166for indentation.
167
a44af9f2
RS
168@item
169@cindex keymaps in modes
170The major mode should usually have its own keymap, which is used as the
969fe9b5
RS
171local keymap in all buffers in that mode. The major mode command should
172call @code{use-local-map} to install this local map. @xref{Active
173Keymaps}, for more information.
a44af9f2 174
969fe9b5 175This keymap should be stored permanently in a global variable named
a44af9f2 176@code{@var{modename}-mode-map}. Normally the library that defines the
de9f0bd9 177mode sets this variable.
a44af9f2 178
23ce41fc
RS
179@xref{Tips for Defining}, for advice about how to write the code to set
180up the mode's keymap variable.
181
a4b12c74
RS
182@item
183The key sequences bound in a major mode keymap should usually start with
969fe9b5 184@kbd{C-c}, followed by a control character, a digit, or @kbd{@{},
a4b12c74
RS
185@kbd{@}}, @kbd{<}, @kbd{>}, @kbd{:} or @kbd{;}. The other punctuation
186characters are reserved for minor modes, and ordinary letters are
187reserved for users.
188
189It is reasonable for a major mode to rebind a key sequence with a
190standard meaning, if it implements a command that does ``the same job''
191in a way that fits the major mode better. For example, a major mode for
192editing a programming language might redefine @kbd{C-M-a} to ``move to
193the beginning of a function'' in a way that works better for that
194language.
195
196Major modes such as Dired or Rmail that do not allow self-insertion of
197text can reasonably redefine letters and other printing characters as
198editing commands. Dired and Rmail both do this.
199
c2e903c0
RS
200@item
201Major modes must not define @key{RET} to do anything other than insert
202a newline. The command to insert a newline and then indent is
008c5e26
RS
203@kbd{C-j}. Please keep this distinction uniform for all major modes.
204
205@item
206Major modes should not alter options that are primary a matter of user
207preference, such as whether Auto-Fill mode is enabled. Leave this to
208each user to decide. However, a major mode should customize other
209variables so that Auto-Fill mode will work usefully @emph{if} the user
210decides to use it.
c2e903c0 211
a44af9f2
RS
212@item
213@cindex syntax tables in modes
214The mode may have its own syntax table or may share one with other
215related modes. If it has its own syntax table, it should store this in
de9f0bd9 216a variable named @code{@var{modename}-mode-syntax-table}. @xref{Syntax
a44af9f2
RS
217Tables}.
218
be9345cf
RS
219@item
220If the mode handles a language that has a syntax for comments, it should
221set the variables that define the comment syntax. @xref{Options for
222Comments,, Options Controlling Comments, emacs, The GNU Emacs Manual}.
223
a44af9f2
RS
224@item
225@cindex abbrev tables in modes
226The mode may have its own abbrev table or may share one with other
227related modes. If it has its own abbrev table, it should store this in
228a variable named @code{@var{modename}-mode-abbrev-table}. @xref{Abbrev
229Tables}.
230
be9345cf 231@item
be9345cf
RS
232The mode should specify how to do highlighting for Font Lock mode, by
233setting up a buffer-local value for the variable
969fe9b5 234@code{font-lock-defaults} (@pxref{Font Lock Mode}).
be9345cf
RS
235
236@item
be9345cf
RS
237The mode should specify how Imenu should find the definitions or
238sections of a buffer, by setting up a buffer-local value for the
10ee4e90
LK
239variable @code{imenu-generic-expression}, for the pair of variables
240@code{imenu-prev-index-position-function} and
241@code{imenu-extract-index-name-function}, or for the variable
969fe9b5 242@code{imenu-create-index-function} (@pxref{Imenu}).
be9345cf 243
de9f0bd9 244@item
969fe9b5
RS
245Use @code{defvar} or @code{defcustom} to set mode-related variables, so
246that they are not reinitialized if they already have a value. (Such
247reinitialization could discard customizations made by the user.)
de9f0bd9 248
a44af9f2
RS
249@item
250@cindex buffer-local variables in modes
251To make a buffer-local binding for an Emacs customization variable, use
252@code{make-local-variable} in the major mode command, not
253@code{make-variable-buffer-local}. The latter function would make the
254variable local to every buffer in which it is subsequently set, which
255would affect buffers that do not use this mode. It is undesirable for a
256mode to have such global effects. @xref{Buffer-Local Variables}.
257
177c0ea7 258With rare exceptions, the only reasonable way to use
a40d4712
PR
259@code{make-variable-buffer-local} in a Lisp package is for a variable
260which is used only within that package. Using it on a variable used by
261other packages would interfere with them.
a44af9f2
RS
262
263@item
264@cindex mode hook
265@cindex major mode hook
266Each major mode should have a @dfn{mode hook} named
267@code{@var{modename}-mode-hook}. The major mode command should run that
fdba9ef4 268hook, with @code{run-mode-hooks}, as the very last thing it
a4b12c74 269does. @xref{Hooks}.
a44af9f2
RS
270
271@item
fdba9ef4
RS
272The major mode command may start by calling some other major mode
273command (called the @dfn{parent mode}) and then alter some of its
274settings. A mode that does this is called a @dfn{derived mode}. The
275recommended way to define one is to use @code{define-derived-mode},
276but this is not required. Such a mode should use
277@code{delay-mode-hooks} around its entire body, including the call to
278the parent mode command and the final call to @code{run-mode-hooks}.
06862374 279(Using @code{define-derived-mode} does this automatically.)
a44af9f2
RS
280
281@item
282If something special should be done if the user switches a buffer from
f9f59935 283this mode to any other major mode, this mode can set up a buffer-local
969fe9b5 284value for @code{change-major-mode-hook} (@pxref{Creating Buffer-Local}).
a44af9f2
RS
285
286@item
287If this mode is appropriate only for specially-prepared text, then the
288major mode command symbol should have a property named @code{mode-class}
289with value @code{special}, put on as follows:
290
ace41f7d 291@kindex mode-class @r{(property)}
a44af9f2
RS
292@cindex @code{special}
293@example
294(put 'funny-mode 'mode-class 'special)
295@end example
296
297@noindent
8241495d 298This tells Emacs that new buffers created while the current buffer is in
a44af9f2
RS
299Funny mode should not inherit Funny mode. Modes such as Dired, Rmail,
300and Buffer List use this feature.
301
302@item
303If you want to make the new mode the default for files with certain
304recognizable names, add an element to @code{auto-mode-alist} to select
305the mode for those file names. If you define the mode command to
306autoload, you should add this element in the same file that calls
307@code{autoload}. Otherwise, it is sufficient to add the element in the
308file that contains the mode definition. @xref{Auto Major Mode}.
309
310@item
a44af9f2
RS
311In the documentation, you should provide a sample @code{autoload} form
312and an example of how to add to @code{auto-mode-alist}, that users can
a40d4712 313include in their init files (@pxref{Init File}).
a44af9f2
RS
314
315@item
316@cindex mode loading
de9f0bd9 317The top-level forms in the file defining the mode should be written so
a44af9f2
RS
318that they may be evaluated more than once without adverse consequences.
319Even if you never load the file more than once, someone else will.
320@end itemize
321
a44af9f2
RS
322@node Example Major Modes
323@subsection Major Mode Examples
324
325 Text mode is perhaps the simplest mode besides Fundamental mode.
326Here are excerpts from @file{text-mode.el} that illustrate many of
327the conventions listed above:
328
329@smallexample
330@group
331;; @r{Create mode-specific tables.}
177c0ea7 332(defvar text-mode-syntax-table nil
a44af9f2
RS
333 "Syntax table used while in text mode.")
334@end group
335
336@group
337(if text-mode-syntax-table
338 () ; @r{Do not change the table if it is already set up.}
339 (setq text-mode-syntax-table (make-syntax-table))
340 (modify-syntax-entry ?\" ". " text-mode-syntax-table)
341 (modify-syntax-entry ?\\ ". " text-mode-syntax-table)
342 (modify-syntax-entry ?' "w " text-mode-syntax-table))
343@end group
344
345@group
346(defvar text-mode-abbrev-table nil
347 "Abbrev table used while in text mode.")
348(define-abbrev-table 'text-mode-abbrev-table ())
349@end group
350
351@group
a40d4712
PR
352(defvar text-mode-map nil ; @r{Create a mode-specific keymap.}
353 "Keymap for Text mode.
354Many other modes, such as Mail mode, Outline mode and Indented Text mode,
355inherit all the commands defined in this map.")
a44af9f2
RS
356
357(if text-mode-map
358 () ; @r{Do not change the keymap if it is already set up.}
359 (setq text-mode-map (make-sparse-keymap))
a40d4712 360 (define-key text-mode-map "\e\t" 'ispell-complete-word)
a9f0a989 361 (define-key text-mode-map "\t" 'indent-relative)
a44af9f2
RS
362 (define-key text-mode-map "\es" 'center-line)
363 (define-key text-mode-map "\eS" 'center-paragraph))
364@end group
365@end smallexample
366
fdba9ef4 367 This was formerly the complete major mode function definition for Text mode:
a44af9f2
RS
368
369@smallexample
370@group
371(defun text-mode ()
29b677db 372 "Major mode for editing text intended for humans to read...
a44af9f2
RS
373 Special commands: \\@{text-mode-map@}
374@end group
375@group
376Turning on text-mode runs the hook `text-mode-hook'."
377 (interactive)
378 (kill-all-local-variables)
969fe9b5 379 (use-local-map text-mode-map)
a44af9f2
RS
380@end group
381@group
a44af9f2
RS
382 (setq local-abbrev-table text-mode-abbrev-table)
383 (set-syntax-table text-mode-syntax-table)
969fe9b5
RS
384@end group
385@group
386 (make-local-variable 'paragraph-start)
387 (setq paragraph-start (concat "[ \t]*$\\|" page-delimiter))
388 (make-local-variable 'paragraph-separate)
389 (setq paragraph-separate paragraph-start)
a40d4712
PR
390 (make-local-variable 'indent-line-function)
391 (setq indent-line-function 'indent-relative-maybe)
969fe9b5
RS
392@end group
393@group
394 (setq mode-name "Text")
395 (setq major-mode 'text-mode)
fdba9ef4 396 (run-mode-hooks 'text-mode-hook)) ; @r{Finally, this permits the user to}
a44af9f2
RS
397 ; @r{customize the mode with a hook.}
398@end group
399@end smallexample
400
401@cindex @file{lisp-mode.el}
402 The three Lisp modes (Lisp mode, Emacs Lisp mode, and Lisp
403Interaction mode) have more features than Text mode and the code is
404correspondingly more complicated. Here are excerpts from
405@file{lisp-mode.el} that illustrate how these modes are written.
406
407@cindex syntax table example
408@smallexample
409@group
410;; @r{Create mode-specific table variables.}
177c0ea7 411(defvar lisp-mode-syntax-table nil "")
a44af9f2
RS
412(defvar emacs-lisp-mode-syntax-table nil "")
413(defvar lisp-mode-abbrev-table nil "")
414@end group
415
416@group
417(if (not emacs-lisp-mode-syntax-table) ; @r{Do not change the table}
418 ; @r{if it is already set.}
419 (let ((i 0))
420 (setq emacs-lisp-mode-syntax-table (make-syntax-table))
421@end group
422
423@group
424 ;; @r{Set syntax of chars up to 0 to class of chars that are}
425 ;; @r{part of symbol names but not words.}
ad800164 426 ;; @r{(The number 0 is @code{48} in the @acronym{ASCII} character set.)}
177c0ea7 427 (while (< i ?0)
a44af9f2
RS
428 (modify-syntax-entry i "_ " emacs-lisp-mode-syntax-table)
429 (setq i (1+ i)))
430 @dots{}
431@end group
432@group
433 ;; @r{Set the syntax for other characters.}
434 (modify-syntax-entry ? " " emacs-lisp-mode-syntax-table)
435 (modify-syntax-entry ?\t " " emacs-lisp-mode-syntax-table)
436 @dots{}
437@end group
438@group
439 (modify-syntax-entry ?\( "() " emacs-lisp-mode-syntax-table)
440 (modify-syntax-entry ?\) ")( " emacs-lisp-mode-syntax-table)
441 @dots{}))
442;; @r{Create an abbrev table for lisp-mode.}
443(define-abbrev-table 'lisp-mode-abbrev-table ())
444@end group
445@end smallexample
446
447 Much code is shared among the three Lisp modes. The following
448function sets various variables; it is called by each of the major Lisp
449mode functions:
450
451@smallexample
452@group
453(defun lisp-mode-variables (lisp-syntax)
a44af9f2 454 (cond (lisp-syntax
969fe9b5 455 (set-syntax-table lisp-mode-syntax-table)))
a44af9f2 456 (setq local-abbrev-table lisp-mode-abbrev-table)
a9f0a989 457 @dots{}
a44af9f2
RS
458@end group
459@end smallexample
460
461 Functions such as @code{forward-paragraph} use the value of the
462@code{paragraph-start} variable. Since Lisp code is different from
463ordinary text, the @code{paragraph-start} variable needs to be set
464specially to handle Lisp. Also, comments are indented in a special
465fashion in Lisp and the Lisp modes need their own mode-specific
466@code{comment-indent-function}. The code to set these variables is the
467rest of @code{lisp-mode-variables}.
468
469@smallexample
470@group
471 (make-local-variable 'paragraph-start)
969fe9b5
RS
472 (setq paragraph-start (concat page-delimiter "\\|$" ))
473 (make-local-variable 'paragraph-separate)
474 (setq paragraph-separate paragraph-start)
a44af9f2
RS
475 @dots{}
476@end group
477@group
478 (make-local-variable 'comment-indent-function)
479 (setq comment-indent-function 'lisp-comment-indent))
a40d4712 480 @dots{}
a44af9f2
RS
481@end group
482@end smallexample
483
484 Each of the different Lisp modes has a slightly different keymap. For
f9f59935 485example, Lisp mode binds @kbd{C-c C-z} to @code{run-lisp}, but the other
a44af9f2 486Lisp modes do not. However, all Lisp modes have some commands in
969fe9b5 487common. The following code sets up the common commands:
a44af9f2
RS
488
489@smallexample
490@group
969fe9b5
RS
491(defvar shared-lisp-mode-map ()
492 "Keymap for commands shared by all sorts of Lisp modes.")
493
494(if shared-lisp-mode-map
495 ()
496 (setq shared-lisp-mode-map (make-sparse-keymap))
497 (define-key shared-lisp-mode-map "\e\C-q" 'indent-sexp)
498 (define-key shared-lisp-mode-map "\177"
499 'backward-delete-char-untabify))
a44af9f2
RS
500@end group
501@end smallexample
502
969fe9b5
RS
503@noindent
504And here is the code to set up the keymap for Lisp mode:
a44af9f2
RS
505
506@smallexample
507@group
969fe9b5 508(defvar lisp-mode-map ()
29b677db 509 "Keymap for ordinary Lisp mode...")
969fe9b5
RS
510
511(if lisp-mode-map
a44af9f2 512 ()
969fe9b5
RS
513 (setq lisp-mode-map (make-sparse-keymap))
514 (set-keymap-parent lisp-mode-map shared-lisp-mode-map)
515 (define-key lisp-mode-map "\e\C-x" 'lisp-eval-defun)
516 (define-key lisp-mode-map "\C-c\C-z" 'run-lisp))
a44af9f2
RS
517@end group
518@end smallexample
519
520 Finally, here is the complete major mode function definition for
177c0ea7 521Lisp mode.
a44af9f2
RS
522
523@smallexample
524@group
969fe9b5
RS
525(defun lisp-mode ()
526 "Major mode for editing Lisp code for Lisps other than GNU Emacs Lisp.
a44af9f2
RS
527Commands:
528Delete converts tabs to spaces as it moves back.
529Blank lines separate paragraphs. Semicolons start comments.
969fe9b5
RS
530\\@{lisp-mode-map@}
531Note that `run-lisp' may be used either to start an inferior Lisp job
532or to switch back to an existing one.
a44af9f2 533@end group
969fe9b5 534
a44af9f2 535@group
969fe9b5
RS
536Entry to this mode calls the value of `lisp-mode-hook'
537if that value is non-nil."
a44af9f2
RS
538 (interactive)
539 (kill-all-local-variables)
a44af9f2
RS
540@end group
541@group
969fe9b5
RS
542 (use-local-map lisp-mode-map) ; @r{Select the mode's keymap.}
543 (setq major-mode 'lisp-mode) ; @r{This is how @code{describe-mode}}
a44af9f2 544 ; @r{finds out what to describe.}
969fe9b5
RS
545 (setq mode-name "Lisp") ; @r{This goes into the mode line.}
546 (lisp-mode-variables t) ; @r{This defines various variables.}
547@end group
548@group
549 (setq imenu-case-fold-search t)
550 (set-syntax-table lisp-mode-syntax-table)
fdba9ef4 551 (run-mode-hooks 'lisp-mode-hook)) ; @r{This permits the user to use a}
a44af9f2
RS
552 ; @r{hook to customize the mode.}
553@end group
554@end smallexample
555
556@node Auto Major Mode
557@subsection How Emacs Chooses a Major Mode
558
559 Based on information in the file name or in the file itself, Emacs
560automatically selects a major mode for the new buffer when a file is
969fe9b5 561visited. It also processes local variables specified in the file text.
a44af9f2
RS
562
563@deffn Command fundamental-mode
564 Fundamental mode is a major mode that is not specialized for anything
565in particular. Other major modes are defined in effect by comparison
566with this one---their definitions say what to change, starting from
567Fundamental mode. The @code{fundamental-mode} function does @emph{not}
568run any hooks; you're not supposed to customize it. (If you want Emacs
569to behave differently in Fundamental mode, change the @emph{global}
570state of Emacs.)
571@end deffn
572
573@deffn Command normal-mode &optional find-file
969fe9b5 574This function establishes the proper major mode and buffer-local variable
a44af9f2
RS
575bindings for the current buffer. First it calls @code{set-auto-mode},
576then it runs @code{hack-local-variables} to parse, and bind or
969fe9b5 577evaluate as appropriate, the file's local variables.
a44af9f2 578
969fe9b5
RS
579If the @var{find-file} argument to @code{normal-mode} is non-@code{nil},
580@code{normal-mode} assumes that the @code{find-file} function is calling
581it. In this case, it may process a local variables list at the end of
582the file and in the @samp{-*-} line. The variable
583@code{enable-local-variables} controls whether to do so. @xref{File
584variables, , Local Variables in Files, emacs, The GNU Emacs Manual}, for
585the syntax of the local variables section of a file.
a44af9f2 586
bfe721d1 587If you run @code{normal-mode} interactively, the argument
a44af9f2
RS
588@var{find-file} is normally @code{nil}. In this case,
589@code{normal-mode} unconditionally processes any local variables list.
a44af9f2
RS
590
591@cindex file mode specification error
bfe721d1 592@code{normal-mode} uses @code{condition-case} around the call to the
a44af9f2
RS
593major mode function, so errors are caught and reported as a @samp{File
594mode specification error}, followed by the original error message.
595@end deffn
596
a44af9f2
RS
597@defun set-auto-mode
598@cindex visited file mode
599 This function selects the major mode that is appropriate for the
600current buffer. It may base its decision on the value of the @w{@samp{-*-}}
76352dc1
RS
601line, on the visited file name (using @code{auto-mode-alist}), on the
602@w{@samp{#!}} line (using @code{interpreter-mode-alist}), or on the
969fe9b5 603file's local variables list. However, this function does not look for
a44af9f2
RS
604the @samp{mode:} local variable near the end of a file; the
605@code{hack-local-variables} function does that. @xref{Choosing Modes, ,
606How Major Modes are Chosen, emacs, The GNU Emacs Manual}.
607@end defun
608
177c0ea7 609@defopt default-major-mode
969fe9b5 610This variable holds the default major mode for new buffers. The
a44af9f2
RS
611standard value is @code{fundamental-mode}.
612
969fe9b5 613If the value of @code{default-major-mode} is @code{nil}, Emacs uses
a44af9f2 614the (previously) current buffer's major mode for the major mode of a new
f9f59935 615buffer. However, if that major mode symbol has a @code{mode-class}
a44af9f2
RS
616property with value @code{special}, then it is not used for new buffers;
617Fundamental mode is used instead. The modes that have this property are
618those such as Dired and Rmail that are useful only with text that has
619been specially prepared.
620@end defopt
621
22697dac
KH
622@defun set-buffer-major-mode buffer
623This function sets the major mode of @var{buffer} to the value of
624@code{default-major-mode}. If that variable is @code{nil}, it uses
625the current buffer's major mode (if that is suitable).
626
627The low-level primitives for creating buffers do not use this function,
bfe721d1
KH
628but medium-level commands such as @code{switch-to-buffer} and
629@code{find-file-noselect} use it whenever they create buffers.
22697dac
KH
630@end defun
631
a44af9f2
RS
632@defvar initial-major-mode
633@cindex @samp{*scratch*}
634The value of this variable determines the major mode of the initial
635@samp{*scratch*} buffer. The value should be a symbol that is a major
f9f59935 636mode command. The default value is @code{lisp-interaction-mode}.
a44af9f2
RS
637@end defvar
638
639@defvar auto-mode-alist
640This variable contains an association list of file name patterns
641(regular expressions; @pxref{Regular Expressions}) and corresponding
f9f59935
RS
642major mode commands. Usually, the file name patterns test for suffixes,
643such as @samp{.el} and @samp{.c}, but this need not be the case. An
644ordinary element of the alist looks like @code{(@var{regexp} .
a44af9f2
RS
645@var{mode-function})}.
646
647For example,
648
649@smallexample
650@group
969fe9b5 651(("\\`/tmp/fol/" . text-mode)
24675e99
RS
652 ("\\.texinfo\\'" . texinfo-mode)
653 ("\\.texi\\'" . texinfo-mode)
a44af9f2
RS
654@end group
655@group
24675e99 656 ("\\.el\\'" . emacs-lisp-mode)
177c0ea7 657 ("\\.c\\'" . c-mode)
24675e99 658 ("\\.h\\'" . c-mode)
a44af9f2
RS
659 @dots{})
660@end group
661@end smallexample
662
663When you visit a file whose expanded file name (@pxref{File Name
664Expansion}) matches a @var{regexp}, @code{set-auto-mode} calls the
665corresponding @var{mode-function}. This feature enables Emacs to select
666the proper major mode for most files.
667
668If an element of @code{auto-mode-alist} has the form @code{(@var{regexp}
669@var{function} t)}, then after calling @var{function}, Emacs searches
670@code{auto-mode-alist} again for a match against the portion of the file
969fe9b5
RS
671name that did not match before. This feature is useful for
672uncompression packages: an entry of the form @code{("\\.gz\\'"
673@var{function} t)} can uncompress the file and then put the uncompressed
674file in the proper mode according to the name sans @samp{.gz}.
a44af9f2
RS
675
676Here is an example of how to prepend several pattern pairs to
677@code{auto-mode-alist}. (You might use this sort of expression in your
a40d4712 678init file.)
a44af9f2
RS
679
680@smallexample
681@group
682(setq auto-mode-alist
177c0ea7 683 (append
f9f59935 684 ;; @r{File name (within directory) starts with a dot.}
177c0ea7 685 '(("/\\.[^/]*\\'" . fundamental-mode)
de9f0bd9 686 ;; @r{File name has no dot.}
177c0ea7 687 ("[^\\./]*\\'" . fundamental-mode)
de9f0bd9 688 ;; @r{File name ends in @samp{.C}.}
24675e99 689 ("\\.C\\'" . c++-mode))
a44af9f2
RS
690 auto-mode-alist))
691@end group
692@end smallexample
693@end defvar
694
695@defvar interpreter-mode-alist
f9f59935 696This variable specifies major modes to use for scripts that specify a
86494bd5 697command interpreter in a @samp{#!} line. Its value is a list of
a44af9f2
RS
698elements of the form @code{(@var{interpreter} . @var{mode})}; for
699example, @code{("perl" . perl-mode)} is one element present by default.
700The element says to use mode @var{mode} if the file specifies
f9f59935
RS
701an interpreter which matches @var{interpreter}. The value of
702@var{interpreter} is actually a regular expression.
a44af9f2 703
de9f0bd9
RS
704This variable is applicable only when the @code{auto-mode-alist} does
705not indicate which major mode to use.
a44af9f2
RS
706@end defvar
707
a44af9f2
RS
708@node Mode Help
709@subsection Getting Help about a Major Mode
710@cindex mode help
711@cindex help for major mode
712@cindex documentation for major mode
713
714 The @code{describe-mode} function is used to provide information
715about major modes. It is normally called with @kbd{C-h m}. The
716@code{describe-mode} function uses the value of @code{major-mode},
717which is why every major mode function needs to set the
718@code{major-mode} variable.
719
720@deffn Command describe-mode
721This function displays the documentation of the current major mode.
722
723The @code{describe-mode} function calls the @code{documentation}
724function using the value of @code{major-mode} as an argument. Thus, it
725displays the documentation string of the major mode function.
726(@xref{Accessing Documentation}.)
727@end deffn
728
729@defvar major-mode
730This variable holds the symbol for the current buffer's major mode.
de9f0bd9 731This symbol should have a function definition that is the command to
a44af9f2 732switch to that major mode. The @code{describe-mode} function uses the
de9f0bd9 733documentation string of the function as the documentation of the major
a44af9f2
RS
734mode.
735@end defvar
736
737@node Derived Modes
738@subsection Defining Derived Modes
739
740 It's often useful to define a new major mode in terms of an existing
741one. An easy way to do this is to use @code{define-derived-mode}.
742
de9f0bd9 743@defmac define-derived-mode variant parent name docstring body@dots{}
a44af9f2 744This construct defines @var{variant} as a major mode command, using
de9f0bd9 745@var{name} as the string form of the mode name.
a44af9f2 746
de9f0bd9
RS
747The new command @var{variant} is defined to call the function
748@var{parent}, then override certain aspects of that parent mode:
a44af9f2 749
177c0ea7 750@itemize @bullet
a44af9f2
RS
751@item
752The new mode has its own keymap, named @code{@var{variant}-map}.
753@code{define-derived-mode} initializes this map to inherit from
754@code{@var{parent}-map}, if it is not already set.
755
756@item
de9f0bd9 757The new mode has its own syntax table, kept in the variable
a44af9f2 758@code{@var{variant}-syntax-table}.
177c0ea7 759@code{define-derived-mode} initializes this variable by copying
a44af9f2
RS
760@code{@var{parent}-syntax-table}, if it is not already set.
761
762@item
de9f0bd9 763The new mode has its own abbrev table, kept in the variable
a44af9f2 764@code{@var{variant}-abbrev-table}.
177c0ea7 765@code{define-derived-mode} initializes this variable by copying
a44af9f2
RS
766@code{@var{parent}-abbrev-table}, if it is not already set.
767
768@item
769The new mode has its own mode hook, @code{@var{variant}-hook},
770which it runs in standard fashion as the very last thing that it does.
177c0ea7 771(The new mode also runs the mode hook of @var{parent} as part
a44af9f2
RS
772of calling @var{parent}.)
773@end itemize
774
775In addition, you can specify how to override other aspects of
de9f0bd9 776@var{parent} with @var{body}. The command @var{variant}
177c0ea7 777evaluates the forms in @var{body} after setting up all its usual
a44af9f2
RS
778overrides, just before running @code{@var{variant}-hook}.
779
780The argument @var{docstring} specifies the documentation string for the
781new mode. If you omit @var{docstring}, @code{define-derived-mode}
782generates a documentation string.
783
784Here is a hypothetical example:
785
786@example
787(define-derived-mode hypertext-mode
788 text-mode "Hypertext"
789 "Major mode for hypertext.
790\\@{hypertext-mode-map@}"
791 (setq case-fold-search nil))
792
793(define-key hypertext-mode-map
794 [down-mouse-3] 'do-hyper-link)
795@end example
f140458b
RS
796
797Do not write an @code{interactive} spec in the definition;
798@code{define-derived-mode} does that automatically.
a44af9f2
RS
799@end defmac
800
801@node Minor Modes
802@section Minor Modes
803@cindex minor mode
804
805 A @dfn{minor mode} provides features that users may enable or disable
806independently of the choice of major mode. Minor modes can be enabled
807individually or in combination. Minor modes would be better named
969fe9b5
RS
808``generally available, optional feature modes,'' except that such a name
809would be unwieldy.
a44af9f2 810
8241495d
RS
811 A minor mode is not usually meant as a variation of a single major mode.
812Usually they are general and can apply to many major modes. For
969fe9b5 813example, Auto Fill mode works with any major mode that permits text
a44af9f2
RS
814insertion. To be general, a minor mode must be effectively independent
815of the things major modes do.
816
817 A minor mode is often much more difficult to implement than a major
818mode. One reason is that you should be able to activate and deactivate
de9f0bd9
RS
819minor modes in any order. A minor mode should be able to have its
820desired effect regardless of the major mode and regardless of the other
821minor modes in effect.
a44af9f2
RS
822
823 Often the biggest problem in implementing a minor mode is finding a
824way to insert the necessary hook into the rest of Emacs. Minor mode
bfe721d1 825keymaps make this easier than it used to be.
a44af9f2 826
fdba9ef4
RS
827@defvar minor-mode-list
828The value of this variable is a list of all minor mode commands.
829@end defvar
830
a44af9f2
RS
831@menu
832* Minor Mode Conventions:: Tips for writing a minor mode.
833* Keymaps and Minor Modes:: How a minor mode can have its own keymap.
2468d0c0 834* Defining Minor Modes:: A convenient facility for defining minor modes.
a44af9f2
RS
835@end menu
836
837@node Minor Mode Conventions
838@subsection Conventions for Writing Minor Modes
839@cindex minor mode conventions
840@cindex conventions for writing minor modes
841
842 There are conventions for writing minor modes just as there are for
843major modes. Several of the major mode conventions apply to minor
844modes as well: those regarding the name of the mode initialization
845function, the names of global symbols, and the use of keymaps and
846other tables.
847
848 In addition, there are several conventions that are specific to
849minor modes.
850
851@itemize @bullet
852@item
853@cindex mode variable
969fe9b5
RS
854Make a variable whose name ends in @samp{-mode} to control the minor
855mode. We call this the @dfn{mode variable}. The minor mode command
856should set this variable (@code{nil} to disable; anything else to
1911e6e5 857enable).
969fe9b5 858
8241495d 859If possible, implement the mode so that setting the variable
969fe9b5 860automatically enables or disables the mode. Then the minor mode command
1911e6e5 861does not need to do anything except set the variable.
a44af9f2
RS
862
863This variable is used in conjunction with the @code{minor-mode-alist} to
864display the minor mode name in the mode line. It can also enable
865or disable a minor mode keymap. Individual commands or hooks can also
866check the variable's value.
867
868If you want the minor mode to be enabled separately in each buffer,
869make the variable buffer-local.
870
871@item
872Define a command whose name is the same as the mode variable.
873Its job is to enable and disable the mode by setting the variable.
874
875The command should accept one optional argument. If the argument is
8cd4f018
RS
876@code{nil}, it should toggle the mode (turn it on if it is off, and
877off if it is on). It should turn the mode on if the argument is a
878positive integer, the symbol @code{t}, or a list whose @sc{car} is one
879of those. It should turn the mode off if the argument is a negative
880integer or zero, the symbol @code{-}, or a list whose @sc{car} is one
881of those. The meaning of other arguments is not specified.
a44af9f2 882
bfe721d1
KH
883Here is an example taken from the definition of @code{transient-mark-mode}.
884It shows the use of @code{transient-mark-mode} as a variable that enables or
de9f0bd9
RS
885disables the mode's behavior, and also shows the proper way to toggle,
886enable or disable the minor mode based on the raw prefix argument value.
a44af9f2
RS
887
888@smallexample
889@group
bfe721d1
KH
890(setq transient-mark-mode
891 (if (null arg) (not transient-mark-mode)
a44af9f2
RS
892 (> (prefix-numeric-value arg) 0)))
893@end group
894@end smallexample
895
896@item
897Add an element to @code{minor-mode-alist} for each minor mode
969fe9b5
RS
898(@pxref{Mode Line Variables}), if you want to indicate the minor mode in
899the mode line. This element should be a list of the following form:
a44af9f2
RS
900
901@smallexample
902(@var{mode-variable} @var{string})
903@end smallexample
904
de9f0bd9 905Here @var{mode-variable} is the variable that controls enabling of the
a44af9f2
RS
906minor mode, and @var{string} is a short string, starting with a space,
907to represent the mode in the mode line. These strings must be short so
908that there is room for several of them at once.
909
910When you add an element to @code{minor-mode-alist}, use @code{assq} to
911check for an existing element, to avoid duplication. For example:
912
913@smallexample
914@group
a40d4712
PR
915(unless (assq 'leif-mode minor-mode-alist)
916 (setq minor-mode-alist
917 (cons '(leif-mode " Leif") minor-mode-alist)))
a44af9f2
RS
918@end group
919@end smallexample
a44af9f2 920
a40d4712
PR
921@noindent
922or like this, using @code{add-to-list} (@pxref{Setting Variables}):
923
924@smallexample
925@group
926(add-to-list 'minor-mode-alist '(leif-mode " Leif"))
927@end group
928@end smallexample
929@end itemize
1911e6e5 930
8241495d
RS
931 Global minor modes distributed with Emacs should if possible support
932enabling and disabling via Custom (@pxref{Customization}). To do this,
933the first step is to define the mode variable with @code{defcustom}, and
934specify @code{:type boolean}.
935
936 If just setting the variable is not sufficient to enable the mode, you
937should also specify a @code{:set} method which enables the mode by
938invoke the mode command. Note in the variable's documentation string that
939setting the variable other than via Custom may not take effect.
940
941 Also mark the definition with an autoload cookie (@pxref{Autoload}),
942and specify a @code{:require} so that customizing the variable will load
943the library that defines the mode. This will copy suitable definitions
944into @file{loaddefs.el} so that users can use @code{customize-option} to
945enable the mode. For example:
946
947@smallexample
948@group
949
950;;;###autoload
951(defcustom msb-mode nil
952 "Toggle msb-mode.
953Setting this variable directly does not take effect;
954use either \\[customize] or the function `msb-mode'."
955 :set (lambda (symbol value)
956 (msb-mode (or value 0)))
957 :initialize 'custom-initialize-default
958 :version "20.4"
959 :type 'boolean
960 :group 'msb
961 :require 'msb)
962@end group
963@end smallexample
964
a44af9f2
RS
965@node Keymaps and Minor Modes
966@subsection Keymaps and Minor Modes
967
bfe721d1
KH
968 Each minor mode can have its own keymap, which is active when the mode
969is enabled. To set up a keymap for a minor mode, add an element to the
970alist @code{minor-mode-map-alist}. @xref{Active Keymaps}.
a44af9f2
RS
971
972@cindex @code{self-insert-command}, minor modes
f9f59935 973 One use of minor mode keymaps is to modify the behavior of certain
a44af9f2
RS
974self-inserting characters so that they do something else as well as
975self-insert. In general, this is the only way to do that, since the
976facilities for customizing @code{self-insert-command} are limited to
977special cases (designed for abbrevs and Auto Fill mode). (Do not try
978substituting your own definition of @code{self-insert-command} for the
979standard one. The editor command loop handles this function specially.)
980
a4b12c74
RS
981The key sequences bound in a minor mode should consist of @kbd{C-c}
982followed by a punctuation character @emph{other than} @kbd{@{},
8241495d 983@kbd{@}}, @kbd{<}, @kbd{>}, @kbd{:}, and @kbd{;}. (Those few punctuation
a4b12c74
RS
984characters are reserved for major modes.)
985
2468d0c0
DL
986@node Defining Minor Modes
987@subsection Defining Minor Modes
f9f59935 988
2468d0c0
DL
989 The macro @code{define-minor-mode} offers a convenient way of
990implementing a mode in one self-contained definition. It supports only
8241495d 991buffer-local minor modes, not global ones.
f9f59935 992
fdba9ef4 993@defmac define-minor-mode mode doc [init-value [lighter [keymap keyword-args... body...]]]
2468d0c0 994@tindex define-minor-mode
fdba9ef4
RS
995This macro defines a new minor mode whose name is @var{mode} (a
996symbol). It defines a command named @var{mode} to toggle the minor
2468d0c0
DL
997mode, with @var{doc} as its documentation string. It also defines a
998variable named @var{mode}, which is set to @code{t} or @code{nil} by
999enabling or disabling the mode. The variable is initialized to
1000@var{init-value}.
f9f59935 1001
fdba9ef4 1002The string @var{lighter} says what to display in the mode line
f9f59935
RS
1003when the mode is enabled; if it is @code{nil}, the mode is not displayed
1004in the mode line.
1005
1006The optional argument @var{keymap} specifies the keymap for the minor mode.
1007It can be a variable name, whose value is the keymap, or it can be an alist
1008specifying bindings in this form:
1009
1010@example
1011(@var{key-sequence} . @var{definition})
1012@end example
fdba9ef4
RS
1013
1014The @var{keyword-args} consist of keywords followed by corresponding
1015values. A few keywords have special meanings:
1016
1017@table @code
1018@item :global @var{global}
1019If non-@code{nil} specifies that the minor mode should be global.
1020By default, minor modes are buffer-local.
1021
1022@item :init-value @var{init-value}
1023This is equivalent to specifying @var{init-value} positionally.
1024
1025@item :lighter @var{lighter}
1026This is equivalent to specifying @var{lighter} positionally.
1027
1028@item :keymap @var{keymap}
1029This is equivalent to specifying @var{keymap} positionally.
1030@end table
1031
1032Any other keyword arguments are passed passed directly to the
1033@code{defcustom} generated for the variable @var{mode}.
1034
1035The command named @var{mode} finishes by executing the @var{body} forms,
1036if any, after it has performed the standard actions such as setting
1037the variable named @var{mode}.
f9f59935
RS
1038@end defmac
1039
fdba9ef4
RS
1040@findex easy-mmode-define-minor-mode
1041 The name @code{easy-mmode-define-minor-mode} is an alias
1042for this macro.
1043
2468d0c0 1044 Here is an example of using @code{define-minor-mode}:
f9f59935
RS
1045
1046@smallexample
2468d0c0 1047(define-minor-mode hungry-mode
969fe9b5 1048 "Toggle Hungry mode.
177c0ea7 1049With no argument, this command toggles the mode.
f9f59935
RS
1050Non-null prefix argument turns on the mode.
1051Null prefix argument turns off the mode.
1052
1053When Hungry mode is enabled, the control delete key
1054gobbles all preceding whitespace except the last.
1055See the command \\[hungry-electric-delete]."
1056 ;; The initial value.
1057 nil
1058 ;; The indicator for the mode line.
1059 " Hungry"
1060 ;; The minor mode bindings.
1061 '(("\C-\^?" . hungry-electric-delete)
1062 ("\C-\M-\^?"
177c0ea7 1063 . (lambda ()
f9f59935 1064 (interactive)
fdba9ef4
RS
1065 (hungry-electric-delete t))))
1066 :group 'hunger)
f9f59935
RS
1067@end smallexample
1068
1069@noindent
1070This defines a minor mode named ``Hungry mode'', a command named
1071@code{hungry-mode} to toggle it, a variable named @code{hungry-mode}
1072which indicates whether the mode is enabled, and a variable named
1073@code{hungry-mode-map} which holds the keymap that is active when the
1074mode is enabled. It initializes the keymap with key bindings for
fdba9ef4
RS
1075@kbd{C-@key{DEL}} and @kbd{C-M-@key{DEL}}. It puts the variable
1076@code{hungry-mode} into custom group @code{hunger}. There are no
1077@var{body} forms---many minor modes don't need any.
f9f59935 1078
fdba9ef4 1079 Here's an equivalent way to write it:
2468d0c0 1080
fdba9ef4
RS
1081@smallexample
1082(define-minor-mode hungry-mode
1083 "Toggle Hungry mode.
1084With no argument, this command toggles the mode.
1085Non-null prefix argument turns on the mode.
1086Null prefix argument turns off the mode.
1087
1088When Hungry mode is enabled, the control delete key
1089gobbles all preceding whitespace except the last.
1090See the command \\[hungry-electric-delete]."
1091 ;; The initial value.
1092 :initial-value nil
1093 ;; The indicator for the mode line.
1094 :lighter " Hungry"
1095 ;; The minor mode bindings.
1096 :keymap
1097 '(("\C-\^?" . hungry-electric-delete)
1098 ("\C-\M-\^?"
1099 . (lambda ()
1100 (interactive)
1101 (hungry-electric-delete t))))
1102 :group 'hunger)
1103@end smallexample
2468d0c0 1104
a44af9f2 1105@node Mode Line Format
06862374 1106@section Mode-Line Format
a44af9f2
RS
1107@cindex mode line
1108
8241495d
RS
1109 Each Emacs window (aside from minibuffer windows) typically has a mode
1110line at the bottom, which displays status information about the buffer
1111displayed in the window. The mode line contains information about the
1112buffer, such as its name, associated file, depth of recursive editing,
1113and major and minor modes. A window can also have a @dfn{header
1114line}, which is much like the mode line but appears at the top of the
1115window (starting in Emacs 21).
a44af9f2 1116
8241495d
RS
1117 This section describes how to control the contents of the mode line
1118and header line. We include it in this chapter because much of the
a44af9f2
RS
1119information displayed in the mode line relates to the enabled major and
1120minor modes.
1121
1122 @code{mode-line-format} is a buffer-local variable that holds a
1123template used to display the mode line of the current buffer. All
8241495d
RS
1124windows for the same buffer use the same @code{mode-line-format}, so
1125their mode lines appear the same---except for scrolling percentages, and
1126line and column numbers, since those depend on point and on how the
1127window is scrolled. @code{header-line-format} is used likewise for
1128header lines.
1129
8e0f7b5b
RS
1130 For efficiency, Emacs does not recompute the mode line and header
1131line of a window in every redisplay. It does so when circumstances
1132appear to call for it---for instance, if you change the window
1133configuration, switch buffers, narrow or widen the buffer, scroll, or
1134change the buffer's modification status. If you modify any of the
1135variables referenced by @code{mode-line-format} (@pxref{Mode Line
1136Variables}), or any other variables and data structures that affect
1137how text is displayed (@pxref{Display}), you may want to force an
1138update of the mode line so as to display the new information or
1139display it in the new way.
a44af9f2
RS
1140
1141@c Emacs 19 feature
0ad8cce8 1142@defun force-mode-line-update &optional all
8241495d 1143Force redisplay of the current buffer's mode line and header line.
8e0f7b5b 1144The next redisplay will update the mode line and header line based on
0ad8cce8
LK
1145the latest values of all relevant variables. With optional
1146non-@code{nil} @var{all}, force redisplay of all mode lines and header
1147lines.
8e0f7b5b
RS
1148
1149This function also forces recomputation of the menu bar menus
1150and the frame title.
a44af9f2
RS
1151@end defun
1152
1153 The mode line is usually displayed in inverse video; see
1154@code{mode-line-inverse-video} in @ref{Inverse Video}.
1155
a1112b37
RS
1156 A window that is just one line tall does not display either a mode
1157line or a header line, even if the variables call for one. A window
1158that is two lines tall cannot display both a mode line and a header
1159line at once; if the variables call for both, only the mode line
1160actually appears.
1161
a44af9f2
RS
1162@menu
1163* Mode Line Data:: The data structure that controls the mode line.
1164* Mode Line Variables:: Variables used in that data structure.
1165* %-Constructs:: Putting information into a mode line.
8241495d
RS
1166* Properties in Mode:: Using text properties in the mode line.
1167* Header Lines:: Like a mode line, but at the top.
3ebe0346 1168* Emulating Mode Line:: Formatting text as the mode line would.
a44af9f2
RS
1169@end menu
1170
1171@node Mode Line Data
1172@subsection The Data Structure of the Mode Line
06862374 1173@cindex mode-line construct
a44af9f2 1174
06862374 1175 The mode-line contents are controlled by a data structure of lists,
a40d4712 1176strings, symbols, and numbers kept in buffer-local variables. The data
06862374
LK
1177structure is called a @dfn{mode-line construct}, and it is built in
1178recursive fashion out of simpler mode-line constructs. The same data
a40d4712
PR
1179structure is used for constructing frame titles (@pxref{Frame Titles})
1180and header lines (@pxref{Header Lines}).
a44af9f2
RS
1181
1182@defvar mode-line-format
06862374
LK
1183The value of this variable is a mode-line construct with overall
1184responsibility for the mode-line format. The value of this variable
1185controls which other variables are used to form the mode-line text, and
a44af9f2 1186where they appear.
8241495d
RS
1187
1188If you set this variable to @code{nil} in a buffer, that buffer does not
1189have a mode line. (This feature was added in Emacs 21.)
a44af9f2
RS
1190@end defvar
1191
06862374 1192 A mode-line construct may be as simple as a fixed string of text, but
a44af9f2 1193it usually specifies how to use other variables to construct the text.
06862374 1194Many of these variables are themselves defined to have mode-line
a44af9f2
RS
1195constructs as their values.
1196
1197 The default value of @code{mode-line-format} incorporates the values
06862374
LK
1198of variables such as @code{mode-line-position} and
1199@code{mode-line-modes} (which in turn incorporates the values of the
1200variables @code{mode-name} and @code{minor-mode-alist}). Because of
1201this, very few modes need to alter @code{mode-line-format} itself. For
1202most purposes, it is sufficient to alter some of the variables that
1203@code{mode-line-format} either directly or indirectly refers to.
1204
1205 A mode-line construct may be a list, a symbol, or a string. If the
de9f0bd9 1206value is a list, each element may be a list, a symbol, or a string.
a44af9f2 1207
8241495d
RS
1208 The mode line can display various faces, if the strings that control
1209it have the @code{face} property. @xref{Properties in Mode}. In
1210addition, the face @code{mode-line} is used as a default for the whole
1211mode line (@pxref{Standard Faces}).
1212
a44af9f2
RS
1213@table @code
1214@cindex percent symbol in mode line
1215@item @var{string}
06862374 1216A string as a mode-line construct is displayed verbatim in the mode line
bfe721d1 1217except for @dfn{@code{%}-constructs}. Decimal digits after the @samp{%}
a44af9f2
RS
1218specify the field width for space filling on the right (i.e., the data
1219is left justified). @xref{%-Constructs}.
1220
1221@item @var{symbol}
06862374
LK
1222A symbol as a mode-line construct stands for its value. The value of
1223@var{symbol} is used as a mode-line construct, in place of @var{symbol}.
8241495d 1224However, the symbols @code{t} and @code{nil} are ignored, as is any
de9f0bd9 1225symbol whose value is void.
a44af9f2
RS
1226
1227There is one exception: if the value of @var{symbol} is a string, it is
de9f0bd9 1228displayed verbatim: the @code{%}-constructs are not recognized.
a44af9f2 1229
a232a240
LK
1230Unless @var{symbol} is marked as ``risky'' (i.e., it has a
1231non-@code{nil} @code{risky-local-variable} property), all properties in
1232any strings, as well as all @code{:eval} and @code{:propertize} forms in
1233the value of that symbol will be ignored.
1234
a44af9f2 1235@item (@var{string} @var{rest}@dots{}) @r{or} (@var{list} @var{rest}@dots{})
de9f0bd9
RS
1236A list whose first element is a string or list means to process all the
1237elements recursively and concatenate the results. This is the most
06862374 1238common form of mode-line construct.
a44af9f2 1239
8241495d
RS
1240@item (:eval @var{form})
1241A list whose first element is the symbol @code{:eval} says to evaluate
1242@var{form}, and use the result as a string to display.
1243(This feature is new as of Emacs 21.)
1244
06862374
LK
1245@item (:propertize @var{elt} @var{props}@dots{})
1246A list whose first element is the symbol @code{:propertize} says to
1247process the mode-line construct @var{elt} recursively and add the text
1248properties specified by @var{props} to the result. The argument
1249@var{props} should consist of zero or more pairs @var{text-property}
1250@var{value}. (This feature is new as of Emacs 21.4.)
1251@c FIXME: This might be Emacs 21.5.
1252
a44af9f2 1253@item (@var{symbol} @var{then} @var{else})
8241495d
RS
1254A list whose first element is a symbol that is not a keyword specifies a
1255conditional. Its meaning depends on the value of @var{symbol}. If the
1256value is non-@code{nil}, the second element, @var{then}, is processed
06862374 1257recursively as a mode-line element. But if the value of @var{symbol} is
8241495d 1258@code{nil}, the third element, @var{else}, is processed recursively.
06862374 1259You may omit @var{else}; then the mode-line element displays nothing if
8241495d 1260the value of @var{symbol} is @code{nil}.
a44af9f2
RS
1261
1262@item (@var{width} @var{rest}@dots{})
1263A list whose first element is an integer specifies truncation or
1264padding of the results of @var{rest}. The remaining elements
06862374 1265@var{rest} are processed recursively as mode-line constructs and
a44af9f2
RS
1266concatenated together. Then the result is space filled (if
1267@var{width} is positive) or truncated (to @minus{}@var{width} columns,
1268if @var{width} is negative) on the right.
1269
1270For example, the usual way to show what percentage of a buffer is above
de9f0bd9 1271the top of the window is to use a list like this: @code{(-3 "%p")}.
a44af9f2
RS
1272@end table
1273
1274 If you do alter @code{mode-line-format} itself, the new value should
de9f0bd9
RS
1275use the same variables that appear in the default value (@pxref{Mode
1276Line Variables}), rather than duplicating their contents or displaying
1277the information in another fashion. This way, customizations made by
bfe721d1
KH
1278the user or by Lisp programs (such as @code{display-time} and major
1279modes) via changes to those variables remain effective.
a44af9f2
RS
1280
1281@cindex Shell mode @code{mode-line-format}
1282 Here is an example of a @code{mode-line-format} that might be
969fe9b5 1283useful for @code{shell-mode}, since it contains the host name and default
a44af9f2
RS
1284directory.
1285
1286@example
1287@group
1288(setq mode-line-format
969fe9b5
RS
1289 (list "-"
1290 'mode-line-mule-info
a44af9f2 1291 'mode-line-modified
969fe9b5 1292 'mode-line-frame-identification
177c0ea7 1293 "%b--"
a44af9f2 1294@end group
f9f59935
RS
1295@group
1296 ;; @r{Note that this is evaluated while making the list.}
06862374 1297 ;; @r{It makes a mode-line construct which is just a string.}
f9f59935
RS
1298 (getenv "HOST")
1299@end group
177c0ea7 1300 ":"
a44af9f2
RS
1301 'default-directory
1302 " "
1303 'global-mode-string
de9f0bd9 1304 " %[("
8241495d 1305 '(:eval (mode-line-mode-name))
177c0ea7
JB
1306 'mode-line-process
1307 'minor-mode-alist
1308 "%n"
969fe9b5 1309 ")%]--"
a44af9f2 1310@group
969fe9b5 1311 '(which-func-mode ("" which-func-format "--"))
bfe721d1 1312 '(line-number-mode "L%l--")
969fe9b5 1313 '(column-number-mode "C%c--")
a232a240 1314 '(-3 "%p")
a44af9f2
RS
1315 "-%-"))
1316@end group
1317@end example
1318
1911e6e5
RS
1319@noindent
1320(The variables @code{line-number-mode}, @code{column-number-mode}
1321and @code{which-func-mode} enable particular minor modes; as usual,
1322these variable names are also the minor mode command names.)
1323
a44af9f2
RS
1324@node Mode Line Variables
1325@subsection Variables Used in the Mode Line
1326
1327 This section describes variables incorporated by the
1328standard value of @code{mode-line-format} into the text of the mode
1329line. There is nothing inherently special about these variables; any
1330other variables could have the same effects on the mode line if
1331@code{mode-line-format} were changed to use them.
1332
969fe9b5
RS
1333@defvar mode-line-mule-info
1334This variable holds the value of the mode-line construct that displays
1335information about the language environment, buffer coding system, and
a9f0a989 1336current input method. @xref{Non-ASCII Characters}.
969fe9b5
RS
1337@end defvar
1338
a44af9f2 1339@defvar mode-line-modified
de9f0bd9 1340This variable holds the value of the mode-line construct that displays
a44af9f2
RS
1341whether the current buffer is modified.
1342
969fe9b5
RS
1343The default value of @code{mode-line-modified} is @code{("%1*%1+")}.
1344This means that the mode line displays @samp{**} if the buffer is
1345modified, @samp{--} if the buffer is not modified, @samp{%%} if the
1346buffer is read only, and @samp{%*} if the buffer is read only and
1347modified.
a44af9f2
RS
1348
1349Changing this variable does not force an update of the mode line.
1350@end defvar
1351
969fe9b5
RS
1352@defvar mode-line-frame-identification
1353This variable identifies the current frame. The default value is
06862374
LK
1354@code{" "} if you are using a window system which can show multiple
1355frames, or @code{"-%F "} on an ordinary terminal which shows only one
969fe9b5
RS
1356frame at a time.
1357@end defvar
1358
a44af9f2 1359@defvar mode-line-buffer-identification
de9f0bd9 1360This variable identifies the buffer being displayed in the window. Its
ebc6903b
RS
1361default value is @code{("%12b")}, which displays the buffer name, padded
1362with spaces to at least 12 columns.
a44af9f2
RS
1363@end defvar
1364
06862374
LK
1365@defvar mode-line-position
1366This variable indicates the position in the buffer. Here is a
1367simplified version of its default value. The actual default value
1368also specifies addition of the @code{help-echo} text property.
a44af9f2 1369
06862374
LK
1370@example
1371@group
a232a240 1372((-3 "%p")
06862374
LK
1373 (size-indication-mode (8 " of %I"))
1374@end group
1375@group
1376 (line-number-mode
1377 ((column-number-mode
1378 (10 " (%l,%c)")
1379 (6 " L%l")))
1380 ((column-number-mode
1381 (5 " C%c")))))
1382@end group
1383@end example
1384
1385This means that @code{mode-line-position} displays at least the buffer
1386percentage and possibly the buffer size, the line number and the column
1387number.
1388@end defvar
1389
1390@defvar vc-mode
1391The variable @code{vc-mode}, buffer-local in each buffer, records
1392whether the buffer's visited file is maintained with version control,
1393and, if so, which kind. Its value is a string that appears in the mode
1394line, or @code{nil} for no version control.
a44af9f2
RS
1395@end defvar
1396
06862374
LK
1397@defvar mode-line-modes
1398This variable displays the buffer's major and minor modes. Here is a
1399simplified version of its default value. The real default value also
1400specifies addition of text properties.
1401
1402@example
1403@group
1404("%[(" mode-name
1405 mode-line-process minor-mode-alist
1406 "%n" ")%]--")
1407@end group
1408@end example
1409
1410So @code{mode-line-modes} normally also displays the recursive editing
1411level, information on the process status and whether narrowing is in
1412effect.
1413@end defvar
1414
1415 The following three variables are used in @code{mode-line-modes}:
1416
a44af9f2 1417@defvar mode-name
de9f0bd9 1418This buffer-local variable holds the ``pretty'' name of the current
a44af9f2
RS
1419buffer's major mode. Each major mode should set this variable so that the
1420mode name will appear in the mode line.
1421@end defvar
1422
06862374
LK
1423@defvar mode-line-process
1424This buffer-local variable contains the mode-line information on process
1425status in modes used for communicating with subprocesses. It is
1426displayed immediately following the major mode name, with no intervening
1427space. For example, its value in the @samp{*shell*} buffer is
1428@code{(":%s")}, which allows the shell to display its status along
1429with the major mode as: @samp{(Shell:run)}. Normally this variable
1430is @code{nil}.
1431@end defvar
1432
a44af9f2 1433@defvar minor-mode-alist
de9f0bd9 1434This variable holds an association list whose elements specify how the
a44af9f2
RS
1435mode line should indicate that a minor mode is active. Each element of
1436the @code{minor-mode-alist} should be a two-element list:
1437
1438@example
1439(@var{minor-mode-variable} @var{mode-line-string})
1440@end example
1441
06862374
LK
1442More generally, @var{mode-line-string} can be any mode-line spec. It
1443appears in the mode line when the value of @var{minor-mode-variable}
1444is non-@code{nil}, and not otherwise. These strings should begin with
a44af9f2 1445spaces so that they don't run together. Conventionally, the
06862374
LK
1446@var{minor-mode-variable} for a specific mode is set to a
1447non-@code{nil} value when that minor mode is activated.
a44af9f2 1448
f9f59935
RS
1449@code{minor-mode-alist} itself is not buffer-local. Each variable
1450mentioned in the alist should be buffer-local if its minor mode can be
1451enabled separately in each buffer.
a44af9f2
RS
1452@end defvar
1453
06862374
LK
1454@defvar global-mode-string
1455This variable holds a mode-line spec that appears in the mode line by
1456default, just after the buffer name. The command @code{display-time}
1457sets @code{global-mode-string} to refer to the variable
1458@code{display-time-string}, which holds a string containing the time and
1459load information.
a40d4712 1460
06862374
LK
1461The @samp{%M} construct substitutes the value of
1462@code{global-mode-string}, but that is obsolete, since the variable is
1463included in the mode line from @code{mode-line-format}.
a40d4712
PR
1464@end defvar
1465
1466 The variable @code{default-mode-line-format} is where
1467@code{mode-line-format} usually gets its value:
1468
a44af9f2 1469@defvar default-mode-line-format
de9f0bd9 1470This variable holds the default @code{mode-line-format} for buffers
a44af9f2
RS
1471that do not override it. This is the same as @code{(default-value
1472'mode-line-format)}.
1473
06862374
LK
1474Here is a simplified version of the default value of
1475@code{default-mode-line-format}. The real default value also
1476specifies addition of text properties.
a44af9f2
RS
1477
1478@example
1479@group
f9f59935
RS
1480("-"
1481 mode-line-mule-info
a44af9f2 1482 mode-line-modified
f9f59935 1483 mode-line-frame-identification
a44af9f2 1484 mode-line-buffer-identification
f9f59935 1485@end group
a44af9f2 1486 " "
06862374
LK
1487 mode-line-position
1488 (vc-mode vc-mode)
1489 " "
f9f59935 1490@group
06862374 1491 mode-line-modes
f9f59935 1492 (which-func-mode ("" which-func-format "--"))
06862374 1493 (global-mode-string ("--" global-mode-string))
a44af9f2
RS
1494 "-%-")
1495@end group
1496@end example
1497@end defvar
1498
1499@node %-Constructs
1500@subsection @code{%}-Constructs in the Mode Line
1501
1502 The following table lists the recognized @code{%}-constructs and what
de9f0bd9
RS
1503they mean. In any construct except @samp{%%}, you can add a decimal
1504integer after the @samp{%} to specify how many characters to display.
a44af9f2
RS
1505
1506@table @code
1507@item %b
1508The current buffer name, obtained with the @code{buffer-name} function.
1509@xref{Buffer Names}.
1510
a40d4712
PR
1511@item %c
1512The current column number of point.
1513
a44af9f2
RS
1514@item %f
1515The visited file name, obtained with the @code{buffer-file-name}
1516function. @xref{Buffer File Name}.
1517
22697dac 1518@item %F
969fe9b5
RS
1519The title (only on a window system) or the name of the selected frame.
1520@xref{Window Frame Parameters}.
22697dac 1521
08622028
LK
1522@item %i
1523The size of the accessible part of the current buffer; basically
1524@code{(- (point-max) (point-min))}.
1525
1526@item %I
1527Like @samp{%i}, but the size is printed in a more readable way by using
1528@samp{k} for 10^3, @samp{M} for 10^6, @samp{G} for 10^9, etc., to
1529abbreviate.
1530
22697dac 1531@item %l
8241495d
RS
1532The current line number of point, counting within the accessible portion
1533of the buffer.
22697dac 1534
a40d4712
PR
1535@item %n
1536@samp{Narrow} when narrowing is in effect; nothing otherwise (see
1537@code{narrow-to-region} in @ref{Narrowing}).
1538
1539@item %p
1540The percentage of the buffer text above the @strong{top} of window, or
1541@samp{Top}, @samp{Bottom} or @samp{All}. Note that the default
1542mode-line specification truncates this to three characters.
1543
1544@item %P
1545The percentage of the buffer text that is above the @strong{bottom} of
1546the window (which includes the text visible in the window, as well as
1547the text above the top), plus @samp{Top} if the top of the buffer is
1548visible on screen; or @samp{Bottom} or @samp{All}.
1549
1550@item %s
1551The status of the subprocess belonging to the current buffer, obtained with
1552@code{process-status}. @xref{Process Information}.
1553
1554@item %t
1555Whether the visited file is a text file or a binary file. This is a
1556meaningful distinction only on certain operating systems (@pxref{MS-DOS
1557File Types}).
1558
a44af9f2
RS
1559@item %*
1560@samp{%} if the buffer is read only (see @code{buffer-read-only}); @*
1561@samp{*} if the buffer is modified (see @code{buffer-modified-p}); @*
1562@samp{-} otherwise. @xref{Buffer Modification}.
1563
1564@item %+
22697dac
KH
1565@samp{*} if the buffer is modified (see @code{buffer-modified-p}); @*
1566@samp{%} if the buffer is read only (see @code{buffer-read-only}); @*
1567@samp{-} otherwise. This differs from @samp{%*} only for a modified
1568read-only buffer. @xref{Buffer Modification}.
1569
1570@item %&
de9f0bd9 1571@samp{*} if the buffer is modified, and @samp{-} otherwise.
a44af9f2 1572
a44af9f2
RS
1573@item %[
1574An indication of the depth of recursive editing levels (not counting
1575minibuffer levels): one @samp{[} for each editing level.
1576@xref{Recursive Editing}.
1577
1578@item %]
1579One @samp{]} for each recursive editing level (not counting minibuffer
1580levels).
1581
a40d4712
PR
1582@item %-
1583Dashes sufficient to fill the remainder of the mode line.
1584
a44af9f2
RS
1585@item %%
1586The character @samp{%}---this is how to include a literal @samp{%} in a
1587string in which @code{%}-constructs are allowed.
a44af9f2
RS
1588@end table
1589
1590The following two @code{%}-constructs are still supported, but they are
1591obsolete, since you can get the same results with the variables
1592@code{mode-name} and @code{global-mode-string}.
1593
1594@table @code
1595@item %m
1596The value of @code{mode-name}.
1597
1598@item %M
1599The value of @code{global-mode-string}. Currently, only
1600@code{display-time} modifies the value of @code{global-mode-string}.
1601@end table
1602
8241495d
RS
1603@node Properties in Mode
1604@subsection Properties in the Mode Line
06862374 1605@cindex text properties in the mode line
8241495d
RS
1606
1607 Starting in Emacs 21, certain text properties are meaningful in the
1608mode line. The @code{face} property affects the appearance of text; the
1609@code{help-echo} property associate help strings with the text, and
ce75fd23 1610@code{local-map} can make the text mouse-sensitive.
8241495d 1611
06862374 1612 There are four ways to specify text properties for text in the mode
8241495d
RS
1613line:
1614
1615@enumerate
1616@item
06862374
LK
1617Put a string with a text property directly into the mode-line data
1618structure.
1619
1620@item
1621Put a text property on a mode-line %-construct such as @samp{%12b}; then
1622the expansion of the %-construct will have that same text property.
8241495d
RS
1623
1624@item
06862374
LK
1625Use a @code{(:propertize @var{elt} @var{props}@dots{})} construct to
1626give @var{elt} a text property specified by @var{props}.
8241495d
RS
1627
1628@item
1629Use a list containing @code{:eval @var{form}} in the mode-line data
06862374
LK
1630structure, and make @var{form} evaluate to a string that has a text
1631property.
8241495d
RS
1632@end enumerate
1633
ce75fd23 1634 You use the @code{local-map} property to specify a keymap. Like any
8241495d 1635keymap, it can bind character keys and function keys; but that has no
a40d4712 1636effect, since it is impossible to move point into the mode line. This
8241495d
RS
1637keymap can only take real effect for mouse clicks.
1638
1639@node Header Lines
1640@subsection Window Header Lines
1641@cindex header line (of a window)
1642@cindex window header line
1643
1644 Starting in Emacs 21, a window can have a @dfn{header line} at the
1645top, just as it can have a mode line at the bottom. The header line
06862374 1646feature works just like the mode-line feature, except that it's
8241495d
RS
1647controlled by different variables.
1648
1649@tindex header-line-format
1650@defvar header-line-format
1651This variable, local in every buffer, specifies how to display the
1652header line, for windows displaying the buffer. The format of the value
13ede7fc 1653is the same as for @code{mode-line-format} (@pxref{Mode Line Data}).
8241495d
RS
1654@end defvar
1655
1656@tindex default-header-line-format
1657@defvar default-header-line-format
1658This variable holds the default @code{header-line-format} for buffers
1659that do not override it. This is the same as @code{(default-value
1660'header-line-format)}.
1661
1662It is normally @code{nil}, so that ordinary buffers have no header line.
1663@end defvar
1664
bda7c6dd 1665@node Emulating Mode Line
06862374 1666@subsection Emulating Mode-Line Formatting
bda7c6dd
RS
1667
1668 You can use the function @code{format-mode-line} to compute
1669the text that would appear in a mode line or header line
06862374 1670based on certain mode-line specification.
bda7c6dd
RS
1671
1672@defun format-mode-line &optional format window no-props
1673This function formats a line of text according to @var{format} as if
1674it were generating the mode line for @var{window}, but instead of
1675displaying the text in the mode line or the header line, it returns
1676the text as a string.
1677
1678If @var{format} is @code{nil}, that means to use
1679@code{mode-line-format} and return the text that would appear in the
1680mode line. If @var{format} is @code{t}, that means to use
1681@code{header-line-format} so as to return the text that would appear
1682in the header line (@code{""} if the window has no header line).
1683The argument @var{window} defaults to the selected window.
1684
1685The value string normally has text properties that correspond to the
1686faces, keymaps, etc., that the mode line would have. If
1687@var{no-props} is non-@code{nil}, the value has no text properties.
1688@end defun
1689
f9f59935
RS
1690@node Imenu
1691@section Imenu
1692
1693@cindex Imenu
969fe9b5
RS
1694 @dfn{Imenu} is a feature that lets users select a definition or
1695section in the buffer, from a menu which lists all of them, to go
5a5d2aec
RS
1696directly to that location in the buffer. Imenu works by constructing
1697a buffer index which lists the names and buffer positions of the
a40d4712 1698definitions, or other named portions of the buffer; then the user can
5a5d2aec
RS
1699choose one of them and move point to it. The user-level commands for
1700using Imenu are described in the Emacs Manual (@pxref{Imenu,, Imenu,
1701emacs, the Emacs Manual}). This section explains how to customize
1702Imenu's method of finding definitions or buffer portions for a
a40d4712 1703particular major mode.
969fe9b5
RS
1704
1705 The usual and simplest way is to set the variable
1706@code{imenu-generic-expression}:
f9f59935
RS
1707
1708@defvar imenu-generic-expression
10ee4e90
LK
1709This variable, if non-@code{nil}, is a list that specifies regular
1710expressions for finding definitions for Imenu. Simple elements of
1711@code{imenu-generic-expression} look like this:
f9f59935
RS
1712
1713@example
10ee4e90 1714(@var{menu-title} @var{regexp} @var{index})
f9f59935
RS
1715@end example
1716
1717Here, if @var{menu-title} is non-@code{nil}, it says that the matches
1718for this element should go in a submenu of the buffer index;
1719@var{menu-title} itself specifies the name for the submenu. If
1720@var{menu-title} is @code{nil}, the matches for this element go directly
1721in the top level of the buffer index.
1722
1723The second item in the list, @var{regexp}, is a regular expression
10ee4e90
LK
1724(@pxref{Regular Expressions}); anything in the buffer that it matches
1725is considered a definition, something to mention in the buffer index.
1726The third item, @var{index}, is a non-negative integer that indicates
1727which subexpression in @var{regexp} matches the definition's name.
f9f59935
RS
1728
1729An element can also look like this:
1730
1731@example
1732(@var{menu-title} @var{regexp} @var{index} @var{function} @var{arguments}@dots{})
1733@end example
1734
10ee4e90
LK
1735Like in the previous case, each match for this element creates an
1736index item. However, if this index item is selected by the user, it
1737calls @var{function} with arguments consisting of the item name, the
1738buffer position, and @var{arguments}.
f9f59935 1739
10ee4e90
LK
1740For Emacs Lisp mode, @code{imenu-generic-expression} could look like
1741this:
f9f59935 1742
a9f0a989 1743@c should probably use imenu-syntax-alist and \\sw rather than [-A-Za-z0-9+]
f9f59935
RS
1744@example
1745@group
1746((nil "^\\s-*(def\\(un\\|subst\\|macro\\|advice\\)\
1747\\s-+\\([-A-Za-z0-9+]+\\)" 2)
1748@end group
1749@group
1750 ("*Vars*" "^\\s-*(def\\(var\\|const\\)\
1751\\s-+\\([-A-Za-z0-9+]+\\)" 2)
1752@end group
1753@group
1754 ("*Types*"
a9f0a989
RS
1755 "^\\s-*\
1756(def\\(type\\|struct\\|class\\|ine-condition\\)\
f9f59935
RS
1757\\s-+\\([-A-Za-z0-9+]+\\)" 2))
1758@end group
1759@end example
1760
969fe9b5 1761Setting this variable makes it buffer-local in the current buffer.
f9f59935
RS
1762@end defvar
1763
1764@defvar imenu-case-fold-search
10ee4e90
LK
1765This variable controls whether matching against the regular
1766expressions in the value of @code{imenu-generic-expression} is
1767case-sensitive: @code{t}, the default, means matching should ignore
1768case.
a9f0a989
RS
1769
1770Setting this variable makes it buffer-local in the current buffer.
1771@end defvar
1772
1773@defvar imenu-syntax-alist
1774This variable is an alist of syntax table modifiers to use while
1911e6e5
RS
1775processing @code{imenu-generic-expression}, to override the syntax table
1776of the current buffer. Each element should have this form:
a9f0a989
RS
1777
1778@example
1779(@var{characters} . @var{syntax-description})
1780@end example
1781
1782The @sc{car}, @var{characters}, can be either a character or a string.
1783The element says to give that character or characters the syntax
1784specified by @var{syntax-description}, which is passed to
1785@code{modify-syntax-entry} (@pxref{Syntax Table Functions}).
1786
1787This feature is typically used to give word syntax to characters which
1788normally have symbol syntax, and thus to simplify
1789@code{imenu-generic-expression} and speed up matching.
1790For example, Fortran mode uses it this way:
1791
1792@example
5a5d2aec 1793(setq imenu-syntax-alist '(("_$" . "w")))
a9f0a989
RS
1794@end example
1795
10ee4e90
LK
1796The @code{imenu-generic-expression} regular expressions can then use
1797@samp{\\sw+} instead of @samp{\\(\\sw\\|\\s_\\)+}. Note that this
1798technique may be inconvenient when the mode needs to limit the initial
1799character of a name to a smaller set of characters than are allowed in
1800the rest of a name.
f9f59935 1801
969fe9b5 1802Setting this variable makes it buffer-local in the current buffer.
f9f59935
RS
1803@end defvar
1804
1805 Another way to customize Imenu for a major mode is to set the
1806variables @code{imenu-prev-index-position-function} and
969fe9b5 1807@code{imenu-extract-index-name-function}:
f9f59935
RS
1808
1809@defvar imenu-prev-index-position-function
05aea714 1810If this variable is non-@code{nil}, its value should be a function that
a40d4712
PR
1811finds the next ``definition'' to put in the buffer index, scanning
1812backward in the buffer from point. It should return @code{nil} if it
5fe3b9bc 1813doesn't find another ``definition'' before point. Otherwise it should
a40d4712
PR
1814leave point at the place it finds a ``definition,'' and return any
1815non-@code{nil} value.
f9f59935 1816
969fe9b5 1817Setting this variable makes it buffer-local in the current buffer.
f9f59935
RS
1818@end defvar
1819
1820@defvar imenu-extract-index-name-function
1821If this variable is non-@code{nil}, its value should be a function to
969fe9b5
RS
1822return the name for a definition, assuming point is in that definition
1823as the @code{imenu-prev-index-position-function} function would leave
1824it.
f9f59935 1825
969fe9b5 1826Setting this variable makes it buffer-local in the current buffer.
f9f59935
RS
1827@end defvar
1828
969fe9b5 1829 The last way to customize Imenu for a major mode is to set the
a40d4712 1830variable @code{imenu-create-index-function}:
969fe9b5 1831
f9f59935 1832@defvar imenu-create-index-function
10ee4e90
LK
1833This variable specifies the function to use for creating a buffer
1834index. The function should take no arguments, and return an index
1835alist for the current buffer. It is called within
1836@code{save-excursion}, so where it leaves point makes no difference.
f9f59935 1837
10ee4e90
LK
1838The index alist can have three types of elements. Simple elements
1839look like this:
f9f59935 1840
10ee4e90
LK
1841@example
1842(@var{index-name} . @var{index-position})
1843@end example
f9f59935 1844
10ee4e90
LK
1845Selecting a simple element has the effect of moving to position
1846@var{index-position} in the buffer. Special elements look like this:
f9f59935 1847
10ee4e90
LK
1848@example
1849(@var{index-name} @var{index-position} @var{function} @var{arguments}@dots{})
1850@end example
f9f59935 1851
10ee4e90 1852Selecting a special element performs:
f9f59935
RS
1853
1854@example
c22c5da6 1855(funcall @var{function}
10ee4e90 1856 @var{index-name} @var{index-position} @var{arguments}@dots{})
f9f59935
RS
1857@end example
1858
10ee4e90
LK
1859A nested sub-alist element looks like this:
1860
1861@example
f008b925 1862(@var{menu-title} @var{sub-alist})
10ee4e90
LK
1863@end example
1864
f008b925 1865It creates the submenu @var{menu-title} specified by @var{sub-alist}.
10ee4e90 1866
f008b925
LK
1867The default value of @code{imenu-create-index-function} is
1868@code{imenu-default-create-index-function}. This function uses
1869@code{imenu-prev-index-position-function} and
10ee4e90
LK
1870@code{imenu-extract-index-name-function} to produce the index alist.
1871However, if either of these two variables is @code{nil}, the default
1872function uses @code{imenu-generic-expression} instead.
1873
1874Setting this variable makes it buffer-local in the current buffer.
f9f59935
RS
1875@end defvar
1876
1877@node Font Lock Mode
1878@section Font Lock Mode
1879@cindex Font Lock Mode
1880
1881 @dfn{Font Lock mode} is a feature that automatically attaches
1882@code{face} properties to certain parts of the buffer based on their
1883syntactic role. How it parses the buffer depends on the major mode;
a40d4712 1884most major modes define syntactic criteria for which faces to use in
969fe9b5 1885which contexts. This section explains how to customize Font Lock for a
a40d4712 1886particular major mode.
f9f59935
RS
1887
1888 Font Lock mode finds text to highlight in two ways: through syntactic
1889parsing based on the syntax table, and through searching (usually for
1890regular expressions). Syntactic fontification happens first; it finds
1891comments and string constants, and highlights them using
1892@code{font-lock-comment-face} and @code{font-lock-string-face}
a40d4712 1893(@pxref{Faces for Font Lock}). Search-based fontification follows.
f9f59935
RS
1894
1895@menu
1896* Font Lock Basics::
1897* Search-based Fontification::
1898* Other Font Lock Variables::
1899* Levels of Font Lock::
651f7556 1900* Precalculated Fontification::
f9f59935 1901* Faces for Font Lock::
969fe9b5 1902* Syntactic Font Lock::
f9f59935
RS
1903@end menu
1904
1905@node Font Lock Basics
1906@subsection Font Lock Basics
1907
1908 There are several variables that control how Font Lock mode highlights
1909text. But major modes should not set any of these variables directly.
86494bd5 1910Instead, they should set @code{font-lock-defaults} as a buffer-local
969fe9b5
RS
1911variable. The value assigned to this variable is used, if and when Font
1912Lock mode is enabled, to set all the other variables.
f9f59935
RS
1913
1914@defvar font-lock-defaults
1915This variable is set by major modes, as a buffer-local variable, to
1916specify how to fontify text in that mode. The value should look like
1917this:
1918
1919@example
1920(@var{keywords} @var{keywords-only} @var{case-fold}
1921 @var{syntax-alist} @var{syntax-begin} @var{other-vars}@dots{})
1922@end example
1923
1924The first element, @var{keywords}, indirectly specifies the value of
1925@code{font-lock-keywords}. It can be a symbol, a variable whose value
a40d4712 1926is the list to use for @code{font-lock-keywords}. It can also be a list of
f9f59935
RS
1927several such symbols, one for each possible level of fontification. The
1928first symbol specifies how to do level 1 fontification, the second
1929symbol how to do level 2, and so on.
1930
1931The second element, @var{keywords-only}, specifies the value of the
a9f0a989 1932variable @code{font-lock-keywords-only}. If this is non-@code{nil},
969fe9b5 1933syntactic fontification (of strings and comments) is not performed.
f9f59935
RS
1934
1935The third element, @var{case-fold}, specifies the value of
1936@code{font-lock-case-fold-search}. If it is non-@code{nil}, Font Lock
969fe9b5
RS
1937mode ignores case when searching as directed by
1938@code{font-lock-keywords}.
f9f59935
RS
1939
1940If the fourth element, @var{syntax-alist}, is non-@code{nil}, it should be
1941a list of cons cells of the form @code{(@var{char-or-string}
1942. @var{string})}. These are used to set up a syntax table for
1943fontification (@pxref{Syntax Table Functions}). The resulting syntax
1944table is stored in @code{font-lock-syntax-table}.
1945
1946The fifth element, @var{syntax-begin}, specifies the value of
969fe9b5 1947@code{font-lock-beginning-of-syntax-function} (see below).
f9f59935 1948
a40d4712
PR
1949All the remaining elements (if any) are collectively called
1950@var{other-vars}. Each of these elements should have the form
1951@code{(@var{variable} . @var{value})}---which means, make @var{variable}
1952buffer-local and then set it to @var{value}. You can use these
1953@var{other-vars} to set other variables that affect fontification,
1954aside from those you can control with the first five elements.
f9f59935
RS
1955@end defvar
1956
1957@node Search-based Fontification
1958@subsection Search-based Fontification
1959
1960 The most important variable for customizing Font Lock mode is
1961@code{font-lock-keywords}. It specifies the search criteria for
1962search-based fontification.
1963
1964@defvar font-lock-keywords
1965This variable's value is a list of the keywords to highlight. Be
969fe9b5
RS
1966careful when composing regular expressions for this list; a poorly
1967written pattern can dramatically slow things down!
f9f59935
RS
1968@end defvar
1969
1970 Each element of @code{font-lock-keywords} specifies how to find
969fe9b5
RS
1971certain cases of text, and how to highlight those cases. Font Lock mode
1972processes the elements of @code{font-lock-keywords} one by one, and for
1973each element, it finds and handles all matches. Ordinarily, once
1974part of the text has been fontified already, this cannot be overridden
1975by a subsequent match in the same text; but you can specify different
1976behavior using the @var{override} element of a @var{highlighter}.
1977
1978 Each element of @code{font-lock-keywords} should have one of these
1979forms:
f9f59935
RS
1980
1981@table @code
1982@item @var{regexp}
1983Highlight all matches for @var{regexp} using
1984@code{font-lock-keyword-face}. For example,
1985
1986@example
1987;; @r{Highlight discrete occurrences of @samp{foo}}
1988;; @r{using @code{font-lock-keyword-face}.}
1989"\\<foo\\>"
1990@end example
1991
969fe9b5
RS
1992The function @code{regexp-opt} (@pxref{Syntax of Regexps}) is useful for
1993calculating optimal regular expressions to match a number of different
1994keywords.
f9f59935
RS
1995
1996@item @var{function}
1997Find text by calling @var{function}, and highlight the matches
1998it finds using @code{font-lock-keyword-face}.
1999
2000When @var{function} is called, it receives one argument, the limit of
07f7b41c
RS
2001the search; it should searching at point, and not search beyond the
2002limit. It should return non-@code{nil} if it succeeds, and set the
2003match data to describe the match that was found. Returning @code{nil}
2004indicates failure of the search.
2005
2006Fontification will call @var{function} repeatedly with the same limit,
2007and with point where the previous invocation left it, until
2008@var{function} fails. On failure, @var{function} need not reset point
2009in any particular way.
f9f59935
RS
2010
2011@item (@var{matcher} . @var{match})
86494bd5 2012In this kind of element, @var{matcher} is either a regular
f9f59935
RS
2013expression or a function, as described above. The @sc{cdr},
2014@var{match}, specifies which subexpression of @var{matcher} should be
969fe9b5 2015highlighted (instead of the entire text that @var{matcher} matched).
f9f59935
RS
2016
2017@example
8241495d 2018;; @r{Highlight the @samp{bar} in each occurrence of @samp{fubar},}
f9f59935
RS
2019;; @r{using @code{font-lock-keyword-face}.}
2020("fu\\(bar\\)" . 1)
2021@end example
2022
969fe9b5 2023If you use @code{regexp-opt} to produce the regular expression
f9f59935
RS
2024@var{matcher}, then you can use @code{regexp-opt-depth} (@pxref{Syntax
2025of Regexps}) to calculate the value for @var{match}.
2026
2027@item (@var{matcher} . @var{facename})
2028In this kind of element, @var{facename} is an expression whose value
2029specifies the face name to use for highlighting.
2030
2031@example
2032;; @r{Highlight occurrences of @samp{fubar},}
2033;; @r{using the face which is the value of @code{fubar-face}.}
2034("fubar" . fubar-face)
2035@end example
2036
fdba9ef4
RS
2037The value of @var{facename} is usually a face name (a symbol), but it
2038can also be a list of the form
2039
2040@example
2041(face @var{face} @var{prop1} @var{val1} @var{prop2} @var{val2}@dots{})
2042@end example
2043
2044to specify various text properties to put on the text that matches.
2045If you do this, be sure to add the other text property names that you
2046set in this way to the value of @code{font-lock-extra-managed-props}
2047so that the properties will also be cleared out when they are no longer
2048appropriate.
2049
f9f59935
RS
2050@item (@var{matcher} . @var{highlighter})
2051In this kind of element, @var{highlighter} is a list
2052which specifies how to highlight matches found by @var{matcher}.
2053It has the form
2054
2055@example
2056(@var{subexp} @var{facename} @var{override} @var{laxmatch})
2057@end example
2058
2059The @sc{car}, @var{subexp}, is an integer specifying which subexpression
969fe9b5
RS
2060of the match to fontify (0 means the entire matching text). The second
2061subelement, @var{facename}, specifies the face, as described above.
f9f59935
RS
2062
2063The last two values in @var{highlighter}, @var{override} and
bda7c6dd
RS
2064@var{laxmatch}, are flags. If @var{override} is @code{t}, this
2065element can override existing fontification made by previous elements
2066of @code{font-lock-keywords}. If it is @code{keep}, then each
2067character is fontified if it has not been fontified already by some
2068other element. If it is @code{prepend}, the face @var{facename} is
2069added to the beginning of the @code{font-lock-face} property. If it
2070is @code{append}, the face @var{facename} is added to the end of the
2071@code{font-lock-face} property.
f9f59935
RS
2072
2073If @var{laxmatch} is non-@code{nil}, it means there should be no error
2074if there is no subexpression numbered @var{subexp} in @var{matcher}.
99b62845
GM
2075Obviously, fontification of the subexpression numbered @var{subexp} will
2076not occur. However, fontification of other subexpressions (and other
2077regexps) will continue. If @var{laxmatch} is @code{nil}, and the
2078specified subexpression is missing, then an error is signalled which
2079terminates search-based fontification.
f9f59935
RS
2080
2081Here are some examples of elements of this kind, and what they do:
2082
2083@smallexample
2084;; @r{Highlight occurrences of either @samp{foo} or @samp{bar},}
2085;; @r{using @code{foo-bar-face}, even if they have already been highlighted.}
2086;; @r{@code{foo-bar-face} should be a variable whose value is a face.}
2087("foo\\|bar" 0 foo-bar-face t)
2088
8241495d 2089;; @r{Highlight the first subexpression within each occurrence}
f9f59935
RS
2090;; @r{that the function @code{fubar-match} finds,}
2091;; @r{using the face which is the value of @code{fubar-face}.}
2092(fubar-match 1 fubar-face)
2093@end smallexample
2094
2095@item (@var{matcher} @var{highlighters}@dots{})
2096This sort of element specifies several @var{highlighter} lists for a
2097single @var{matcher}. In order for this to be useful, each
2098@var{highlighter} should have a different value of @var{subexp}; that is,
2099each one should apply to a different subexpression of @var{matcher}.
2100
2101@ignore
2102@item (@var{matcher} . @var{anchored})
2103In this kind of element, @var{anchored} acts much like a
2104@var{highlighter}, but it is more complex and can specify multiple
2105successive searches.
2106
2107For highlighting single items, typically only @var{highlighter} is
2108required. However, if an item or (typically) items are to be
2109highlighted following the instance of another item (the anchor) then
2110@var{anchored} may be required.
2111
2112It has this format:
2113
2114@example
2115(@var{submatcher} @var{pre-match-form} @var{post-match-form} @var{highlighters}@dots{})
2116@end example
2117
2118@c I can't parse this text -- rms
2119where @var{submatcher} is much like @var{matcher}, with one
2120exception---see below. @var{pre-match-form} and @var{post-match-form}
2121are evaluated before the first, and after the last, instance
2122@var{anchored}'s @var{submatcher} is used. Therefore they can be used
a9f0a989 2123to initialize before, and cleanup after, @var{submatcher} is used.
f9f59935
RS
2124Typically, @var{pre-match-form} is used to move to some position
2125relative to the original @var{submatcher}, before starting with
2126@var{anchored}'s @var{submatcher}. @var{post-match-form} might be used
2127to move, before resuming with @var{anchored}'s parent's @var{matcher}.
2128
2129For example, an element of the form highlights (if not already highlighted):
2130
2131@example
2132("\\<anchor\\>" (0 anchor-face) ("\\<item\\>" nil nil (0 item-face)))
2133@end example
2134
2135Discrete occurrences of @samp{anchor} in the value of
2136@code{anchor-face}, and subsequent discrete occurrences of @samp{item}
2137(on the same line) in the value of @code{item-face}. (Here
2138@var{pre-match-form} and @var{post-match-form} are @code{nil}.
2139Therefore @samp{item} is initially searched for starting from the end of
2140the match of @samp{anchor}, and searching for subsequent instance of
2141@samp{anchor} resumes from where searching for @samp{item} concluded.)
2142
2143The above-mentioned exception is as follows. The limit of the
2144@var{submatcher} search defaults to the end of the line after
2145@var{pre-match-form} is evaluated. However, if @var{pre-match-form}
2146returns a position greater than the position after @var{pre-match-form}
2147is evaluated, that position is used as the limit of the search. It is
2148generally a bad idea to return a position greater than the end of the
2149line; in other words, the @var{submatcher} search should not span lines.
2150
2151@item (@var{matcher} @var{highlighters-or-anchoreds} ...)
2152@end ignore
2153
2154@item (eval . @var{form})
969fe9b5 2155Here @var{form} is an expression to be evaluated the first time
f9f59935 2156this value of @code{font-lock-keywords} is used in a buffer.
969fe9b5 2157Its value should have one of the forms described in this table.
f9f59935
RS
2158@end table
2159
2160@strong{Warning:} Do not design an element of @code{font-lock-keywords}
2161to match text which spans lines; this does not work reliably. While
2162@code{font-lock-fontify-buffer} handles multi-line patterns correctly,
2163updating when you edit the buffer does not, since it considers text one
8ba2808b
SM
2164line at a time. If you have patterns that typically only span one
2165line but can occasionally span two or three, such as
2166@samp{<title>...</title>}, you can ask font-lock to be more careful by
2167setting @code{font-lock-multiline} to @code{t}. But it still will not
2168work in all cases.
f9f59935 2169
f9f59935
RS
2170@node Other Font Lock Variables
2171@subsection Other Font Lock Variables
2172
2173 This section describes additional variables that a major mode
2174can set by means of @code{font-lock-defaults}.
2175
2176@defvar font-lock-keywords-only
2177Non-@code{nil} means Font Lock should not fontify comments or strings
969fe9b5
RS
2178syntactically; it should only fontify based on
2179@code{font-lock-keywords}.
f9f59935
RS
2180@end defvar
2181
2182@ignore
a9f0a989 2183Other variables include those for buffer-specialized fontification functions,
f9f59935
RS
2184`font-lock-fontify-buffer-function', `font-lock-unfontify-buffer-function',
2185`font-lock-fontify-region-function', `font-lock-unfontify-region-function',
2186`font-lock-inhibit-thing-lock' and `font-lock-maximum-size'.
2187@end ignore
2188
2189@defvar font-lock-keywords-case-fold-search
969fe9b5
RS
2190Non-@code{nil} means that regular expression matching for the sake of
2191@code{font-lock-keywords} should be case-insensitive.
f9f59935
RS
2192@end defvar
2193
969fe9b5
RS
2194@defvar font-lock-syntax-table
2195This variable specifies the syntax table to use for fontification of
2196comments and strings.
2197@end defvar
f9f59935 2198
969fe9b5
RS
2199@defvar font-lock-beginning-of-syntax-function
2200If this variable is non-@code{nil}, it should be a function to move
2201point back to a position that is syntactically at ``top level'' and
2202outside of strings or comments. Font Lock uses this when necessary
2203to get the right results for syntactic fontification.
f9f59935
RS
2204
2205This function is called with no arguments. It should leave point at the
2206beginning of any enclosing syntactic block. Typical values are
2207@code{beginning-of-line} (i.e., the start of the line is known to be
2208outside a syntactic block), or @code{beginning-of-defun} for programming
2209modes or @code{backward-paragraph} for textual modes (i.e., the
2210mode-dependent function is known to move outside a syntactic block).
2211
2212If the value is @code{nil}, the beginning of the buffer is used as a
969fe9b5
RS
2213position outside of a syntactic block. This cannot be wrong, but it can
2214be slow.
f9f59935
RS
2215@end defvar
2216
2217@defvar font-lock-mark-block-function
969fe9b5
RS
2218If this variable is non-@code{nil}, it should be a function that is
2219called with no arguments, to choose an enclosing range of text for
2220refontification for the command @kbd{M-g M-g}
2221(@code{font-lock-fontify-block}).
2222
2223The function should report its choice by placing the region around it.
2224A good choice is a range of text large enough to give proper results,
2225but not too large so that refontification becomes slow. Typical values
2226are @code{mark-defun} for programming modes or @code{mark-paragraph} for
2227textual modes.
f9f59935
RS
2228@end defvar
2229
fdba9ef4 2230@defvar font-lock-extra-managed-props
bda7c6dd
RS
2231Additional properties (other than @code{font-lock-face}) that are
2232being managed by Font Lock mode. Font Lock mode normally manages only
2233the @code{font-lock-face} property; if you want it to manage others as
2234well, you must specify them in a @var{facename} in
2235@code{font-lock-keywords} as well as adding them to this list.
fdba9ef4
RS
2236@end defvar
2237
8ba2808b
SM
2238@defvar font-lock-syntactic-face-function
2239A function to determine which face to use for a given syntactic
2240element (a string or a comment). The function is called with one
2241argument, the parse state at point returned by
2242@code{parse-partial-sexp}, and should return a face. The default
2243value returns @code{font-lock-comment-face} for comments and
2244@code{font-lock-string-face} for strings.
2245
2246This can be used to highlighting different kinds of strings or
2247comments differently. It is also sometimes abused together with
2248@code{font-lock-syntactic-keywords} to highlight elements that span
2249multiple lines, but this is too obscure to document in this manual.
2250@end defvar
2251
f9f59935
RS
2252@node Levels of Font Lock
2253@subsection Levels of Font Lock
2254
2255 Many major modes offer three different levels of fontification. You
2256can define multiple levels by using a list of symbols for @var{keywords}
2257in @code{font-lock-defaults}. Each symbol specifies one level of
2258fontification; it is up to the user to choose one of these levels. The
2259chosen level's symbol value is used to initialize
2260@code{font-lock-keywords}.
2261
969fe9b5
RS
2262 Here are the conventions for how to define the levels of
2263fontification:
2264
f9f59935
RS
2265@itemize @bullet
2266@item
2267Level 1: highlight function declarations, file directives (such as include or
2268import directives), strings and comments. The idea is speed, so only
2269the most important and top-level components are fontified.
2270
2271@item
969fe9b5
RS
2272Level 2: in addition to level 1, highlight all language keywords,
2273including type names that act like keywords, as well as named constant
2274values. The idea is that all keywords (either syntactic or semantic)
2275should be fontified appropriately.
f9f59935
RS
2276
2277@item
969fe9b5
RS
2278Level 3: in addition to level 2, highlight the symbols being defined in
2279function and variable declarations, and all builtin function names,
2280wherever they appear.
f9f59935
RS
2281@end itemize
2282
651f7556
CW
2283@node Precalculated Fontification
2284@subsection Precalculated Fontification
2285
2286In addition to using @code{font-lock-defaults} for search-based
2287fontification, you may use the special character property
2288@code{font-lock-face} (@pxref{Special Properties}). This property
2289acts just like the explicit @code{face} property, but its activation
2290is toggled when the user calls @kbd{M-x font-lock-mode}. Using
06862374 2291@code{font-lock-face} is especially convenient for special modes
651f7556
CW
2292which construct their text programmatically, such as
2293@code{list-buffers} and @code{occur}.
2294
0ab0c481
CW
2295If your mode does not use any of the other machinery of Font Lock
2296(i.e. it only uses the @code{font-lock-face} property), you can tell
2297Emacs not to load all of font-lock.el (unless it's already loaded), by
6fe50867
RS
2298setting the variable @code{font-lock-core-only} to non-@code{nil} as
2299part of the @code{font-lock-defaults} settings. Here is the canonical
2300way to do this:
0ab0c481
CW
2301
2302@example
2303(set (make-local-variable 'font-lock-defaults)
2304 '(nil t nil nil nil (font-lock-core-only . t)))
2305@end example
2306
f9f59935
RS
2307@node Faces for Font Lock
2308@subsection Faces for Font Lock
2309
2310 You can make Font Lock mode use any face, but several faces are
2311defined specifically for Font Lock mode. Each of these symbols is both
2312a face name, and a variable whose default value is the symbol itself.
2313Thus, the default value of @code{font-lock-comment-face} is
2314@code{font-lock-comment-face}. This means you can write
2315@code{font-lock-comment-face} in a context such as
2316@code{font-lock-keywords} where a face-name-valued expression is used.
2317
2318@table @code
2319@item font-lock-comment-face
2320@vindex font-lock-comment-face
f9f59935
RS
2321Used (typically) for comments.
2322
2323@item font-lock-string-face
2324@vindex font-lock-string-face
f9f59935
RS
2325Used (typically) for string constants.
2326
2327@item font-lock-keyword-face
2328@vindex font-lock-keyword-face
f9f59935
RS
2329Used (typically) for keywords---names that have special syntactic
2330significance, like @code{for} and @code{if} in C.
2331
2332@item font-lock-builtin-face
2333@vindex font-lock-builtin-face
f9f59935
RS
2334Used (typically) for built-in function names.
2335
2336@item font-lock-function-name-face
2337@vindex font-lock-function-name-face
f9f59935 2338Used (typically) for the name of a function being defined or declared,
177c0ea7 2339in a function definition or declaration.
f9f59935
RS
2340
2341@item font-lock-variable-name-face
2342@vindex font-lock-variable-name-face
f9f59935
RS
2343Used (typically) for the name of a variable being defined or declared,
2344in a variable definition or declaration.
2345
2346@item font-lock-type-face
2347@vindex font-lock-type-face
f9f59935
RS
2348Used (typically) for names of user-defined data types,
2349where they are defined and where they are used.
2350
2351@item font-lock-constant-face
2352@vindex font-lock-constant-face
f9f59935
RS
2353Used (typically) for constant names.
2354
c22c5da6
LK
2355@item font-lock-preprocessor-face
2356@vindex font-lock-preprocessor-face
fdba9ef4
RS
2357Used (typically) for preprocessor commands.
2358
f9f59935
RS
2359@item font-lock-warning-face
2360@vindex font-lock-warning-face
f9f59935
RS
2361Used (typically) for constructs that are peculiar, or that greatly
2362change the meaning of other text. For example, this is used for
2363@samp{;;;###autoload} cookies in Emacs Lisp, and for @code{#error}
2364directives in C.
2365@end table
2366
969fe9b5
RS
2367@node Syntactic Font Lock
2368@subsection Syntactic Font Lock
2369
2370 Font Lock mode can be used to update @code{syntax-table} properties
2371automatically. This is useful in languages for which a single syntax
2372table by itself is not sufficient.
2373
2374@defvar font-lock-syntactic-keywords
f8cecb20
DL
2375This variable enables and controls syntactic Font Lock. It is
2376normally set via @code{font-lock-defaults}. Its value should be a
2377list of elements of this form:
969fe9b5
RS
2378
2379@example
2380(@var{matcher} @var{subexp} @var{syntax} @var{override} @var{laxmatch})
2381@end example
2382
2383The parts of this element have the same meanings as in the corresponding
2384sort of element of @code{font-lock-keywords},
2385
2386@example
2387(@var{matcher} @var{subexp} @var{facename} @var{override} @var{laxmatch})
2388@end example
2389
2390However, instead of specifying the value @var{facename} to use for the
f8cecb20
DL
2391@code{face} property, it specifies the value @var{syntax} to use for
2392the @code{syntax-table} property. Here, @var{syntax} can be a string
2393(as taken by @code{modify-syntax-entry}), a syntax table, a cons cell
2394(as returned by @code{string-to-syntax}), or an expression whose value
2395is one of those two types. @var{override} cannot be @code{prepend} or
2396@code{append}.
2397
2398For example, an element of the form:
2399
2400@example
2401("\\$\\(#\\)" 1 ".")
2402@end example
2403
2404highlights syntactically a hash character when following a dollar
2405character, with a SYNTAX of @code{"."} (meaning punctuation syntax).
2406Assuming that the buffer syntax table specifies hash characters to
2407have comment start syntax, the element will only highlight hash
2408characters that do not follow dollar characters as comments
2409syntactically.
2410
2411An element of the form:
2412
2413@example
2414 ("\\('\\).\\('\\)"
2415 (1 "\"")
2416 (2 "\""))
2417@end example
2418
2419highlights syntactically both single quotes which surround a single
2420character, with a SYNTAX of @code{"\""} (meaning string quote syntax).
2421Assuming that the buffer syntax table does not specify single quotes
2422to have quote syntax, the element will only highlight single quotes of
2423the form @samp{'@var{c}'} as strings syntactically. Other forms, such
2424as @samp{foo'bar} or @samp{'fubar'}, will not be highlighted as
2425strings.
2426
969fe9b5
RS
2427@end defvar
2428
a44af9f2
RS
2429@node Hooks
2430@section Hooks
2431@cindex hooks
2432
2433 A @dfn{hook} is a variable where you can store a function or functions
2434to be called on a particular occasion by an existing program. Emacs
2435provides hooks for the sake of customization. Most often, hooks are set
a40d4712 2436up in the init file (@pxref{Init File}), but Lisp programs can set them also.
a44af9f2
RS
2437@xref{Standard Hooks}, for a list of standard hook variables.
2438
f9f59935 2439@cindex normal hook
a44af9f2 2440 Most of the hooks in Emacs are @dfn{normal hooks}. These variables
dd73b091
RS
2441contain lists of functions to be called with no arguments. When the
2442hook name ends in @samp{-hook}, that tells you it is normal. We try to
2443make all hooks normal, as much as possible, so that you can use them in
2444a uniform way.
2445
2446 Every major mode function is supposed to run a normal hook called the
2447@dfn{mode hook} as the last step of initialization. This makes it easy
2448for a user to customize the behavior of the mode, by overriding the
969fe9b5
RS
2449buffer-local variable assignments already made by the mode. But hooks
2450are used in other contexts too. For example, the hook
2451@code{suspend-hook} runs just before Emacs suspends itself
2452(@pxref{Suspending Emacs}).
a44af9f2
RS
2453
2454 The recommended way to add a hook function to a normal hook is by
2455calling @code{add-hook} (see below). The hook functions may be any of
da3178e2
RS
2456the valid kinds of functions that @code{funcall} accepts (@pxref{What
2457Is a Function}). Most normal hook variables are initially void;
2458@code{add-hook} knows how to deal with this. You can add hooks either
2459globally or buffer-locally with @code{add-hook}.
c22c5da6 2460
f9f59935 2461@cindex abnormal hook
dd73b091 2462 If the hook variable's name does not end with @samp{-hook}, that
a40d4712 2463indicates it is probably an @dfn{abnormal hook}. Then you should look at its
dd73b091
RS
2464documentation to see how to use the hook properly.
2465
2466 If the variable's name ends in @samp{-functions} or @samp{-hooks},
2467then the value is a list of functions, but it is abnormal in that either
2468these functions are called with arguments or their values are used in
2469some way. You can use @code{add-hook} to add a function to the list,
2470but you must take care in writing the function. (A few of these
89cda0c5
SM
2471variables, notably those ending in @samp{-hooks}, are actually
2472normal hooks which were named before we established the convention of
2473using @samp{-hook} for them.)
dd73b091
RS
2474
2475 If the variable's name ends in @samp{-function}, then its value
2476is just a single function, not a list of functions.
a44af9f2 2477
969fe9b5
RS
2478 Here's an example that uses a mode hook to turn on Auto Fill mode when
2479in Lisp Interaction mode:
a44af9f2
RS
2480
2481@example
2482(add-hook 'lisp-interaction-mode-hook 'turn-on-auto-fill)
a44af9f2
RS
2483@end example
2484
2485 At the appropriate time, Emacs uses the @code{run-hooks} function to
bfe721d1
KH
2486run particular hooks. This function calls the hook functions that have
2487been added with @code{add-hook}.
a44af9f2 2488
a40d4712 2489@defun run-hooks &rest hookvars
c22c5da6
LK
2490This function takes one or more normal hook variable names as
2491arguments, and runs each hook in turn. Each argument should be a
da3178e2
RS
2492symbol that is a normal hook variable. These arguments are processed
2493in the order specified.
a44af9f2
RS
2494
2495If a hook variable has a non-@code{nil} value, that value may be a
da3178e2
RS
2496function or a list of functions. (The former option is considered
2497obsolete.) If the value is a function (either a lambda expression or
2498a symbol with a function definition), it is called. If it is a list
2499that isn't a function, its elements are called, consecutively. All
2500the hook functions are called with no arguments.
a44af9f2 2501
bfe721d1 2502For example, here's how @code{emacs-lisp-mode} runs its mode hook:
a44af9f2
RS
2503
2504@example
2505(run-hooks 'emacs-lisp-mode-hook)
2506@end example
2507@end defun
2508
fdba9ef4
RS
2509@defun run-mode-hooks &rest hookvars
2510Like @code{run-hooks}, but is affected by the @code{delay-mode-hooks}
2511macro.
2512@end defun
2513
2514@defmac delay-mode-hooks body...
2515This macro executes the @var{body} forms but defers all calls to
2516@code{run-mode-hooks} within them until the end of @var{body}.
2517This macro enables a derived mode to arrange not to run
2518its parent modes' mode hooks until the end.
2519@end defmac
2520
a9f0a989 2521@defun run-hook-with-args hook &rest args
da3178e2
RS
2522This function is the way to run an abnormal hook and always call all
2523of the hook functions. It calls each of the hook functions one by
2524one, passing each of them the arguments @var{args}.
a9f0a989
RS
2525@end defun
2526
2527@defun run-hook-with-args-until-failure hook &rest args
c22c5da6
LK
2528This function is the way to run an abnormal hook until one of the hook
2529functions fails. It calls each of the hook functions, passing each of
2530them the arguments @var{args}, until some hook function returns
2531@code{nil}. It then stops and returns @code{nil}. If none of the
2532hook functions return @code{nil}, it returns a non-@code{nil} value.
a9f0a989
RS
2533@end defun
2534
2535@defun run-hook-with-args-until-success hook &rest args
c22c5da6
LK
2536This function is the way to run an abnormal hook until a hook function
2537succeeds. It calls each of the hook functions, passing each of them
2538the arguments @var{args}, until some hook function returns
2539non-@code{nil}. Then it stops, and returns whatever was returned by
2540the last hook function that was called. If all hook functions return
2541@code{nil}, it returns @code{nil} as well.
a9f0a989
RS
2542@end defun
2543
22697dac 2544@defun add-hook hook function &optional append local
a44af9f2 2545This function is the handy way to add function @var{function} to hook
da3178e2
RS
2546variable @var{hook}. You can use it for abnormal hooks as well as for
2547normal hooks. @var{function} can be any Lisp function that can accept
2548the proper number of arguments for @var{hook}. For example,
a44af9f2
RS
2549
2550@example
2551(add-hook 'text-mode-hook 'my-text-hook-function)
2552@end example
2553
2554@noindent
2555adds @code{my-text-hook-function} to the hook called @code{text-mode-hook}.
2556
da3178e2
RS
2557If @var{function} is already present in @var{hook} (comparing using
2558@code{equal}), then @code{add-hook} does not add it a second time.
de9f0bd9 2559
a44af9f2
RS
2560It is best to design your hook functions so that the order in which they
2561are executed does not matter. Any dependence on the order is ``asking
c22c5da6 2562for trouble''. However, the order is predictable: normally,
a44af9f2 2563@var{function} goes at the front of the hook list, so it will be
969fe9b5
RS
2564executed first (barring another @code{add-hook} call). If the optional
2565argument @var{append} is non-@code{nil}, the new hook function goes at
2566the end of the hook list and will be executed last.
22697dac 2567
c22c5da6
LK
2568If @var{local} is non-@code{nil}, that says to add @var{function} to
2569the buffer-local hook list instead of to the global hook list. If
2570needed, this makes the hook buffer-local and adds @code{t} to the
2571buffer-local value. The latter acts as a flag to run the hook
2572functions in the default value as well as in the local value.
a44af9f2
RS
2573@end defun
2574
22697dac 2575@defun remove-hook hook function &optional local
c22c5da6 2576This function removes @var{function} from the hook variable
da3178e2
RS
2577@var{hook}. It compares @var{function} with elements of @var{hook}
2578using @code{equal}, so it works for both symbols and lambda
2579expressions.
c44d2ced 2580
22697dac 2581If @var{local} is non-@code{nil}, that says to remove @var{function}
969fe9b5 2582from the buffer-local hook list instead of from the global hook list.
22697dac 2583@end defun
ab5796a9
MB
2584
2585@ignore
2586 arch-tag: 4c7bff41-36e6-4da6-9e7f-9b9289e27c8e
2587@end ignore