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