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