]> code.delx.au - gnu-emacs/blob - doc/lispref/modes.texi
Merge from emacs-24; up to 2012-04-21T14:12:27Z!sdl.web@gmail.com
[gnu-emacs] / doc / lispref / modes.texi
1 @c -*-texinfo-*-
2 @c This is part of the GNU Emacs Lisp Reference Manual.
3 @c Copyright (C) 1990-1995, 1998-1999, 2001-2012 Free Software Foundation, Inc.
4 @c See the file elisp.texi for copying conditions.
5 @node Modes, Documentation, Keymaps, Top
6 @chapter Major and Minor Modes
7 @cindex mode
8
9 A @dfn{mode} is a set of definitions that customize Emacs and can be
10 turned on and off while you edit. There are two varieties of modes:
11 @dfn{major modes}, which are mutually exclusive and used for editing
12 particular kinds of text, and @dfn{minor modes}, which provide features
13 that users can enable individually.
14
15 This chapter describes how to write both major and minor modes, how to
16 indicate them in the mode line, and how they run hooks supplied by the
17 user. For related topics such as keymaps and syntax tables, see
18 @ref{Keymaps}, and @ref{Syntax Tables}.
19
20 @menu
21 * Hooks:: How to use hooks; how to write code that provides hooks.
22 * Major Modes:: Defining major modes.
23 * Minor Modes:: Defining minor modes.
24 * Mode Line Format:: Customizing the text that appears in the mode line.
25 * Imenu:: Providing a menu of definitions made in a buffer.
26 * Font Lock Mode:: How modes can highlight text according to syntax.
27 * Auto-Indentation:: How to teach Emacs to indent for a major mode.
28 * Desktop Save Mode:: How modes can have buffer state saved between
29 Emacs sessions.
30 @end menu
31
32 @node Hooks
33 @section Hooks
34 @cindex hooks
35
36 A @dfn{hook} is a variable where you can store a function or functions
37 to be called on a particular occasion by an existing program. Emacs
38 provides hooks for the sake of customization. Most often, hooks are set
39 up in the init file (@pxref{Init File}), but Lisp programs can set them also.
40 @xref{Standard Hooks}, for a list of some standard hook variables.
41
42 @cindex normal hook
43 Most of the hooks in Emacs are @dfn{normal hooks}. These variables
44 contain lists of functions to be called with no arguments. By
45 convention, whenever the hook name ends in @samp{-hook}, that tells
46 you it is normal. We try to make all hooks normal, as much as
47 possible, so that you can use them in a uniform way.
48
49 Every major mode command is supposed to run a normal hook called the
50 @dfn{mode hook} as one of the last steps of initialization. This makes
51 it easy for a user to customize the behavior of the mode, by overriding
52 the buffer-local variable assignments already made by the mode. Most
53 minor mode functions also run a mode hook at the end. But hooks are
54 used in other contexts too. For example, the hook @code{suspend-hook}
55 runs just before Emacs suspends itself (@pxref{Suspending Emacs}).
56
57 The recommended way to add a hook function to a hook is by calling
58 @code{add-hook} (@pxref{Setting Hooks}). The hook functions may be any
59 of the valid kinds of functions that @code{funcall} accepts (@pxref{What
60 Is a Function}). Most normal hook variables are initially void;
61 @code{add-hook} knows how to deal with this. You can add hooks either
62 globally or buffer-locally with @code{add-hook}.
63
64 @cindex abnormal hook
65 If the hook variable's name does not end with @samp{-hook}, that
66 indicates it is probably an @dfn{abnormal hook}. That means the hook
67 functions are called with arguments, or their return values are used
68 in some way. The hook's documentation says how the functions are
69 called. You can use @code{add-hook} to add a function to an abnormal
70 hook, but you must write the function to follow the hook's calling
71 convention.
72
73 By convention, abnormal hook names end in @samp{-functions} or
74 @samp{-hooks}. If the variable's name ends in @samp{-function}, then
75 its value is just a single function, not a list of functions.
76
77 @menu
78 * Running Hooks:: How to run a hook.
79 * Setting Hooks:: How to put functions on a hook, or remove them.
80 @end menu
81
82 @node Running Hooks
83 @subsection Running Hooks
84
85 In this section, we document the @code{run-hooks} function, which is
86 used to run a normal hook. We also document the functions for running
87 various kinds of abnormal hooks.
88
89 @defun run-hooks &rest hookvars
90 This function takes one or more normal hook variable names as
91 arguments, and runs each hook in turn. Each argument should be a
92 symbol that is a normal hook variable. These arguments are processed
93 in the order specified.
94
95 If a hook variable has a non-@code{nil} value, that value should be a
96 list of functions. @code{run-hooks} calls all the functions, one by
97 one, with no arguments.
98
99 The hook variable's value can also be a single function---either a
100 lambda expression or a symbol with a function definition---which
101 @code{run-hooks} calls. But this usage is obsolete.
102
103 If the hook variable is buffer-local, the buffer-local variable will
104 be used instead of the global variable. However, if the buffer-local
105 variable contains the element @code{t}, the global hook variable will
106 be run as well.
107 @end defun
108
109 @defun run-hook-with-args hook &rest args
110 This function runs an abnormal hook by calling all the hook functions in
111 @var{hook}, passing each one the arguments @var{args}.
112 @end defun
113
114 @defun run-hook-with-args-until-failure hook &rest args
115 This function runs an abnormal hook by calling each hook function in
116 turn, stopping if one of them ``fails'' by returning @code{nil}. Each
117 hook function is passed the arguments @var{args}. If this function
118 stops because one of the hook functions fails, it returns @code{nil};
119 otherwise it returns a non-@code{nil} value.
120 @end defun
121
122 @defun run-hook-with-args-until-success hook &rest args
123 This function runs an abnormal hook by calling each hook function,
124 stopping if one of them ``succeeds'' by returning a non-@code{nil}
125 value. Each hook function is passed the arguments @var{args}. If this
126 function stops because one of the hook functions returns a
127 non-@code{nil} value, it returns that value; otherwise it returns
128 @code{nil}.
129 @end defun
130
131 @defmac with-wrapper-hook hook args &rest body
132 This macro runs the abnormal hook @code{hook} as a series of nested
133 ``wrapper functions'' around the @var{body} forms. The effect is
134 similar to nested @code{around} advices (@pxref{Around-Advice}).
135
136 Each hook function should accept an argument list consisting of a function
137 @var{fun}, followed by the additional arguments listed in @var{args}.
138 The first hook function is passed a function @var{fun} that, if it is
139 called with arguments @var{args}, performs @var{body} (i.e., the default
140 operation). The @var{fun} passed to each successive hook function is
141 constructed from all the preceding hook functions (and @var{body}); if
142 this @var{fun} is called with arguments @var{args}, it does what the
143 @code{with-wrapper-hook} call would if the preceding hook functions were
144 the only ones in @var{hook}.
145
146 Each hook function may call its @var{fun} argument as many times as it
147 wishes, including never. In that case, such a hook function acts to
148 replace the default definition altogether, and any preceding hook
149 functions. Of course, a subsequent hook function may do the same thing.
150
151 Each hook function definition is used to construct the @var{fun} passed
152 to the next hook function in @var{hook}, if any. The last or
153 ``outermost'' @var{fun} is called once to produce the overall effect.
154
155 When might you want to use a wrapper hook? The function
156 @code{filter-buffer-substring} illustrates a common case. There is a
157 basic functionality, performed by @var{body}---in this case, to extract
158 a buffer-substring. Then any number of hook functions can act in
159 sequence to modify that string, before returning the final result.
160 A wrapper-hook also allows for a hook function to completely replace the
161 default definition (by not calling @var{fun}).
162 @end defmac
163
164 @defun run-hook-wrapped hook wrap-function &rest args
165 This function is similar to @code{run-hook-with-args-until-success}.
166 Like that function, it runs the functions on the abnormal hook
167 @code{hook}, stopping at the first one that returns non-@code{nil}.
168 Instead of calling the hook functions directly, though, it actually
169 calls @code{wrap-function} with arguments @code{fun} and @code{args}.
170 @end defun
171
172 @node Setting Hooks
173 @subsection Setting Hooks
174
175 Here's an example that uses a mode hook to turn on Auto Fill mode when
176 in Lisp Interaction mode:
177
178 @example
179 (add-hook 'lisp-interaction-mode-hook 'auto-fill-mode)
180 @end example
181
182 @defun add-hook hook function &optional append local
183 This function is the handy way to add function @var{function} to hook
184 variable @var{hook}. You can use it for abnormal hooks as well as for
185 normal hooks. @var{function} can be any Lisp function that can accept
186 the proper number of arguments for @var{hook}. For example,
187
188 @example
189 (add-hook 'text-mode-hook 'my-text-hook-function)
190 @end example
191
192 @noindent
193 adds @code{my-text-hook-function} to the hook called @code{text-mode-hook}.
194
195 If @var{function} is already present in @var{hook} (comparing using
196 @code{equal}), then @code{add-hook} does not add it a second time.
197
198 If @var{function} has a non-@code{nil} property
199 @code{permanent-local-hook}, then @code{kill-all-local-variables} (or
200 changing major modes) won't delete it from the hook variable's local
201 value.
202
203 For a normal hook, hook functions should be designed so that the order
204 in which they are executed does not matter. Any dependence on the order
205 is asking for trouble. However, the order is predictable: normally,
206 @var{function} goes at the front of the hook list, so it is executed
207 first (barring another @code{add-hook} call). If the optional argument
208 @var{append} is non-@code{nil}, the new hook function goes at the end of
209 the hook list and is executed last.
210
211 @code{add-hook} can handle the cases where @var{hook} is void or its
212 value is a single function; it sets or changes the value to a list of
213 functions.
214
215 If @var{local} is non-@code{nil}, that says to add @var{function} to the
216 buffer-local hook list instead of to the global hook list. This makes
217 the hook buffer-local and adds @code{t} to the buffer-local value. The
218 latter acts as a flag to run the hook functions in the default value as
219 well as in the local value.
220 @end defun
221
222 @defun remove-hook hook function &optional local
223 This function removes @var{function} from the hook variable
224 @var{hook}. It compares @var{function} with elements of @var{hook}
225 using @code{equal}, so it works for both symbols and lambda
226 expressions.
227
228 If @var{local} is non-@code{nil}, that says to remove @var{function}
229 from the buffer-local hook list instead of from the global hook list.
230 @end defun
231
232 @node Major Modes
233 @section Major Modes
234 @cindex major mode
235
236 @cindex major mode command
237 Major modes specialize Emacs for editing particular kinds of text.
238 Each buffer has one major mode at a time. Every major mode is
239 associated with a @dfn{major mode command}, whose name should end in
240 @samp{-mode}. This command takes care of switching to that mode in the
241 current buffer, by setting various buffer-local variables such as a
242 local keymap. @xref{Major Mode Conventions}.
243
244 The least specialized major mode is called @dfn{Fundamental mode},
245 which has no mode-specific definitions or variable settings.
246
247 @deffn Command fundamental-mode
248 This is the major mode command for Fundamental mode. Unlike other mode
249 commands, it does @emph{not} run any mode hooks (@pxref{Major Mode
250 Conventions}), since you are not supposed to customize this mode.
251 @end deffn
252
253 The easiest way to write a major mode is to use the macro
254 @code{define-derived-mode}, which sets up the new mode as a variant of
255 an existing major mode. @xref{Derived Modes}. We recommend using
256 @code{define-derived-mode} even if the new mode is not an obvious
257 derivative of another mode, as it automatically enforces many coding
258 conventions for you. @xref{Basic Major Modes}, for common modes to
259 derive from.
260
261 The standard GNU Emacs Lisp directory tree contains the code for
262 several major modes, in files such as @file{text-mode.el},
263 @file{texinfo.el}, @file{lisp-mode.el}, and @file{rmail.el}. You can
264 study these libraries to see how modes are written.
265
266 @defopt major-mode
267 The buffer-local value of this variable holds the symbol for the current
268 major mode. Its default value holds the default major mode for new
269 buffers. The standard default value is @code{fundamental-mode}.
270
271 If the default value is @code{nil}, then whenever Emacs creates a new
272 buffer via a command such as @kbd{C-x b} (@code{switch-to-buffer}), the
273 new buffer is put in the major mode of the previously current buffer.
274 As an exception, if the major mode of the previous buffer has a
275 @code{mode-class} symbol property with value @code{special}, the new
276 buffer is put in Fundamental mode (@pxref{Major Mode Conventions}).
277 @end defopt
278
279 @menu
280 * Major Mode Conventions:: Coding conventions for keymaps, etc.
281 * Auto Major Mode:: How Emacs chooses the major mode automatically.
282 * Mode Help:: Finding out how to use a mode.
283 * Derived Modes:: Defining a new major mode based on another major
284 mode.
285 * Basic Major Modes:: Modes that other modes are often derived from.
286 * Mode Hooks:: Hooks run at the end of major mode functions.
287 * Tabulated List Mode:: Parent mode for buffers containing tabulated data.
288 * Generic Modes:: Defining a simple major mode that supports
289 comment syntax and Font Lock mode.
290 * Example Major Modes:: Text mode and Lisp modes.
291 @end menu
292
293 @node Major Mode Conventions
294 @subsection Major Mode Conventions
295 @cindex major mode conventions
296 @cindex conventions for writing major modes
297
298 The code for every major mode should follow various coding
299 conventions, including conventions for local keymap and syntax table
300 initialization, function and variable names, and hooks.
301
302 If you use the @code{define-derived-mode} macro, it will take care of
303 many of these conventions automatically. @xref{Derived Modes}. Note
304 also that Fundamental mode is an exception to many of these conventions,
305 because it represents the default state of Emacs.
306
307 The following list of conventions is only partial. Each major mode
308 should aim for consistency in general with other Emacs major modes, as
309 this makes Emacs as a whole more coherent. It is impossible to list
310 here all the possible points where this issue might come up; if the
311 Emacs developers point out an area where your major mode deviates from
312 the usual conventions, please make it compatible.
313
314 @itemize @bullet
315 @item
316 Define a major mode command whose name ends in @samp{-mode}. When
317 called with no arguments, this command should switch to the new mode in
318 the current buffer by setting up the keymap, syntax table, and
319 buffer-local variables in an existing buffer. It should not change the
320 buffer's contents.
321
322 @item
323 Write a documentation string for this command that describes the special
324 commands available in this mode. @xref{Mode Help}.
325
326 The documentation string may include the special documentation
327 substrings, @samp{\[@var{command}]}, @samp{\@{@var{keymap}@}}, and
328 @samp{\<@var{keymap}>}, which allow the help display to adapt
329 automatically to the user's own key bindings. @xref{Keys in
330 Documentation}.
331
332 @item
333 The major mode command should start by calling
334 @code{kill-all-local-variables}. This runs the normal hook
335 @code{change-major-mode-hook}, then gets rid of the buffer-local
336 variables of the major mode previously in effect. @xref{Creating
337 Buffer-Local}.
338
339 @item
340 The major mode command should set the variable @code{major-mode} to the
341 major mode command symbol. This is how @code{describe-mode} discovers
342 which documentation to print.
343
344 @item
345 The major mode command should set the variable @code{mode-name} to the
346 ``pretty'' name of the mode, usually a string (but see @ref{Mode Line
347 Data}, for other possible forms). The name of the mode appears
348 in the mode line.
349
350 @item
351 @cindex functions in modes
352 Since all global names are in the same name space, all the global
353 variables, constants, and functions that are part of the mode should
354 have names that start with the major mode name (or with an abbreviation
355 of it if the name is long). @xref{Coding Conventions}.
356
357 @item
358 In a major mode for editing some kind of structured text, such as a
359 programming language, indentation of text according to structure is
360 probably useful. So the mode should set @code{indent-line-function}
361 to a suitable function, and probably customize other variables
362 for indentation. @xref{Auto-Indentation}.
363
364 @item
365 @cindex keymaps in modes
366 The major mode should usually have its own keymap, which is used as the
367 local keymap in all buffers in that mode. The major mode command should
368 call @code{use-local-map} to install this local map. @xref{Active
369 Keymaps}, for more information.
370
371 This keymap should be stored permanently in a global variable named
372 @code{@var{modename}-mode-map}. Normally the library that defines the
373 mode sets this variable.
374
375 @xref{Tips for Defining}, for advice about how to write the code to set
376 up the mode's keymap variable.
377
378 @item
379 The key sequences bound in a major mode keymap should usually start with
380 @kbd{C-c}, followed by a control character, a digit, or @kbd{@{},
381 @kbd{@}}, @kbd{<}, @kbd{>}, @kbd{:} or @kbd{;}. The other punctuation
382 characters are reserved for minor modes, and ordinary letters are
383 reserved for users.
384
385 A major mode can also rebind the keys @kbd{M-n}, @kbd{M-p} and
386 @kbd{M-s}. The bindings for @kbd{M-n} and @kbd{M-p} should normally
387 be some kind of ``moving forward and backward'', but this does not
388 necessarily mean cursor motion.
389
390 It is legitimate for a major mode to rebind a standard key sequence if
391 it provides a command that does ``the same job'' in a way better
392 suited to the text this mode is used for. For example, a major mode
393 for editing a programming language might redefine @kbd{C-M-a} to
394 ``move to the beginning of a function'' in a way that works better for
395 that language.
396
397 It is also legitimate for a major mode to rebind a standard key
398 sequence whose standard meaning is rarely useful in that mode. For
399 instance, minibuffer modes rebind @kbd{M-r}, whose standard meaning is
400 rarely of any use in the minibuffer. Major modes such as Dired or
401 Rmail that do not allow self-insertion of text can reasonably redefine
402 letters and other printing characters as special commands.
403
404 @item
405 Major modes for editing text should not define @key{RET} to do
406 anything other than insert a newline. However, it is ok for
407 specialized modes for text that users don't directly edit, such as
408 Dired and Info modes, to redefine @key{RET} to do something entirely
409 different.
410
411 @item
412 Major modes should not alter options that are primarily a matter of user
413 preference, such as whether Auto-Fill mode is enabled. Leave this to
414 each user to decide. However, a major mode should customize other
415 variables so that Auto-Fill mode will work usefully @emph{if} the user
416 decides to use it.
417
418 @item
419 @cindex syntax tables in modes
420 The mode may have its own syntax table or may share one with other
421 related modes. If it has its own syntax table, it should store this in
422 a variable named @code{@var{modename}-mode-syntax-table}. @xref{Syntax
423 Tables}.
424
425 @item
426 If the mode handles a language that has a syntax for comments, it should
427 set the variables that define the comment syntax. @xref{Options for
428 Comments,, Options Controlling Comments, emacs, The GNU Emacs Manual}.
429
430 @item
431 @cindex abbrev tables in modes
432 The mode may have its own abbrev table or may share one with other
433 related modes. If it has its own abbrev table, it should store this
434 in a variable named @code{@var{modename}-mode-abbrev-table}. If the
435 major mode command defines any abbrevs itself, it should pass @code{t}
436 for the @var{system-flag} argument to @code{define-abbrev}.
437 @xref{Defining Abbrevs}.
438
439 @item
440 The mode should specify how to do highlighting for Font Lock mode, by
441 setting up a buffer-local value for the variable
442 @code{font-lock-defaults} (@pxref{Font Lock Mode}).
443
444 @item
445 Each face that the mode defines should, if possible, inherit from an
446 existing Emacs face. @xref{Basic Faces}, and @ref{Faces for Font Lock}.
447
448 @item
449 The mode should specify how Imenu should find the definitions or
450 sections of a buffer, by setting up a buffer-local value for the
451 variable @code{imenu-generic-expression}, for the two variables
452 @code{imenu-prev-index-position-function} and
453 @code{imenu-extract-index-name-function}, or for the variable
454 @code{imenu-create-index-function} (@pxref{Imenu}).
455
456 @item
457 The mode can specify a local value for
458 @code{eldoc-documentation-function} to tell ElDoc mode how to handle
459 this mode.
460
461 @item
462 The mode can specify how to complete various keywords by adding one or
463 more buffer-local entries to the special hook
464 @code{completion-at-point-functions}. @xref{Completion in Buffers}.
465
466 @item
467 @cindex buffer-local variables in modes
468 To make a buffer-local binding for an Emacs customization variable, use
469 @code{make-local-variable} in the major mode command, not
470 @code{make-variable-buffer-local}. The latter function would make the
471 variable local to every buffer in which it is subsequently set, which
472 would affect buffers that do not use this mode. It is undesirable for a
473 mode to have such global effects. @xref{Buffer-Local Variables}.
474
475 With rare exceptions, the only reasonable way to use
476 @code{make-variable-buffer-local} in a Lisp package is for a variable
477 which is used only within that package. Using it on a variable used by
478 other packages would interfere with them.
479
480 @item
481 @cindex mode hook
482 @cindex major mode hook
483 Each major mode should have a normal @dfn{mode hook} named
484 @code{@var{modename}-mode-hook}. The very last thing the major mode command
485 should do is to call @code{run-mode-hooks}. This runs the normal
486 hook @code{change-major-mode-after-body-hook}, the mode hook,
487 and then the normal hook @code{after-change-major-mode-hook}.
488 @xref{Mode Hooks}.
489
490 @item
491 The major mode command may start by calling some other major mode
492 command (called the @dfn{parent mode}) and then alter some of its
493 settings. A mode that does this is called a @dfn{derived mode}. The
494 recommended way to define one is to use the @code{define-derived-mode}
495 macro, but this is not required. Such a mode should call the parent
496 mode command inside a @code{delay-mode-hooks} form. (Using
497 @code{define-derived-mode} does this automatically.) @xref{Derived
498 Modes}, and @ref{Mode Hooks}.
499
500 @item
501 If something special should be done if the user switches a buffer from
502 this mode to any other major mode, this mode can set up a buffer-local
503 value for @code{change-major-mode-hook} (@pxref{Creating Buffer-Local}).
504
505 @item
506 If this mode is appropriate only for specially-prepared text produced by
507 the mode itself (rather than by the user typing at the keyboard or by an
508 external file), then the major mode command symbol should have a
509 property named @code{mode-class} with value @code{special}, put on as
510 follows:
511
512 @kindex mode-class @r{(property)}
513 @cindex @code{special} modes
514 @example
515 (put 'funny-mode 'mode-class 'special)
516 @end example
517
518 @noindent
519 This tells Emacs that new buffers created while the current buffer is in
520 Funny mode should not be put in Funny mode, even though the default
521 value of @code{major-mode} is @code{nil}. By default, the value of
522 @code{nil} for @code{major-mode} means to use the current buffer's major
523 mode when creating new buffers (@pxref{Auto Major Mode}), but with such
524 @code{special} modes, Fundamental mode is used instead. Modes such as
525 Dired, Rmail, and Buffer List use this feature.
526
527 The function @code{view-buffer} does not enable View mode in buffers
528 whose mode-class is special, because such modes usually provide their
529 own View-like bindings.
530
531 The @code{define-derived-mode} macro automatically marks the derived
532 mode as special if the parent mode is special. Special mode is a
533 convenient parent for such modes to inherit from; @xref{Basic Major
534 Modes}.
535
536 @item
537 If you want to make the new mode the default for files with certain
538 recognizable names, add an element to @code{auto-mode-alist} to select
539 the mode for those file names (@pxref{Auto Major Mode}). If you
540 define the mode command to autoload, you should add this element in
541 the same file that calls @code{autoload}. If you use an autoload
542 cookie for the mode command, you can also use an autoload cookie for
543 the form that adds the element (@pxref{autoload cookie}). If you do
544 not autoload the mode command, it is sufficient to add the element in
545 the file that contains the mode definition.
546
547 @item
548 @cindex mode loading
549 The top-level forms in the file defining the mode should be written so
550 that they may be evaluated more than once without adverse consequences.
551 For instance, use @code{defvar} or @code{defcustom} to set mode-related
552 variables, so that they are not reinitialized if they already have a
553 value (@pxref{Defining Variables}).
554
555 @end itemize
556
557 @node Auto Major Mode
558 @subsection How Emacs Chooses a Major Mode
559 @cindex major mode, automatic selection
560
561 When Emacs visits a file, it automatically selects a major mode for
562 the buffer based on information in the file name or in the file itself.
563 It also processes local variables specified in the file text.
564
565 @deffn Command normal-mode &optional find-file
566 This function establishes the proper major mode and buffer-local variable
567 bindings for the current buffer. First it calls @code{set-auto-mode}
568 (see below), then it runs @code{hack-local-variables} to parse, and
569 bind or evaluate as appropriate, the file's local variables
570 (@pxref{File Local Variables}).
571
572 If the @var{find-file} argument to @code{normal-mode} is non-@code{nil},
573 @code{normal-mode} assumes that the @code{find-file} function is calling
574 it. In this case, it may process local variables in the @samp{-*-}
575 line or at the end of the file. The variable
576 @code{enable-local-variables} controls whether to do so. @xref{File
577 Variables, , Local Variables in Files, emacs, The GNU Emacs Manual},
578 for the syntax of the local variables section of a file.
579
580 If you run @code{normal-mode} interactively, the argument
581 @var{find-file} is normally @code{nil}. In this case,
582 @code{normal-mode} unconditionally processes any file local variables.
583
584 The function calls @code{set-auto-mode} to choose a major mode. If this
585 does not specify a mode, the buffer stays in the major mode determined
586 by the default value of @code{major-mode} (see below).
587
588 @cindex file mode specification error
589 @code{normal-mode} uses @code{condition-case} around the call to the
590 major mode command, so errors are caught and reported as a @samp{File
591 mode specification error}, followed by the original error message.
592 @end deffn
593
594 @defun set-auto-mode &optional keep-mode-if-same
595 @cindex visited file mode
596 This function selects the major mode that is appropriate for the
597 current buffer. It bases its decision (in order of precedence) on the
598 @w{@samp{-*-}} line, on any @samp{mode:} local variable near the end of
599 a file, on the @w{@samp{#!}} line (using @code{interpreter-mode-alist}),
600 on the text at the beginning of the buffer (using
601 @code{magic-mode-alist}), and finally on the visited file name (using
602 @code{auto-mode-alist}). @xref{Choosing Modes, , How Major Modes are
603 Chosen, emacs, The GNU Emacs Manual}. If @code{enable-local-variables}
604 is @code{nil}, @code{set-auto-mode} does not check the @w{@samp{-*-}}
605 line, or near the end of the file, for any mode tag.
606
607 @vindex inhibit-local-variables-regexps
608 There are some file types where it is not appropriate to scan the file
609 contents for a mode specifier. For example, a tar archive may happen to
610 contain, near the end of the file, a member file that has a local
611 variables section specifying a mode for that particular file. This
612 should not be applied to the containing tar file. Similarly, a tiff
613 image file might just happen to contain a first line that seems to
614 match the @w{@samp{-*-}} pattern. For these reasons, both these file
615 extensions are members of the list @var{inhibit-local-variables-regexps}.
616 Add patterns to this list to prevent Emacs searching them for local
617 variables of any kind (not just mode specifiers).
618
619 If @var{keep-mode-if-same} is non-@code{nil}, this function does not
620 call the mode command if the buffer is already in the proper major
621 mode. For instance, @code{set-visited-file-name} sets this to
622 @code{t} to avoid killing buffer local variables that the user may
623 have set.
624 @end defun
625
626 @defun set-buffer-major-mode buffer
627 This function sets the major mode of @var{buffer} to the default value of
628 @code{major-mode}; if that is @code{nil}, it uses the
629 current buffer's major mode (if that is suitable). As an exception,
630 if @var{buffer}'s name is @file{*scratch*}, it sets the mode to
631 @code{initial-major-mode}.
632
633 The low-level primitives for creating buffers do not use this function,
634 but medium-level commands such as @code{switch-to-buffer} and
635 @code{find-file-noselect} use it whenever they create buffers.
636 @end defun
637
638 @defopt initial-major-mode
639 @cindex @file{*scratch*}
640 The value of this variable determines the major mode of the initial
641 @file{*scratch*} buffer. The value should be a symbol that is a major
642 mode command. The default value is @code{lisp-interaction-mode}.
643 @end defopt
644
645 @defvar interpreter-mode-alist
646 This variable specifies major modes to use for scripts that specify a
647 command interpreter in a @samp{#!} line. Its value is an alist with
648 elements of the form @code{(@var{interpreter} . @var{mode})}; for
649 example, @code{("perl" . perl-mode)} is one element present by
650 default. The element says to use mode @var{mode} if the file
651 specifies an interpreter which matches @var{interpreter}.
652 @end defvar
653
654 @defvar magic-mode-alist
655 This variable's value is an alist with elements of the form
656 @code{(@var{regexp} . @var{function})}, where @var{regexp} is a
657 regular expression and @var{function} is a function or @code{nil}.
658 After visiting a file, @code{set-auto-mode} calls @var{function} if
659 the text at the beginning of the buffer matches @var{regexp} and
660 @var{function} is non-@code{nil}; if @var{function} is @code{nil},
661 @code{auto-mode-alist} gets to decide the mode.
662 @end defvar
663
664 @defvar magic-fallback-mode-alist
665 This works like @code{magic-mode-alist}, except that it is handled
666 only if @code{auto-mode-alist} does not specify a mode for this file.
667 @end defvar
668
669 @defvar auto-mode-alist
670 This variable contains an association list of file name patterns
671 (regular expressions) and corresponding major mode commands. Usually,
672 the file name patterns test for suffixes, such as @samp{.el} and
673 @samp{.c}, but this need not be the case. An ordinary element of the
674 alist looks like @code{(@var{regexp} . @var{mode-function})}.
675
676 For example,
677
678 @smallexample
679 @group
680 (("\\`/tmp/fol/" . text-mode)
681 ("\\.texinfo\\'" . texinfo-mode)
682 ("\\.texi\\'" . texinfo-mode)
683 @end group
684 @group
685 ("\\.el\\'" . emacs-lisp-mode)
686 ("\\.c\\'" . c-mode)
687 ("\\.h\\'" . c-mode)
688 @dots{})
689 @end group
690 @end smallexample
691
692 When you visit a file whose expanded file name (@pxref{File Name
693 Expansion}), with version numbers and backup suffixes removed using
694 @code{file-name-sans-versions} (@pxref{File Name Components}), matches
695 a @var{regexp}, @code{set-auto-mode} calls the corresponding
696 @var{mode-function}. This feature enables Emacs to select the proper
697 major mode for most files.
698
699 If an element of @code{auto-mode-alist} has the form @code{(@var{regexp}
700 @var{function} t)}, then after calling @var{function}, Emacs searches
701 @code{auto-mode-alist} again for a match against the portion of the file
702 name that did not match before. This feature is useful for
703 uncompression packages: an entry of the form @code{("\\.gz\\'"
704 @var{function} t)} can uncompress the file and then put the uncompressed
705 file in the proper mode according to the name sans @samp{.gz}.
706
707 Here is an example of how to prepend several pattern pairs to
708 @code{auto-mode-alist}. (You might use this sort of expression in your
709 init file.)
710
711 @smallexample
712 @group
713 (setq auto-mode-alist
714 (append
715 ;; @r{File name (within directory) starts with a dot.}
716 '(("/\\.[^/]*\\'" . fundamental-mode)
717 ;; @r{File name has no dot.}
718 ("/[^\\./]*\\'" . fundamental-mode)
719 ;; @r{File name ends in @samp{.C}.}
720 ("\\.C\\'" . c++-mode))
721 auto-mode-alist))
722 @end group
723 @end smallexample
724 @end defvar
725
726 @node Mode Help
727 @subsection Getting Help about a Major Mode
728 @cindex mode help
729 @cindex help for major mode
730 @cindex documentation for major mode
731
732 The @code{describe-mode} function provides information about major
733 modes. It is normally bound to @kbd{C-h m}. It uses the value of the
734 variable @code{major-mode} (@pxref{Major Modes}), which is why every
735 major mode command needs to set that variable.
736
737 @deffn Command describe-mode
738 This function displays the documentation of the current major mode.
739
740 The @code{describe-mode} function calls the @code{documentation}
741 function using the value of @code{major-mode} as an argument. Thus, it
742 displays the documentation string of the major mode command.
743 (@xref{Accessing Documentation}.)
744 @end deffn
745
746 @node Derived Modes
747 @subsection Defining Derived Modes
748 @cindex derived mode
749
750 The recommended way to define a new major mode is to derive it from an
751 existing one using @code{define-derived-mode}. If there is no closely
752 related mode, you should inherit from either @code{text-mode},
753 @code{special-mode}, or @code{prog-mode}. @xref{Basic Major Modes}. If
754 none of these are suitable, you can inherit from @code{fundamental-mode}
755 (@pxref{Major Modes}).
756
757 @defmac define-derived-mode variant parent name docstring keyword-args@dots{} body@dots{}
758 This macro defines @var{variant} as a major mode command, using
759 @var{name} as the string form of the mode name. @var{variant} and
760 @var{parent} should be unquoted symbols.
761
762 The new command @var{variant} is defined to call the function
763 @var{parent}, then override certain aspects of that parent mode:
764
765 @itemize @bullet
766 @item
767 The new mode has its own sparse keymap, named
768 @code{@var{variant}-map}. @code{define-derived-mode}
769 makes the parent mode's keymap the parent of the new map, unless
770 @code{@var{variant}-map} is already set and already has a parent.
771
772 @item
773 The new mode has its own syntax table, kept in the variable
774 @code{@var{variant}-syntax-table}, unless you override this using the
775 @code{:syntax-table} keyword (see below). @code{define-derived-mode}
776 makes the parent mode's syntax-table the parent of
777 @code{@var{variant}-syntax-table}, unless the latter is already set
778 and already has a parent different from the standard syntax table.
779
780 @item
781 The new mode has its own abbrev table, kept in the variable
782 @code{@var{variant}-abbrev-table}, unless you override this using the
783 @code{:abbrev-table} keyword (see below).
784
785 @item
786 The new mode has its own mode hook, @code{@var{variant}-hook}. It
787 runs this hook, after running the hooks of its ancestor modes, with
788 @code{run-mode-hooks}, as the last thing it does. @xref{Mode Hooks}.
789 @end itemize
790
791 In addition, you can specify how to override other aspects of
792 @var{parent} with @var{body}. The command @var{variant}
793 evaluates the forms in @var{body} after setting up all its usual
794 overrides, just before running the mode hooks.
795
796 If @var{parent} has a non-@code{nil} @code{mode-class} symbol
797 property, then @code{define-derived-mode} sets the @code{mode-class}
798 property of @var{variant} to the same value. This ensures, for
799 example, that if @var{parent} is a special mode, then @var{variant} is
800 also a special mode (@pxref{Major Mode Conventions}).
801
802 You can also specify @code{nil} for @var{parent}. This gives the new
803 mode no parent. Then @code{define-derived-mode} behaves as described
804 above, but, of course, omits all actions connected with @var{parent}.
805
806 The argument @var{docstring} specifies the documentation string for the
807 new mode. @code{define-derived-mode} adds some general information
808 about the mode's hook, followed by the mode's keymap, at the end of this
809 documentation string. If you omit @var{docstring},
810 @code{define-derived-mode} generates a documentation string.
811
812 The @var{keyword-args} are pairs of keywords and values. The values
813 are evaluated. The following keywords are currently supported:
814
815 @table @code
816 @item :syntax-table
817 You can use this to explicitly specify a syntax table for the new
818 mode. If you specify a @code{nil} value, the new mode uses the same
819 syntax table as @var{parent}, or the standard syntax table if
820 @var{parent} is @code{nil}. (Note that this does @emph{not} follow
821 the convention used for non-keyword arguments that a @code{nil} value
822 is equivalent with not specifying the argument.)
823
824 @item :abbrev-table
825 You can use this to explicitly specify an abbrev table for the new
826 mode. If you specify a @code{nil} value, the new mode uses the same
827 abbrev table as @var{parent}, or @code{fundamental-mode-abbrev-table}
828 if @var{parent} is @code{nil}. (Again, a @code{nil} value is
829 @emph{not} equivalent to not specifying this keyword.)
830
831 @item :group
832 If this is specified, the value should be the customization group for
833 this mode. (Not all major modes have one.) Only the (still
834 experimental and unadvertised) command @code{customize-mode} currently
835 uses this. @code{define-derived-mode} does @emph{not} automatically
836 define the specified customization group.
837 @end table
838
839 Here is a hypothetical example:
840
841 @example
842 (define-derived-mode hypertext-mode
843 text-mode "Hypertext"
844 "Major mode for hypertext.
845 \\@{hypertext-mode-map@}"
846 (setq case-fold-search nil))
847
848 (define-key hypertext-mode-map
849 [down-mouse-3] 'do-hyper-link)
850 @end example
851
852 Do not write an @code{interactive} spec in the definition;
853 @code{define-derived-mode} does that automatically.
854 @end defmac
855
856 @defun derived-mode-p &rest modes
857 This function returns non-@code{nil} if the current major mode is
858 derived from any of the major modes given by the symbols @var{modes}.
859 @end defun
860
861 @node Basic Major Modes
862 @subsection Basic Major Modes
863
864 Apart from Fundamental mode, there are three major modes that other
865 major modes commonly derive from: Text mode, Prog mode, and Special
866 mode. While Text mode is useful in its own right (e.g. for editing
867 files ending in @file{.txt}), Prog mode and Special mode exist mainly to
868 let other modes derive from them.
869
870 @vindex prog-mode-hook
871 As far as possible, new major modes should be derived, either directly
872 or indirectly, from one of these three modes. One reason is that this
873 allows users to customize a single mode hook
874 (e.g. @code{prog-mode-hook}) for an entire family of relevant modes
875 (e.g. all programming language modes).
876
877 @deffn Command text-mode
878 Text mode is a major mode for editing human languages. It defines the
879 @samp{"} and @samp{\} characters as having punctuation syntax
880 (@pxref{Syntax Class Table}), and binds @kbd{M-@key{TAB}} to
881 @code{ispell-complete-word} (@pxref{Spelling,,, emacs, The GNU Emacs
882 Manual}).
883
884 An example of a major mode derived from Text mode is HTML mode.
885 @xref{HTML Mode,,SGML and HTML Modes, emacs, The GNU Emacs Manual}.
886 @end deffn
887
888 @deffn Command prog-mode
889 Prog mode is a basic major mode for buffers containing programming
890 language source code. Most of the programming language major modes
891 built into Emacs are derived from it.
892
893 Prog mode binds @code{parse-sexp-ignore-comments} to @code{t}
894 (@pxref{Motion via Parsing}) and @code{bidi-paragraph-direction} to
895 @code{left-to-right} (@pxref{Bidirectional Display}).
896 @end deffn
897
898 @deffn Command special-mode
899 Special mode is a basic major mode for buffers containing text that is
900 produced specially by Emacs, rather than directly from a file. Major
901 modes derived from Special mode are given a @code{mode-class} property
902 of @code{special} (@pxref{Major Mode Conventions}).
903
904 Special mode sets the buffer to read-only. Its keymap defines several
905 common bindings, including @kbd{q} for @code{quit-window}, @kbd{z} for
906 @code{kill-this-buffer}, and @kbd{g} for @code{revert-buffer}
907 (@pxref{Reverting}).
908
909 An example of a major mode derived from Special mode is Buffer Menu
910 mode, which is used by the @file{*Buffer List*} buffer. @xref{List
911 Buffers,,Listing Existing Buffers, emacs, The GNU Emacs Manual}.
912 @end deffn
913
914 In addition, modes for buffers of tabulated data can inherit from
915 Tabulated List mode, which is in turn derived from Special mode.
916 @xref{Tabulated List Mode}.
917
918 @node Mode Hooks
919 @subsection Mode Hooks
920
921 Every major mode command should finish by running the mode-independent
922 normal hook @code{change-major-mode-after-body-hook}, its mode hook,
923 and the normal hook @code{after-change-major-mode-hook}.
924 It does this by calling @code{run-mode-hooks}. If the major mode is a
925 derived mode, that is if it calls another major mode (the parent mode)
926 in its body, it should do this inside @code{delay-mode-hooks} so that
927 the parent won't run these hooks itself. Instead, the derived mode's
928 call to @code{run-mode-hooks} runs the parent's mode hook too.
929 @xref{Major Mode Conventions}.
930
931 Emacs versions before Emacs 22 did not have @code{delay-mode-hooks}.
932 Versions before 24 did not have @code{change-major-mode-after-body-hook}.
933 When user-implemented major modes do not use @code{run-mode-hooks} and
934 have not been updated to use these newer features, they won't entirely
935 follow these conventions: they may run the parent's mode hook too early,
936 or fail to run @code{after-change-major-mode-hook}. If you encounter
937 such a major mode, please correct it to follow these conventions.
938
939 When you defined a major mode using @code{define-derived-mode}, it
940 automatically makes sure these conventions are followed. If you
941 define a major mode ``by hand'', not using @code{define-derived-mode},
942 use the following functions to handle these conventions automatically.
943
944 @defun run-mode-hooks &rest hookvars
945 Major modes should run their mode hook using this function. It is
946 similar to @code{run-hooks} (@pxref{Hooks}), but it also runs
947 @code{change-major-mode-after-body-hook} and
948 @code{after-change-major-mode-hook}.
949
950 When this function is called during the execution of a
951 @code{delay-mode-hooks} form, it does not run the hooks immediately.
952 Instead, it arranges for the next call to @code{run-mode-hooks} to run
953 them.
954 @end defun
955
956 @defmac delay-mode-hooks body@dots{}
957 When one major mode command calls another, it should do so inside of
958 @code{delay-mode-hooks}.
959
960 This macro executes @var{body}, but tells all @code{run-mode-hooks}
961 calls during the execution of @var{body} to delay running their hooks.
962 The hooks will actually run during the next call to
963 @code{run-mode-hooks} after the end of the @code{delay-mode-hooks}
964 construct.
965 @end defmac
966
967 @defvar change-major-mode-after-body-hook
968 This is a normal hook run by @code{run-mode-hooks}. It is run before
969 the mode hooks.
970 @end defvar
971
972 @defvar after-change-major-mode-hook
973 This is a normal hook run by @code{run-mode-hooks}. It is run at the
974 very end of every properly-written major mode command.
975 @end defvar
976
977 @node Tabulated List Mode
978 @subsection Tabulated List mode
979 @cindex Tabulated List mode
980
981 Tabulated List mode is a major mode for displaying tabulated data,
982 i.e.@: data consisting of @dfn{entries}, each entry occupying one row of
983 text with its contents divided into columns. Tabulated List mode
984 provides facilities for pretty-printing rows and columns, and sorting
985 the rows according to the values in each column. It is derived from
986 Special mode (@pxref{Basic Major Modes}).
987
988 Tabulated List mode is intended to be used as a parent mode by a more
989 specialized major mode. Examples include Process Menu mode
990 (@pxref{Process Information}) and Package Menu mode (@pxref{Package
991 Menu,,, emacs, The GNU Emacs Manual}).
992
993 @findex tabulated-list-mode
994 Such a derived mode should use @code{define-derived-mode} in the usual
995 way, specifying @code{tabulated-list-mode} as the second argument
996 (@pxref{Derived Modes}). The body of the @code{define-derived-mode}
997 form should specify the format of the tabulated data, by assigning
998 values to the variables documented below; then, it should call the
999 function @code{tabulated-list-init-header} to initialize the header
1000 line.
1001
1002 The derived mode should also define a @dfn{listing command}. This,
1003 not the mode command, is what the user calls (e.g.@: @kbd{M-x
1004 list-processes}). The listing command should create or switch to a
1005 buffer, turn on the derived mode, specify the tabulated data, and
1006 finally call @code{tabulated-list-print} to populate the buffer.
1007
1008 @defvar tabulated-list-format
1009 This buffer-local variable specifies the format of the Tabulated List
1010 data. Its value should be a vector. Each element of the vector
1011 represents a data column, and should be a list @code{(@var{name}
1012 @var{width} @var{sort})}, where
1013
1014 @itemize
1015 @item
1016 @var{name} is the column's name (a string).
1017
1018 @item
1019 @var{width} is the width to reserve for the column (an integer). This
1020 is meaningless for the last column, which runs to the end of each line.
1021
1022 @item
1023 @var{sort} specifies how to sort entries by the column. If @code{nil},
1024 the column cannot be used for sorting. If @code{t}, the column is
1025 sorted by comparing string values. Otherwise, this should be a
1026 predicate function for @code{sort} (@pxref{Rearrangement}), which
1027 accepts two arguments with the same form as the elements of
1028 @code{tabulated-list-entries} (see below).
1029 @end itemize
1030 @end defvar
1031
1032 @defvar tabulated-list-entries
1033 This buffer-local variable specifies the entries displayed in the
1034 Tabulated List buffer. Its value should be either a list, or a
1035 function.
1036
1037 If the value is a list, each list element corresponds to one entry, and
1038 should have the form @w{@code{(@var{id} @var{contents})}}, where
1039
1040 @itemize
1041 @item
1042 @var{id} is either @code{nil}, or a Lisp object that identifies the
1043 entry. If the latter, the cursor stays on the ``same'' entry when
1044 re-sorting entries. Comparison is done with @code{equal}.
1045
1046 @item
1047 @var{contents} is a vector with the same number of elements as
1048 @code{tabulated-list-format}. Each vector element is either a string,
1049 which is inserted into the buffer as-is, or a list @code{(@var{label}
1050 . @var{properties})}, which means to insert a text button by calling
1051 @code{insert-text-button} with @var{label} and @var{properties} as
1052 arguments (@pxref{Making Buttons}).
1053
1054 There should be no newlines in any of these strings.
1055 @end itemize
1056
1057 Otherwise, the value should be a function which returns a list of the
1058 above form when called with no arguments.
1059 @end defvar
1060
1061 @defvar tabulated-list-revert-hook
1062 This normal hook is run prior to reverting a Tabulated List buffer. A
1063 derived mode can add a function to this hook to recompute
1064 @code{tabulated-list-entries}.
1065 @end defvar
1066
1067 @defvar tabulated-list-printer
1068 The value of this variable is the function called to insert an entry at
1069 point, including its terminating newline. The function should accept
1070 two arguments, @var{id} and @var{contents}, having the same meanings as
1071 in @code{tabulated-list-entries}. The default value is a function which
1072 inserts an entry in a straightforward way; a mode which uses Tabulated
1073 List mode in a more complex way can specify another function.
1074 @end defvar
1075
1076 @defvar tabulated-list-sort-key
1077 The value of this variable specifies the current sort key for the
1078 Tabulated List buffer. If it is @code{nil}, no sorting is done.
1079 Otherwise, it should have the form @code{(@var{name} . @var{flip})},
1080 where @var{name} is a string matching one of the column names in
1081 @code{tabulated-list-format}, and @var{flip}, if non-@code{nil}, means
1082 to invert the sort order.
1083 @end defvar
1084
1085 @defun tabulated-list-init-header
1086 This function computes and sets @code{header-line-format} for the
1087 Tabulated List buffer (@pxref{Header Lines}), and assigns a keymap to
1088 the header line to allow sort entries by clicking on column headers.
1089
1090 Modes derived from Tabulated List mode should call this after setting
1091 the above variables (in particular, only after setting
1092 @code{tabulated-list-format}).
1093 @end defun
1094
1095 @defun tabulated-list-print &optional remember-pos
1096 This function populates the current buffer with entries. It should be
1097 called by the listing command. It erases the buffer, sorts the entries
1098 specified by @code{tabulated-list-entries} according to
1099 @code{tabulated-list-sort-key}, then calls the function specified by
1100 @code{tabulated-list-printer} to insert each entry.
1101
1102 If the optional argument @var{remember-pos} is non-@code{nil}, this
1103 function looks for the @var{id} element on the current line, if any, and
1104 tries to move to that entry after all the entries are (re)inserted.
1105 @end defun
1106
1107 @node Generic Modes
1108 @subsection Generic Modes
1109 @cindex generic mode
1110
1111 @dfn{Generic modes} are simple major modes with basic support for
1112 comment syntax and Font Lock mode. To define a generic mode, use the
1113 macro @code{define-generic-mode}. See the file @file{generic-x.el}
1114 for some examples of the use of @code{define-generic-mode}.
1115
1116 @defmac define-generic-mode mode comment-list keyword-list font-lock-list auto-mode-list function-list &optional docstring
1117 This macro defines a generic mode command named @var{mode} (a symbol,
1118 not quoted). The optional argument @var{docstring} is the
1119 documentation for the mode command. If you do not supply it,
1120 @code{define-generic-mode} generates one by default.
1121
1122 The argument @var{comment-list} is a list in which each element is
1123 either a character, a string of one or two characters, or a cons cell.
1124 A character or a string is set up in the mode's syntax table as a
1125 ``comment starter''. If the entry is a cons cell, the @sc{car} is set
1126 up as a ``comment starter'' and the @sc{cdr} as a ``comment ender''.
1127 (Use @code{nil} for the latter if you want comments to end at the end
1128 of the line.) Note that the syntax table mechanism has limitations
1129 about what comment starters and enders are actually possible.
1130 @xref{Syntax Tables}.
1131
1132 The argument @var{keyword-list} is a list of keywords to highlight
1133 with @code{font-lock-keyword-face}. Each keyword should be a string.
1134 Meanwhile, @var{font-lock-list} is a list of additional expressions to
1135 highlight. Each element of this list should have the same form as an
1136 element of @code{font-lock-keywords}. @xref{Search-based
1137 Fontification}.
1138
1139 The argument @var{auto-mode-list} is a list of regular expressions to
1140 add to the variable @code{auto-mode-alist}. They are added by the execution
1141 of the @code{define-generic-mode} form, not by expanding the macro call.
1142
1143 Finally, @var{function-list} is a list of functions for the mode
1144 command to call for additional setup. It calls these functions just
1145 before it runs the mode hook variable @code{@var{mode}-hook}.
1146 @end defmac
1147
1148 @node Example Major Modes
1149 @subsection Major Mode Examples
1150
1151 Text mode is perhaps the simplest mode besides Fundamental mode.
1152 Here are excerpts from @file{text-mode.el} that illustrate many of
1153 the conventions listed above:
1154
1155 @smallexample
1156 @group
1157 ;; @r{Create the syntax table for this mode.}
1158 (defvar text-mode-syntax-table
1159 (let ((st (make-syntax-table)))
1160 (modify-syntax-entry ?\" ". " st)
1161 (modify-syntax-entry ?\\ ". " st)
1162 ;; Add `p' so M-c on `hello' leads to `Hello', not `hello'.
1163 (modify-syntax-entry ?' "w p" st)
1164 st)
1165 "Syntax table used while in `text-mode'.")
1166 @end group
1167
1168 ;; @r{Create the keymap for this mode.}
1169 @group
1170 (defvar text-mode-map
1171 (let ((map (make-sparse-keymap)))
1172 (define-key map "\e\t" 'ispell-complete-word)
1173 map)
1174 "Keymap for `text-mode'.
1175 Many other modes, such as `mail-mode', `outline-mode' and
1176 `indented-text-mode', inherit all the commands defined in this map.")
1177 @end group
1178 @end smallexample
1179
1180 Here is how the actual mode command is defined now:
1181
1182 @smallexample
1183 @group
1184 (define-derived-mode text-mode nil "Text"
1185 "Major mode for editing text written for humans to read.
1186 In this mode, paragraphs are delimited only by blank or white lines.
1187 You can thus get the full benefit of adaptive filling
1188 (see the variable `adaptive-fill-mode').
1189 \\@{text-mode-map@}
1190 Turning on Text mode runs the normal hook `text-mode-hook'."
1191 @end group
1192 @group
1193 (set (make-local-variable 'text-mode-variant) t)
1194 (set (make-local-variable 'require-final-newline)
1195 mode-require-final-newline)
1196 (set (make-local-variable 'indent-line-function) 'indent-relative))
1197 @end group
1198 @end smallexample
1199
1200 @noindent
1201 (The last line is redundant nowadays, since @code{indent-relative} is
1202 the default value, and we'll delete it in a future version.)
1203
1204 @cindex @file{lisp-mode.el}
1205 The three Lisp modes (Lisp mode, Emacs Lisp mode, and Lisp Interaction
1206 mode) have more features than Text mode and the code is correspondingly
1207 more complicated. Here are excerpts from @file{lisp-mode.el} that
1208 illustrate how these modes are written.
1209
1210 Here is how the Lisp mode syntax and abbrev tables are defined:
1211
1212 @cindex syntax table example
1213 @smallexample
1214 @group
1215 ;; @r{Create mode-specific table variables.}
1216 (defvar lisp-mode-abbrev-table nil)
1217 (define-abbrev-table 'lisp-mode-abbrev-table ())
1218
1219 (defvar lisp-mode-syntax-table
1220 (let ((table (copy-syntax-table emacs-lisp-mode-syntax-table)))
1221 (modify-syntax-entry ?\[ "_ " table)
1222 (modify-syntax-entry ?\] "_ " table)
1223 (modify-syntax-entry ?# "' 14" table)
1224 (modify-syntax-entry ?| "\" 23bn" table)
1225 table)
1226 "Syntax table used in `lisp-mode'.")
1227 @end group
1228 @end smallexample
1229
1230 The three modes for Lisp share much of their code. For instance,
1231 each calls the following function to set various variables:
1232
1233 @smallexample
1234 @group
1235 (defun lisp-mode-variables (&optional lisp-syntax keywords-case-insensitive)
1236 (when lisp-syntax
1237 (set-syntax-table lisp-mode-syntax-table))
1238 (setq local-abbrev-table lisp-mode-abbrev-table)
1239 @dots{}
1240 @end group
1241 @end smallexample
1242
1243 @noindent
1244 Amongst other things, this function sets up the @code{comment-start}
1245 variable to handle Lisp comments:
1246
1247 @smallexample
1248 @group
1249 (make-local-variable 'comment-start)
1250 (setq comment-start ";")
1251 @dots{}
1252 @end group
1253 @end smallexample
1254
1255 Each of the different Lisp modes has a slightly different keymap. For
1256 example, Lisp mode binds @kbd{C-c C-z} to @code{run-lisp}, but the other
1257 Lisp modes do not. However, all Lisp modes have some commands in
1258 common. The following code sets up the common commands:
1259
1260 @smallexample
1261 @group
1262 (defvar lisp-mode-shared-map
1263 (let ((map (make-sparse-keymap)))
1264 (define-key map "\e\C-q" 'indent-sexp)
1265 (define-key map "\177" 'backward-delete-char-untabify)
1266 map)
1267 "Keymap for commands shared by all sorts of Lisp modes.")
1268 @end group
1269 @end smallexample
1270
1271 @noindent
1272 And here is the code to set up the keymap for Lisp mode:
1273
1274 @smallexample
1275 @group
1276 (defvar lisp-mode-map
1277 (let ((map (make-sparse-keymap))
1278 (menu-map (make-sparse-keymap "Lisp")))
1279 (set-keymap-parent map lisp-mode-shared-map)
1280 (define-key map "\e\C-x" 'lisp-eval-defun)
1281 (define-key map "\C-c\C-z" 'run-lisp)
1282 @dots{}
1283 map)
1284 "Keymap for ordinary Lisp mode.
1285 All commands in `lisp-mode-shared-map' are inherited by this map.")
1286 @end group
1287 @end smallexample
1288
1289 @noindent
1290 Finally, here is the major mode command for Lisp mode:
1291
1292 @smallexample
1293 @group
1294 (define-derived-mode lisp-mode prog-mode "Lisp"
1295 "Major mode for editing Lisp code for Lisps other than GNU Emacs Lisp.
1296 Commands:
1297 Delete converts tabs to spaces as it moves back.
1298 Blank lines separate paragraphs. Semicolons start comments.
1299
1300 \\@{lisp-mode-map@}
1301 Note that `run-lisp' may be used either to start an inferior Lisp job
1302 or to switch back to an existing one.
1303 @end group
1304
1305 @group
1306 Entry to this mode calls the value of `lisp-mode-hook'
1307 if that value is non-nil."
1308 (lisp-mode-variables nil t)
1309 (set (make-local-variable 'find-tag-default-function) 'lisp-find-tag-default)
1310 (make-local-variable 'comment-start-skip)
1311 (setq comment-start-skip
1312 "\\(\\(^\\|[^\\\\\n]\\)\\(\\\\\\\\\\)*\\)\\(;+\\|#|\\) *")
1313 (setq imenu-case-fold-search t))
1314 @end group
1315 @end smallexample
1316
1317 @node Minor Modes
1318 @section Minor Modes
1319 @cindex minor mode
1320
1321 A @dfn{minor mode} provides optional features that users may enable or
1322 disable independently of the choice of major mode. Minor modes can be
1323 enabled individually or in combination.
1324
1325 Most minor modes implement features that are independent of the major
1326 mode, and can thus be used with most major modes. For example, Auto
1327 Fill mode works with any major mode that permits text insertion. A few
1328 minor modes, however, are specific to a particular major mode. For
1329 example, Diff Auto Refine mode is a minor mode that is intended to be
1330 used only with Diff mode.
1331
1332 Ideally, a minor mode should have its desired effect regardless of the
1333 other minor modes in effect. It should be possible to activate and
1334 deactivate minor modes in any order.
1335
1336 @defvar minor-mode-list
1337 The value of this variable is a list of all minor mode commands.
1338 @end defvar
1339
1340 @menu
1341 * Minor Mode Conventions:: Tips for writing a minor mode.
1342 * Keymaps and Minor Modes:: How a minor mode can have its own keymap.
1343 * Defining Minor Modes:: A convenient facility for defining minor modes.
1344 @end menu
1345
1346 @node Minor Mode Conventions
1347 @subsection Conventions for Writing Minor Modes
1348 @cindex minor mode conventions
1349 @cindex conventions for writing minor modes
1350
1351 There are conventions for writing minor modes just as there are for
1352 major modes. These conventions are described below. The easiest way to
1353 follow them is to use the macro @code{define-minor-mode}.
1354 @xref{Defining Minor Modes}.
1355
1356 @itemize @bullet
1357 @item
1358 @cindex mode variable
1359 Define a variable whose name ends in @samp{-mode}. We call this the
1360 @dfn{mode variable}. The minor mode command should set this variable.
1361 The value will be @code{nil} is the mode is disabled, and non-@code{nil}
1362 if the mode is enabled. The variable should be buffer-local if the
1363 minor mode is buffer-local.
1364
1365 This variable is used in conjunction with the @code{minor-mode-alist} to
1366 display the minor mode name in the mode line. It also determines
1367 whether the minor mode keymap is active, via @code{minor-mode-map-alist}
1368 (@pxref{Controlling Active Maps}). Individual commands or hooks can
1369 also check its value.
1370
1371 @item
1372 Define a command, called the @dfn{mode command}, whose name is the same
1373 as the mode variable. Its job is to set the value of the mode variable,
1374 plus anything else that needs to be done to actually enable or disable
1375 the mode's features.
1376
1377 The mode command should accept one optional argument. If called
1378 interactively with no prefix argument, it should toggle the mode
1379 (i.e.@: enable if it is disabled, and disable if it is enabled). If
1380 called interactively with a prefix argument, it should enable the mode
1381 if the argument is positive and disable it otherwise.
1382
1383 If the mode command is called from Lisp (i.e.@: non-interactively), it
1384 should enable the mode if the argument is omitted or @code{nil}; it
1385 should toggle the mode if the argument is the symbol @code{toggle};
1386 otherwise it should treat the argument in the same way as for an
1387 interactive call with a numeric prefix argument, as described above.
1388
1389 The following example shows how to implement this behavior (it is
1390 similar to the code generated by the @code{define-minor-mode} macro):
1391
1392 @example
1393 (interactive (list (or current-prefix-arg 'toggle)))
1394 (let ((enable (if (eq arg 'toggle)
1395 (not foo-mode) ; @r{this mode's mode variable}
1396 (> (prefix-numeric-value arg) 0))))
1397 (if enable
1398 @var{do-enable}
1399 @var{do-disable}))
1400 @end example
1401
1402 The reason for this somewhat complex behavior is that it lets users
1403 easily toggle the minor mode interactively, and also lets the minor mode
1404 be easily enabled in a mode hook, like this:
1405
1406 @example
1407 (add-hook 'text-mode-hook 'foo-mode)
1408 @end example
1409
1410 @noindent
1411 This behaves correctly whether or not @code{foo-mode} was already
1412 enabled, since the @code{foo-mode} mode command unconditionally enables
1413 the minor mode when it is called from Lisp with no argument. Disabling
1414 a minor mode in a mode hook is a little uglier:
1415
1416 @example
1417 (add-hook 'text-mode-hook (lambda () (foo-mode -1)))
1418 @end example
1419
1420 @noindent
1421 However, this is not very commonly done.
1422
1423 @item
1424 Add an element to @code{minor-mode-alist} for each minor mode
1425 (@pxref{Definition of minor-mode-alist}), if you want to indicate the
1426 minor mode in the mode line. This element should be a list of the
1427 following form:
1428
1429 @smallexample
1430 (@var{mode-variable} @var{string})
1431 @end smallexample
1432
1433 Here @var{mode-variable} is the variable that controls enabling of the
1434 minor mode, and @var{string} is a short string, starting with a space,
1435 to represent the mode in the mode line. These strings must be short so
1436 that there is room for several of them at once.
1437
1438 When you add an element to @code{minor-mode-alist}, use @code{assq} to
1439 check for an existing element, to avoid duplication. For example:
1440
1441 @smallexample
1442 @group
1443 (unless (assq 'leif-mode minor-mode-alist)
1444 (push '(leif-mode " Leif") minor-mode-alist))
1445 @end group
1446 @end smallexample
1447
1448 @noindent
1449 or like this, using @code{add-to-list} (@pxref{List Variables}):
1450
1451 @smallexample
1452 @group
1453 (add-to-list 'minor-mode-alist '(leif-mode " Leif"))
1454 @end group
1455 @end smallexample
1456 @end itemize
1457
1458 In addition, several major mode conventions apply to minor modes as
1459 well: those regarding the names of global symbols, the use of a hook at
1460 the end of the initialization function, and the use of keymaps and other
1461 tables.
1462
1463 The minor mode should, if possible, support enabling and disabling via
1464 Custom (@pxref{Customization}). To do this, the mode variable should be
1465 defined with @code{defcustom}, usually with @code{:type 'boolean}. If
1466 just setting the variable is not sufficient to enable the mode, you
1467 should also specify a @code{:set} method which enables the mode by
1468 invoking the mode command. Note in the variable's documentation string
1469 that setting the variable other than via Custom may not take effect.
1470 Also, mark the definition with an autoload cookie (@pxref{autoload
1471 cookie}), and specify a @code{:require} so that customizing the variable
1472 will load the library that defines the mode. For example:
1473
1474 @smallexample
1475 @group
1476 ;;;###autoload
1477 (defcustom msb-mode nil
1478 "Toggle msb-mode.
1479 Setting this variable directly does not take effect;
1480 use either \\[customize] or the function `msb-mode'."
1481 :set 'custom-set-minor-mode
1482 :initialize 'custom-initialize-default
1483 :version "20.4"
1484 :type 'boolean
1485 :group 'msb
1486 :require 'msb)
1487 @end group
1488 @end smallexample
1489
1490 @node Keymaps and Minor Modes
1491 @subsection Keymaps and Minor Modes
1492
1493 Each minor mode can have its own keymap, which is active when the mode
1494 is enabled. To set up a keymap for a minor mode, add an element to the
1495 alist @code{minor-mode-map-alist}. @xref{Definition of minor-mode-map-alist}.
1496
1497 @cindex @code{self-insert-command}, minor modes
1498 One use of minor mode keymaps is to modify the behavior of certain
1499 self-inserting characters so that they do something else as well as
1500 self-insert. (Another way to customize @code{self-insert-command} is
1501 through @code{post-self-insert-hook}. Apart from this, the facilities
1502 for customizing @code{self-insert-command} are limited to special cases,
1503 designed for abbrevs and Auto Fill mode. Do not try substituting your
1504 own definition of @code{self-insert-command} for the standard one. The
1505 editor command loop handles this function specially.)
1506
1507 The key sequences bound in a minor mode should consist of @kbd{C-c}
1508 followed by one of @kbd{.,/?`'"[]\|~!#$%^&*()-_+=}. (The other
1509 punctuation characters are reserved for major modes.)
1510
1511 @node Defining Minor Modes
1512 @subsection Defining Minor Modes
1513
1514 The macro @code{define-minor-mode} offers a convenient way of
1515 implementing a mode in one self-contained definition.
1516
1517 @defmac define-minor-mode mode doc [init-value [lighter [keymap]]] keyword-args@dots{} body@dots{}
1518 This macro defines a new minor mode whose name is @var{mode} (a
1519 symbol). It defines a command named @var{mode} to toggle the minor
1520 mode, with @var{doc} as its documentation string.
1521
1522 The toggle command takes one optional (prefix) argument.
1523 If called interactively with no argument it toggles the mode on or off.
1524 A positive prefix argument enables the mode, any other prefix argument
1525 disables it. From Lisp, an argument of @code{toggle} toggles the mode,
1526 whereas an omitted or @code{nil} argument enables the mode.
1527 This makes it easy to enable the minor mode in a major mode hook, for example.
1528 If @var{doc} is nil, the macro supplies a default documentation string
1529 explaining the above.
1530
1531 By default, it also defines a variable named @var{mode}, which is set to
1532 @code{t} or @code{nil} by enabling or disabling the mode. The variable
1533 is initialized to @var{init-value}. Except in unusual circumstances
1534 (see below), this value must be @code{nil}.
1535
1536 The string @var{lighter} says what to display in the mode line
1537 when the mode is enabled; if it is @code{nil}, the mode is not displayed
1538 in the mode line.
1539
1540 The optional argument @var{keymap} specifies the keymap for the minor
1541 mode. If non-@code{nil}, it should be a variable name (whose value is
1542 a keymap), a keymap, or an alist of the form
1543
1544 @example
1545 (@var{key-sequence} . @var{definition})
1546 @end example
1547
1548 @noindent
1549 where each @var{key-sequence} and @var{definition} are arguments
1550 suitable for passing to @code{define-key} (@pxref{Changing Key
1551 Bindings}). If @var{keymap} is a keymap or an alist, this also
1552 defines the variable @code{@var{mode}-map}.
1553
1554 The above three arguments @var{init-value}, @var{lighter}, and
1555 @var{keymap} can be (partially) omitted when @var{keyword-args} are
1556 used. The @var{keyword-args} consist of keywords followed by
1557 corresponding values. A few keywords have special meanings:
1558
1559 @table @code
1560 @item :group @var{group}
1561 Custom group name to use in all generated @code{defcustom} forms.
1562 Defaults to @var{mode} without the possible trailing @samp{-mode}.
1563 @strong{Warning:} don't use this default group name unless you have
1564 written a @code{defgroup} to define that group properly. @xref{Group
1565 Definitions}.
1566
1567 @item :global @var{global}
1568 If non-@code{nil}, this specifies that the minor mode should be global
1569 rather than buffer-local. It defaults to @code{nil}.
1570
1571 One of the effects of making a minor mode global is that the
1572 @var{mode} variable becomes a customization variable. Toggling it
1573 through the Customize interface turns the mode on and off, and its
1574 value can be saved for future Emacs sessions (@pxref{Saving
1575 Customizations,,, emacs, The GNU Emacs Manual}. For the saved
1576 variable to work, you should ensure that the @code{define-minor-mode}
1577 form is evaluated each time Emacs starts; for packages that are not
1578 part of Emacs, the easiest way to do this is to specify a
1579 @code{:require} keyword.
1580
1581 @item :init-value @var{init-value}
1582 This is equivalent to specifying @var{init-value} positionally.
1583
1584 @item :lighter @var{lighter}
1585 This is equivalent to specifying @var{lighter} positionally.
1586
1587 @item :keymap @var{keymap}
1588 This is equivalent to specifying @var{keymap} positionally.
1589
1590 @item :variable @var{place}
1591 This replaces the default variable @var{mode}, used to store the state
1592 of the mode. If you specify this, the @var{mode} variable is not
1593 defined, and any @var{init-value} argument is unused. @var{place}
1594 can be a different named variable (which you must define yourself), or
1595 anything that can be used with the @code{setf} function
1596 (@pxref{Generalized Variables,,, cl, Common Lisp Extensions}).
1597 @var{place} can also be a cons @code{(@var{get} . @var{set})},
1598 where @var{get} is an expression that returns the current state,
1599 and @var{set} is a function of one argument (a state) that sets it.
1600
1601 @item :after-hook @var{after-hook}
1602 This defines a single Lisp form which is evaluated after the mode hooks
1603 have run. It should not be quoted.
1604 @end table
1605
1606 Any other keyword arguments are passed directly to the
1607 @code{defcustom} generated for the variable @var{mode}.
1608
1609 The command named @var{mode} first performs the standard actions such as
1610 setting the variable named @var{mode} and then executes the @var{body}
1611 forms, if any. It then runs the mode hook variable
1612 @code{@var{mode}-hook} and finishes by evaluating any form in
1613 @code{:after-hook}.
1614 @end defmac
1615
1616 The initial value must be @code{nil} except in cases where (1) the
1617 mode is preloaded in Emacs, or (2) it is painless for loading to
1618 enable the mode even though the user did not request it. For
1619 instance, if the mode has no effect unless something else is enabled,
1620 and will always be loaded by that time, enabling it by default is
1621 harmless. But these are unusual circumstances. Normally, the
1622 initial value must be @code{nil}.
1623
1624 @findex easy-mmode-define-minor-mode
1625 The name @code{easy-mmode-define-minor-mode} is an alias
1626 for this macro.
1627
1628 Here is an example of using @code{define-minor-mode}:
1629
1630 @smallexample
1631 (define-minor-mode hungry-mode
1632 "Toggle Hungry mode.
1633 Interactively with no argument, this command toggles the mode.
1634 A positive prefix argument enables the mode, any other prefix
1635 argument disables it. From Lisp, argument omitted or nil enables
1636 the mode, `toggle' toggles the state.
1637
1638 When Hungry mode is enabled, the control delete key
1639 gobbles all preceding whitespace except the last.
1640 See the command \\[hungry-electric-delete]."
1641 ;; The initial value.
1642 nil
1643 ;; The indicator for the mode line.
1644 " Hungry"
1645 ;; The minor mode bindings.
1646 '(([C-backspace] . hungry-electric-delete))
1647 :group 'hunger)
1648 @end smallexample
1649
1650 @noindent
1651 This defines a minor mode named ``Hungry mode'', a command named
1652 @code{hungry-mode} to toggle it, a variable named @code{hungry-mode}
1653 which indicates whether the mode is enabled, and a variable named
1654 @code{hungry-mode-map} which holds the keymap that is active when the
1655 mode is enabled. It initializes the keymap with a key binding for
1656 @kbd{C-@key{DEL}}. It puts the variable @code{hungry-mode} into
1657 custom group @code{hunger}. There are no @var{body} forms---many
1658 minor modes don't need any.
1659
1660 Here's an equivalent way to write it:
1661
1662 @smallexample
1663 (define-minor-mode hungry-mode
1664 "Toggle Hungry mode.
1665 ...rest of documentation as before..."
1666 ;; The initial value.
1667 :init-value nil
1668 ;; The indicator for the mode line.
1669 :lighter " Hungry"
1670 ;; The minor mode bindings.
1671 :keymap
1672 '(([C-backspace] . hungry-electric-delete)
1673 ([C-M-backspace]
1674 . (lambda ()
1675 (interactive)
1676 (hungry-electric-delete t))))
1677 :group 'hunger)
1678 @end smallexample
1679
1680 @defmac define-globalized-minor-mode global-mode mode turn-on keyword-args@dots{}
1681 This defines a global toggle named @var{global-mode} whose meaning is
1682 to enable or disable the buffer-local minor mode @var{mode} in all
1683 buffers. To turn on the minor mode in a buffer, it uses the function
1684 @var{turn-on}; to turn off the minor mode, it calls @code{mode} with
1685 @minus{}1 as argument.
1686
1687 Globally enabling the mode also affects buffers subsequently created
1688 by visiting files, and buffers that use a major mode other than
1689 Fundamental mode; but it does not detect the creation of a new buffer
1690 in Fundamental mode.
1691
1692 This defines the customization option @var{global-mode} (@pxref{Customization}),
1693 which can be toggled in the Customize interface to turn the minor mode on
1694 and off. As with @code{define-minor-mode}, you should ensure that the
1695 @code{define-globalized-minor-mode} form is evaluated each time Emacs
1696 starts, for example by providing a @code{:require} keyword.
1697
1698 Use @code{:group @var{group}} in @var{keyword-args} to specify the
1699 custom group for the mode variable of the global minor mode.
1700
1701 Generally speaking, when you define a globalized minor mode, you should
1702 also define a non-globalized version, so that people can use (or
1703 disable) it in individual buffers. This also allows them to disable a
1704 globally enabled minor mode in a specific major mode, by using that
1705 mode's hook.
1706 @end defmac
1707
1708
1709 @node Mode Line Format
1710 @section Mode Line Format
1711 @cindex mode line
1712
1713 Each Emacs window (aside from minibuffer windows) typically has a mode
1714 line at the bottom, which displays status information about the buffer
1715 displayed in the window. The mode line contains information about the
1716 buffer, such as its name, associated file, depth of recursive editing,
1717 and major and minor modes. A window can also have a @dfn{header
1718 line}, which is much like the mode line but appears at the top of the
1719 window.
1720
1721 This section describes how to control the contents of the mode line
1722 and header line. We include it in this chapter because much of the
1723 information displayed in the mode line relates to the enabled major and
1724 minor modes.
1725
1726 @menu
1727 * Base: Mode Line Basics. Basic ideas of mode line control.
1728 * Data: Mode Line Data. The data structure that controls the mode line.
1729 * Top: Mode Line Top. The top level variable, mode-line-format.
1730 * Mode Line Variables:: Variables used in that data structure.
1731 * %-Constructs:: Putting information into a mode line.
1732 * Properties in Mode:: Using text properties in the mode line.
1733 * Header Lines:: Like a mode line, but at the top.
1734 * Emulating Mode Line:: Formatting text as the mode line would.
1735 @end menu
1736
1737 @node Mode Line Basics
1738 @subsection Mode Line Basics
1739
1740 The contents of each mode line are specified by the buffer-local
1741 variable @code{mode-line-format} (@pxref{Mode Line Top}). This variable
1742 holds a @dfn{mode line construct}: a template that controls what is
1743 displayed on the buffer's mode line. The value of
1744 @code{header-line-format} specifies the buffer's header line in the same
1745 way. All windows for the same buffer use the same
1746 @code{mode-line-format} and @code{header-line-format}.
1747
1748 For efficiency, Emacs does not continuously recompute each window's
1749 mode line and header line. It does so when circumstances appear to call
1750 for it---for instance, if you change the window configuration, switch
1751 buffers, narrow or widen the buffer, scroll, or modify the buffer. If
1752 you alter any of the variables referenced by @code{mode-line-format} or
1753 @code{header-line-format} (@pxref{Mode Line Variables}), or any other
1754 data structures that affect how text is displayed (@pxref{Display}), you
1755 should use the function @code{force-mode-line-update} to update the
1756 display.
1757
1758 @defun force-mode-line-update &optional all
1759 This function forces Emacs to update the current buffer's mode line and
1760 header line, based on the latest values of all relevant variables,
1761 during its next redisplay cycle. If the optional argument @var{all} is
1762 non-@code{nil}, it forces an update for all mode lines and header lines.
1763
1764 This function also forces an update of the menu bar and frame title.
1765 @end defun
1766
1767 The selected window's mode line is usually displayed in a different
1768 color using the face @code{mode-line}. Other windows' mode lines appear
1769 in the face @code{mode-line-inactive} instead. @xref{Faces}.
1770
1771 @node Mode Line Data
1772 @subsection The Data Structure of the Mode Line
1773 @cindex mode line construct
1774
1775 The mode line contents are controlled by a data structure called a
1776 @dfn{mode line construct}, made up of lists, strings, symbols, and
1777 numbers kept in buffer-local variables. Each data type has a specific
1778 meaning for the mode line appearance, as described below. The same data
1779 structure is used for constructing frame titles (@pxref{Frame Titles})
1780 and header lines (@pxref{Header Lines}).
1781
1782 A mode line construct may be as simple as a fixed string of text,
1783 but it usually specifies how to combine fixed strings with variables'
1784 values to construct the text. Many of these variables are themselves
1785 defined to have mode line constructs as their values.
1786
1787 Here are the meanings of various data types as mode line constructs:
1788
1789 @table @code
1790 @cindex percent symbol in mode line
1791 @item @var{string}
1792 A string as a mode line construct appears verbatim except for
1793 @dfn{@code{%}-constructs} in it. These stand for substitution of
1794 other data; see @ref{%-Constructs}.
1795
1796 If parts of the string have @code{face} properties, they control
1797 display of the text just as they would text in the buffer. Any
1798 characters which have no @code{face} properties are displayed, by
1799 default, in the face @code{mode-line} or @code{mode-line-inactive}
1800 (@pxref{Standard Faces,,, emacs, The GNU Emacs Manual}). The
1801 @code{help-echo} and @code{local-map} properties in @var{string} have
1802 special meanings. @xref{Properties in Mode}.
1803
1804 @item @var{symbol}
1805 A symbol as a mode line construct stands for its value. The value of
1806 @var{symbol} is used as a mode line construct, in place of @var{symbol}.
1807 However, the symbols @code{t} and @code{nil} are ignored, as is any
1808 symbol whose value is void.
1809
1810 There is one exception: if the value of @var{symbol} is a string, it is
1811 displayed verbatim: the @code{%}-constructs are not recognized.
1812
1813 Unless @var{symbol} is marked as ``risky'' (i.e., it has a
1814 non-@code{nil} @code{risky-local-variable} property), all text
1815 properties specified in @var{symbol}'s value are ignored. This includes
1816 the text properties of strings in @var{symbol}'s value, as well as all
1817 @code{:eval} and @code{:propertize} forms in it. (The reason for this
1818 is security: non-risky variables could be set automatically from file
1819 variables without prompting the user.)
1820
1821 @item (@var{string} @var{rest}@dots{})
1822 @itemx (@var{list} @var{rest}@dots{})
1823 A list whose first element is a string or list means to process all the
1824 elements recursively and concatenate the results. This is the most
1825 common form of mode line construct.
1826
1827 @item (:eval @var{form})
1828 A list whose first element is the symbol @code{:eval} says to evaluate
1829 @var{form}, and use the result as a string to display. Make sure this
1830 evaluation cannot load any files, as doing so could cause infinite
1831 recursion.
1832
1833 @item (:propertize @var{elt} @var{props}@dots{})
1834 A list whose first element is the symbol @code{:propertize} says to
1835 process the mode line construct @var{elt} recursively, then add the text
1836 properties specified by @var{props} to the result. The argument
1837 @var{props} should consist of zero or more pairs @var{text-property}
1838 @var{value}.
1839
1840 @item (@var{symbol} @var{then} @var{else})
1841 A list whose first element is a symbol that is not a keyword specifies
1842 a conditional. Its meaning depends on the value of @var{symbol}. If
1843 @var{symbol} has a non-@code{nil} value, the second element,
1844 @var{then}, is processed recursively as a mode line element.
1845 Otherwise, the third element, @var{else}, is processed recursively.
1846 You may omit @var{else}; then the mode line element displays nothing
1847 if the value of @var{symbol} is @code{nil} or void.
1848
1849 @item (@var{width} @var{rest}@dots{})
1850 A list whose first element is an integer specifies truncation or
1851 padding of the results of @var{rest}. The remaining elements
1852 @var{rest} are processed recursively as mode line constructs and
1853 concatenated together. When @var{width} is positive, the result is
1854 space filled on the right if its width is less than @var{width}. When
1855 @var{width} is negative, the result is truncated on the right to
1856 @minus{}@var{width} columns if its width exceeds @minus{}@var{width}.
1857
1858 For example, the usual way to show what percentage of a buffer is above
1859 the top of the window is to use a list like this: @code{(-3 "%p")}.
1860 @end table
1861
1862 @node Mode Line Top
1863 @subsection The Top Level of Mode Line Control
1864
1865 The variable in overall control of the mode line is
1866 @code{mode-line-format}.
1867
1868 @defopt mode-line-format
1869 The value of this variable is a mode line construct that controls the
1870 contents of the mode-line. It is always buffer-local in all buffers.
1871
1872 If you set this variable to @code{nil} in a buffer, that buffer does not
1873 have a mode line. (A window that is just one line tall also does not
1874 display a mode line.)
1875 @end defopt
1876
1877 The default value of @code{mode-line-format} is designed to use the
1878 values of other variables such as @code{mode-line-position} and
1879 @code{mode-line-modes} (which in turn incorporates the values of the
1880 variables @code{mode-name} and @code{minor-mode-alist}). Very few
1881 modes need to alter @code{mode-line-format} itself. For most
1882 purposes, it is sufficient to alter some of the variables that
1883 @code{mode-line-format} either directly or indirectly refers to.
1884
1885 If you do alter @code{mode-line-format} itself, the new value should
1886 use the same variables that appear in the default value (@pxref{Mode
1887 Line Variables}), rather than duplicating their contents or displaying
1888 the information in another fashion. This way, customizations made by
1889 the user or by Lisp programs (such as @code{display-time} and major
1890 modes) via changes to those variables remain effective.
1891
1892 Here is a hypothetical example of a @code{mode-line-format} that might
1893 be useful for Shell mode (in reality, Shell mode does not set
1894 @code{mode-line-format}):
1895
1896 @example
1897 @group
1898 (setq mode-line-format
1899 (list "-"
1900 'mode-line-mule-info
1901 'mode-line-modified
1902 'mode-line-frame-identification
1903 "%b--"
1904 @end group
1905 @group
1906 ;; @r{Note that this is evaluated while making the list.}
1907 ;; @r{It makes a mode line construct which is just a string.}
1908 (getenv "HOST")
1909 @end group
1910 ":"
1911 'default-directory
1912 " "
1913 'global-mode-string
1914 " %[("
1915 '(:eval (mode-line-mode-name))
1916 'mode-line-process
1917 'minor-mode-alist
1918 "%n"
1919 ")%]--"
1920 @group
1921 '(which-func-mode ("" which-func-format "--"))
1922 '(line-number-mode "L%l--")
1923 '(column-number-mode "C%c--")
1924 '(-3 "%p")))
1925 @end group
1926 @end example
1927
1928 @noindent
1929 (The variables @code{line-number-mode}, @code{column-number-mode}
1930 and @code{which-func-mode} enable particular minor modes; as usual,
1931 these variable names are also the minor mode command names.)
1932
1933 @node Mode Line Variables
1934 @subsection Variables Used in the Mode Line
1935
1936 This section describes variables incorporated by the standard value of
1937 @code{mode-line-format} into the text of the mode line. There is
1938 nothing inherently special about these variables; any other variables
1939 could have the same effects on the mode line if the value of
1940 @code{mode-line-format} is changed to use them. However, various parts
1941 of Emacs set these variables on the understanding that they will control
1942 parts of the mode line; therefore, practically speaking, it is essential
1943 for the mode line to use them.
1944
1945 @defvar mode-line-mule-info
1946 This variable holds the value of the mode line construct that displays
1947 information about the language environment, buffer coding system, and
1948 current input method. @xref{Non-ASCII Characters}.
1949 @end defvar
1950
1951 @defvar mode-line-modified
1952 This variable holds the value of the mode line construct that displays
1953 whether the current buffer is modified. Its default value displays
1954 @samp{**} if the buffer is modified, @samp{--} if the buffer is not
1955 modified, @samp{%%} if the buffer is read only, and @samp{%*} if the
1956 buffer is read only and modified.
1957
1958 Changing this variable does not force an update of the mode line.
1959 @end defvar
1960
1961 @defvar mode-line-frame-identification
1962 This variable identifies the current frame. Its default value
1963 displays @code{" "} if you are using a window system which can show
1964 multiple frames, or @code{"-%F "} on an ordinary terminal which shows
1965 only one frame at a time.
1966 @end defvar
1967
1968 @defvar mode-line-buffer-identification
1969 This variable identifies the buffer being displayed in the window.
1970 Its default value displays the buffer name, padded with spaces to at
1971 least 12 columns.
1972 @end defvar
1973
1974 @defopt mode-line-position
1975 This variable indicates the position in the buffer. Its default value
1976 displays the buffer percentage and, optionally, the buffer size, the
1977 line number and the column number.
1978 @end defopt
1979
1980 @defvar vc-mode
1981 The variable @code{vc-mode}, buffer-local in each buffer, records
1982 whether the buffer's visited file is maintained with version control,
1983 and, if so, which kind. Its value is a string that appears in the mode
1984 line, or @code{nil} for no version control.
1985 @end defvar
1986
1987 @defopt mode-line-modes
1988 This variable displays the buffer's major and minor modes. Its
1989 default value also displays the recursive editing level, information
1990 on the process status, and whether narrowing is in effect.
1991 @end defopt
1992
1993 @defopt mode-line-remote
1994 This variable is used to show whether @code{default-directory} for the
1995 current buffer is remote.
1996 @end defopt
1997
1998 @defopt mode-line-client
1999 This variable is used to identify @code{emacsclient} frames.
2000 @end defopt
2001
2002 The following three variables are used in @code{mode-line-modes}:
2003
2004 @defvar mode-name
2005 This buffer-local variable holds the ``pretty'' name of the current
2006 buffer's major mode. Each major mode should set this variable so that
2007 the mode name will appear in the mode line. The value does not have
2008 to be a string, but can use any of the data types valid in a mode-line
2009 construct (@pxref{Mode Line Data}). To compute the string that will
2010 identify the mode name in the mode line, use @code{format-mode-line}
2011 (@pxref{Emulating Mode Line}).
2012 @end defvar
2013
2014 @defvar mode-line-process
2015 This buffer-local variable contains the mode line information on process
2016 status in modes used for communicating with subprocesses. It is
2017 displayed immediately following the major mode name, with no intervening
2018 space. For example, its value in the @file{*shell*} buffer is
2019 @code{(":%s")}, which allows the shell to display its status along
2020 with the major mode as: @samp{(Shell:run)}. Normally this variable
2021 is @code{nil}.
2022 @end defvar
2023
2024 @defvar minor-mode-alist
2025 @anchor{Definition of minor-mode-alist}
2026 This variable holds an association list whose elements specify how the
2027 mode line should indicate that a minor mode is active. Each element of
2028 the @code{minor-mode-alist} should be a two-element list:
2029
2030 @example
2031 (@var{minor-mode-variable} @var{mode-line-string})
2032 @end example
2033
2034 More generally, @var{mode-line-string} can be any mode line construct.
2035 It appears in the mode line when the value of @var{minor-mode-variable}
2036 is non-@code{nil}, and not otherwise. These strings should begin with
2037 spaces so that they don't run together. Conventionally, the
2038 @var{minor-mode-variable} for a specific mode is set to a non-@code{nil}
2039 value when that minor mode is activated.
2040
2041 @code{minor-mode-alist} itself is not buffer-local. Each variable
2042 mentioned in the alist should be buffer-local if its minor mode can be
2043 enabled separately in each buffer.
2044 @end defvar
2045
2046 @defvar global-mode-string
2047 This variable holds a mode line construct that, by default, appears in
2048 the mode line just after the @code{which-func-mode} minor mode if set,
2049 else after @code{mode-line-modes}. The command @code{display-time} sets
2050 @code{global-mode-string} to refer to the variable
2051 @code{display-time-string}, which holds a string containing the time and
2052 load information.
2053
2054 The @samp{%M} construct substitutes the value of
2055 @code{global-mode-string}, but that is obsolete, since the variable is
2056 included in the mode line from @code{mode-line-format}.
2057 @end defvar
2058
2059 Here is a simplified version of the default value of
2060 @code{mode-line-format}. The real default value also
2061 specifies addition of text properties.
2062
2063 @example
2064 @group
2065 ("-"
2066 mode-line-mule-info
2067 mode-line-modified
2068 mode-line-frame-identification
2069 mode-line-buffer-identification
2070 @end group
2071 " "
2072 mode-line-position
2073 (vc-mode vc-mode)
2074 " "
2075 @group
2076 mode-line-modes
2077 (which-func-mode ("" which-func-format "--"))
2078 (global-mode-string ("--" global-mode-string))
2079 "-%-")
2080 @end group
2081 @end example
2082
2083 @node %-Constructs
2084 @subsection @code{%}-Constructs in the Mode Line
2085
2086 Strings used as mode line constructs can use certain
2087 @code{%}-constructs to substitute various kinds of data. Here is a
2088 list of the defined @code{%}-constructs, and what they mean. In any
2089 construct except @samp{%%}, you can add a decimal integer after the
2090 @samp{%} to specify a minimum field width. If the width is less, the
2091 field is padded with spaces to the right.
2092
2093 @table @code
2094 @item %b
2095 The current buffer name, obtained with the @code{buffer-name} function.
2096 @xref{Buffer Names}.
2097
2098 @item %c
2099 The current column number of point.
2100
2101 @item %e
2102 When Emacs is nearly out of memory for Lisp objects, a brief message
2103 saying so. Otherwise, this is empty.
2104
2105 @item %f
2106 The visited file name, obtained with the @code{buffer-file-name}
2107 function. @xref{Buffer File Name}.
2108
2109 @item %F
2110 The title (only on a window system) or the name of the selected frame.
2111 @xref{Basic Parameters}.
2112
2113 @item %i
2114 The size of the accessible part of the current buffer; basically
2115 @code{(- (point-max) (point-min))}.
2116
2117 @item %I
2118 Like @samp{%i}, but the size is printed in a more readable way by using
2119 @samp{k} for 10^3, @samp{M} for 10^6, @samp{G} for 10^9, etc., to
2120 abbreviate.
2121
2122 @item %l
2123 The current line number of point, counting within the accessible portion
2124 of the buffer.
2125
2126 @item %n
2127 @samp{Narrow} when narrowing is in effect; nothing otherwise (see
2128 @code{narrow-to-region} in @ref{Narrowing}).
2129
2130 @item %p
2131 The percentage of the buffer text above the @strong{top} of window, or
2132 @samp{Top}, @samp{Bottom} or @samp{All}. Note that the default mode
2133 line construct truncates this to three characters.
2134
2135 @item %P
2136 The percentage of the buffer text that is above the @strong{bottom} of
2137 the window (which includes the text visible in the window, as well as
2138 the text above the top), plus @samp{Top} if the top of the buffer is
2139 visible on screen; or @samp{Bottom} or @samp{All}.
2140
2141 @item %s
2142 The status of the subprocess belonging to the current buffer, obtained with
2143 @code{process-status}. @xref{Process Information}.
2144
2145 @item %t
2146 Whether the visited file is a text file or a binary file. This is a
2147 meaningful distinction only on certain operating systems (@pxref{MS-DOS
2148 File Types}).
2149
2150 @item %z
2151 The mnemonics of keyboard, terminal, and buffer coding systems.
2152
2153 @item %Z
2154 Like @samp{%z}, but including the end-of-line format.
2155
2156 @item %*
2157 @samp{%} if the buffer is read only (see @code{buffer-read-only}); @*
2158 @samp{*} if the buffer is modified (see @code{buffer-modified-p}); @*
2159 @samp{-} otherwise. @xref{Buffer Modification}.
2160
2161 @item %+
2162 @samp{*} if the buffer is modified (see @code{buffer-modified-p}); @*
2163 @samp{%} if the buffer is read only (see @code{buffer-read-only}); @*
2164 @samp{-} otherwise. This differs from @samp{%*} only for a modified
2165 read-only buffer. @xref{Buffer Modification}.
2166
2167 @item %&
2168 @samp{*} if the buffer is modified, and @samp{-} otherwise.
2169
2170 @item %[
2171 An indication of the depth of recursive editing levels (not counting
2172 minibuffer levels): one @samp{[} for each editing level.
2173 @xref{Recursive Editing}.
2174
2175 @item %]
2176 One @samp{]} for each recursive editing level (not counting minibuffer
2177 levels).
2178
2179 @item %-
2180 Dashes sufficient to fill the remainder of the mode line.
2181
2182 @item %%
2183 The character @samp{%}---this is how to include a literal @samp{%} in a
2184 string in which @code{%}-constructs are allowed.
2185 @end table
2186
2187 The following two @code{%}-constructs are still supported, but they are
2188 obsolete, since you can get the same results with the variables
2189 @code{mode-name} and @code{global-mode-string}.
2190
2191 @table @code
2192 @item %m
2193 The value of @code{mode-name}.
2194
2195 @item %M
2196 The value of @code{global-mode-string}.
2197 @end table
2198
2199 @node Properties in Mode
2200 @subsection Properties in the Mode Line
2201 @cindex text properties in the mode line
2202
2203 Certain text properties are meaningful in the
2204 mode line. The @code{face} property affects the appearance of text; the
2205 @code{help-echo} property associates help strings with the text, and
2206 @code{local-map} can make the text mouse-sensitive.
2207
2208 There are four ways to specify text properties for text in the mode
2209 line:
2210
2211 @enumerate
2212 @item
2213 Put a string with a text property directly into the mode line data
2214 structure.
2215
2216 @item
2217 Put a text property on a mode line %-construct such as @samp{%12b}; then
2218 the expansion of the %-construct will have that same text property.
2219
2220 @item
2221 Use a @code{(:propertize @var{elt} @var{props}@dots{})} construct to
2222 give @var{elt} a text property specified by @var{props}.
2223
2224 @item
2225 Use a list containing @code{:eval @var{form}} in the mode line data
2226 structure, and make @var{form} evaluate to a string that has a text
2227 property.
2228 @end enumerate
2229
2230 You can use the @code{local-map} property to specify a keymap. This
2231 keymap only takes real effect for mouse clicks; binding character keys
2232 and function keys to it has no effect, since it is impossible to move
2233 point into the mode line.
2234
2235 When the mode line refers to a variable which does not have a
2236 non-@code{nil} @code{risky-local-variable} property, any text
2237 properties given or specified within that variable's values are
2238 ignored. This is because such properties could otherwise specify
2239 functions to be called, and those functions could come from file
2240 local variables.
2241
2242 @node Header Lines
2243 @subsection Window Header Lines
2244 @cindex header line (of a window)
2245 @cindex window header line
2246
2247 A window can have a @dfn{header line} at the top, just as it can have
2248 a mode line at the bottom. The header line feature works just like the
2249 mode line feature, except that it's controlled by
2250 @code{header-line-format}:
2251
2252 @defvar header-line-format
2253 This variable, local in every buffer, specifies how to display the
2254 header line, for windows displaying the buffer. The format of the value
2255 is the same as for @code{mode-line-format} (@pxref{Mode Line Data}).
2256 It is normally @code{nil}, so that ordinary buffers have no header line.
2257 @end defvar
2258
2259 A window that is just one line tall never displays a header line. A
2260 window that is two lines tall cannot display both a mode line and a
2261 header line at once; if it has a mode line, then it does not display a
2262 header line.
2263
2264 @node Emulating Mode Line
2265 @subsection Emulating Mode Line Formatting
2266
2267 You can use the function @code{format-mode-line} to compute the text
2268 that would appear in a mode line or header line based on a certain
2269 mode line construct.
2270
2271 @defun format-mode-line format &optional face window buffer
2272 This function formats a line of text according to @var{format} as if it
2273 were generating the mode line for @var{window}, but it also returns the
2274 text as a string. The argument @var{window} defaults to the selected
2275 window. If @var{buffer} is non-@code{nil}, all the information used is
2276 taken from @var{buffer}; by default, it comes from @var{window}'s
2277 buffer.
2278
2279 The value string normally has text properties that correspond to the
2280 faces, keymaps, etc., that the mode line would have. Any character for
2281 which no @code{face} property is specified by @var{format} gets a
2282 default value determined by @var{face}. If @var{face} is @code{t}, that
2283 stands for either @code{mode-line} if @var{window} is selected,
2284 otherwise @code{mode-line-inactive}. If @var{face} is @code{nil} or
2285 omitted, that stands for the default face. If @var{face} is an integer,
2286 the value returned by this function will have no text properties.
2287
2288 You can also specify other valid faces as the value of @var{face}.
2289 If specified, that face provides the @code{face} property for characters
2290 whose face is not specified by @var{format}.
2291
2292 Note that using @code{mode-line}, @code{mode-line-inactive}, or
2293 @code{header-line} as @var{face} will actually redisplay the mode line
2294 or the header line, respectively, using the current definitions of the
2295 corresponding face, in addition to returning the formatted string.
2296 (Other faces do not cause redisplay.)
2297
2298 For example, @code{(format-mode-line header-line-format)} returns the
2299 text that would appear in the selected window's header line (@code{""}
2300 if it has no header line). @code{(format-mode-line header-line-format
2301 'header-line)} returns the same text, with each character
2302 carrying the face that it will have in the header line itself, and also
2303 redraws the header line.
2304 @end defun
2305
2306 @node Imenu
2307 @section Imenu
2308
2309 @cindex Imenu
2310 @dfn{Imenu} is a feature that lets users select a definition or
2311 section in the buffer, from a menu which lists all of them, to go
2312 directly to that location in the buffer. Imenu works by constructing
2313 a buffer index which lists the names and buffer positions of the
2314 definitions, or other named portions of the buffer; then the user can
2315 choose one of them and move point to it. Major modes can add a menu
2316 bar item to use Imenu using @code{imenu-add-to-menubar}.
2317
2318 @defun imenu-add-to-menubar name
2319 This function defines a local menu bar item named @var{name}
2320 to run Imenu.
2321 @end defun
2322
2323 The user-level commands for using Imenu are described in the Emacs
2324 Manual (@pxref{Imenu,, Imenu, emacs, the Emacs Manual}). This section
2325 explains how to customize Imenu's method of finding definitions or
2326 buffer portions for a particular major mode.
2327
2328 The usual and simplest way is to set the variable
2329 @code{imenu-generic-expression}:
2330
2331 @defvar imenu-generic-expression
2332 This variable, if non-@code{nil}, is a list that specifies regular
2333 expressions for finding definitions for Imenu. Simple elements of
2334 @code{imenu-generic-expression} look like this:
2335
2336 @example
2337 (@var{menu-title} @var{regexp} @var{index})
2338 @end example
2339
2340 Here, if @var{menu-title} is non-@code{nil}, it says that the matches
2341 for this element should go in a submenu of the buffer index;
2342 @var{menu-title} itself specifies the name for the submenu. If
2343 @var{menu-title} is @code{nil}, the matches for this element go directly
2344 in the top level of the buffer index.
2345
2346 The second item in the list, @var{regexp}, is a regular expression
2347 (@pxref{Regular Expressions}); anything in the buffer that it matches
2348 is considered a definition, something to mention in the buffer index.
2349 The third item, @var{index}, is a non-negative integer that indicates
2350 which subexpression in @var{regexp} matches the definition's name.
2351
2352 An element can also look like this:
2353
2354 @example
2355 (@var{menu-title} @var{regexp} @var{index} @var{function} @var{arguments}@dots{})
2356 @end example
2357
2358 Each match for this element creates an index item, and when the index
2359 item is selected by the user, it calls @var{function} with arguments
2360 consisting of the item name, the buffer position, and @var{arguments}.
2361
2362 For Emacs Lisp mode, @code{imenu-generic-expression} could look like
2363 this:
2364
2365 @c should probably use imenu-syntax-alist and \\sw rather than [-A-Za-z0-9+]
2366 @example
2367 @group
2368 ((nil "^\\s-*(def\\(un\\|subst\\|macro\\|advice\\)\
2369 \\s-+\\([-A-Za-z0-9+]+\\)" 2)
2370 @end group
2371 @group
2372 ("*Vars*" "^\\s-*(def\\(var\\|const\\)\
2373 \\s-+\\([-A-Za-z0-9+]+\\)" 2)
2374 @end group
2375 @group
2376 ("*Types*"
2377 "^\\s-*\
2378 (def\\(type\\|struct\\|class\\|ine-condition\\)\
2379 \\s-+\\([-A-Za-z0-9+]+\\)" 2))
2380 @end group
2381 @end example
2382
2383 Setting this variable makes it buffer-local in the current buffer.
2384 @end defvar
2385
2386 @defvar imenu-case-fold-search
2387 This variable controls whether matching against the regular
2388 expressions in the value of @code{imenu-generic-expression} is
2389 case-sensitive: @code{t}, the default, means matching should ignore
2390 case.
2391
2392 Setting this variable makes it buffer-local in the current buffer.
2393 @end defvar
2394
2395 @defvar imenu-syntax-alist
2396 This variable is an alist of syntax table modifiers to use while
2397 processing @code{imenu-generic-expression}, to override the syntax table
2398 of the current buffer. Each element should have this form:
2399
2400 @example
2401 (@var{characters} . @var{syntax-description})
2402 @end example
2403
2404 The @sc{car}, @var{characters}, can be either a character or a string.
2405 The element says to give that character or characters the syntax
2406 specified by @var{syntax-description}, which is passed to
2407 @code{modify-syntax-entry} (@pxref{Syntax Table Functions}).
2408
2409 This feature is typically used to give word syntax to characters which
2410 normally have symbol syntax, and thus to simplify
2411 @code{imenu-generic-expression} and speed up matching.
2412 For example, Fortran mode uses it this way:
2413
2414 @example
2415 (setq imenu-syntax-alist '(("_$" . "w")))
2416 @end example
2417
2418 The @code{imenu-generic-expression} regular expressions can then use
2419 @samp{\\sw+} instead of @samp{\\(\\sw\\|\\s_\\)+}. Note that this
2420 technique may be inconvenient when the mode needs to limit the initial
2421 character of a name to a smaller set of characters than are allowed in
2422 the rest of a name.
2423
2424 Setting this variable makes it buffer-local in the current buffer.
2425 @end defvar
2426
2427 Another way to customize Imenu for a major mode is to set the
2428 variables @code{imenu-prev-index-position-function} and
2429 @code{imenu-extract-index-name-function}:
2430
2431 @defvar imenu-prev-index-position-function
2432 If this variable is non-@code{nil}, its value should be a function that
2433 finds the next ``definition'' to put in the buffer index, scanning
2434 backward in the buffer from point. It should return @code{nil} if it
2435 doesn't find another ``definition'' before point. Otherwise it should
2436 leave point at the place it finds a ``definition'' and return any
2437 non-@code{nil} value.
2438
2439 Setting this variable makes it buffer-local in the current buffer.
2440 @end defvar
2441
2442 @defvar imenu-extract-index-name-function
2443 If this variable is non-@code{nil}, its value should be a function to
2444 return the name for a definition, assuming point is in that definition
2445 as the @code{imenu-prev-index-position-function} function would leave
2446 it.
2447
2448 Setting this variable makes it buffer-local in the current buffer.
2449 @end defvar
2450
2451 The last way to customize Imenu for a major mode is to set the
2452 variable @code{imenu-create-index-function}:
2453
2454 @defvar imenu-create-index-function
2455 This variable specifies the function to use for creating a buffer
2456 index. The function should take no arguments, and return an index
2457 alist for the current buffer. It is called within
2458 @code{save-excursion}, so where it leaves point makes no difference.
2459
2460 The index alist can have three types of elements. Simple elements
2461 look like this:
2462
2463 @example
2464 (@var{index-name} . @var{index-position})
2465 @end example
2466
2467 Selecting a simple element has the effect of moving to position
2468 @var{index-position} in the buffer. Special elements look like this:
2469
2470 @example
2471 (@var{index-name} @var{index-position} @var{function} @var{arguments}@dots{})
2472 @end example
2473
2474 Selecting a special element performs:
2475
2476 @example
2477 (funcall @var{function}
2478 @var{index-name} @var{index-position} @var{arguments}@dots{})
2479 @end example
2480
2481 A nested sub-alist element looks like this:
2482
2483 @example
2484 (@var{menu-title} @var{sub-alist})
2485 @end example
2486
2487 It creates the submenu @var{menu-title} specified by @var{sub-alist}.
2488
2489 The default value of @code{imenu-create-index-function} is
2490 @code{imenu-default-create-index-function}. This function calls the
2491 value of @code{imenu-prev-index-position-function} and the value of
2492 @code{imenu-extract-index-name-function} to produce the index alist.
2493 However, if either of these two variables is @code{nil}, the default
2494 function uses @code{imenu-generic-expression} instead.
2495
2496 Setting this variable makes it buffer-local in the current buffer.
2497 @end defvar
2498
2499 @node Font Lock Mode
2500 @section Font Lock Mode
2501 @cindex Font Lock mode
2502
2503 @dfn{Font Lock mode} is a buffer-local minor mode that automatically
2504 attaches @code{face} properties to certain parts of the buffer based on
2505 their syntactic role. How it parses the buffer depends on the major
2506 mode; most major modes define syntactic criteria for which faces to use
2507 in which contexts. This section explains how to customize Font Lock for
2508 a particular major mode.
2509
2510 Font Lock mode finds text to highlight in two ways: through
2511 syntactic parsing based on the syntax table, and through searching
2512 (usually for regular expressions). Syntactic fontification happens
2513 first; it finds comments and string constants and highlights them.
2514 Search-based fontification happens second.
2515
2516 @menu
2517 * Font Lock Basics:: Overview of customizing Font Lock.
2518 * Search-based Fontification:: Fontification based on regexps.
2519 * Customizing Keywords:: Customizing search-based fontification.
2520 * Other Font Lock Variables:: Additional customization facilities.
2521 * Levels of Font Lock:: Each mode can define alternative levels
2522 so that the user can select more or less.
2523 * Precalculated Fontification:: How Lisp programs that produce the buffer
2524 contents can also specify how to fontify it.
2525 * Faces for Font Lock:: Special faces specifically for Font Lock.
2526 * Syntactic Font Lock:: Fontification based on syntax tables.
2527 * Multiline Font Lock:: How to coerce Font Lock into properly
2528 highlighting multiline constructs.
2529 @end menu
2530
2531 @node Font Lock Basics
2532 @subsection Font Lock Basics
2533
2534 There are several variables that control how Font Lock mode highlights
2535 text. But major modes should not set any of these variables directly.
2536 Instead, they should set @code{font-lock-defaults} as a buffer-local
2537 variable. The value assigned to this variable is used, if and when Font
2538 Lock mode is enabled, to set all the other variables.
2539
2540 @defvar font-lock-defaults
2541 This variable is set by major modes to specify how to fontify text in
2542 that mode. It automatically becomes buffer-local when set. If its
2543 value is @code{nil}, Font Lock mode does no highlighting, and you can
2544 use the @samp{Faces} menu (under @samp{Edit} and then @samp{Text
2545 Properties} in the menu bar) to assign faces explicitly to text in the
2546 buffer.
2547
2548 If non-@code{nil}, the value should look like this:
2549
2550 @example
2551 (@var{keywords} [@var{keywords-only} [@var{case-fold}
2552 [@var{syntax-alist} [@var{syntax-begin} @var{other-vars}@dots{}]]]])
2553 @end example
2554
2555 The first element, @var{keywords}, indirectly specifies the value of
2556 @code{font-lock-keywords} which directs search-based fontification.
2557 It can be a symbol, a variable or a function whose value is the list
2558 to use for @code{font-lock-keywords}. It can also be a list of
2559 several such symbols, one for each possible level of fontification.
2560 The first symbol specifies the @samp{mode default} level of
2561 fontification, the next symbol level 1 fontification, the next level 2,
2562 and so on. The @samp{mode default} level is normally the same as level
2563 1. It is used when @code{font-lock-maximum-decoration} has a @code{nil}
2564 value. @xref{Levels of Font Lock}.
2565
2566 The second element, @var{keywords-only}, specifies the value of the
2567 variable @code{font-lock-keywords-only}. If this is omitted or
2568 @code{nil}, syntactic fontification (of strings and comments) is also
2569 performed. If this is non-@code{nil}, syntactic fontification is not
2570 performed. @xref{Syntactic Font Lock}.
2571
2572 The third element, @var{case-fold}, specifies the value of
2573 @code{font-lock-keywords-case-fold-search}. If it is non-@code{nil},
2574 Font Lock mode ignores case during search-based fontification.
2575
2576 If the fourth element, @var{syntax-alist}, is non-@code{nil}, it should
2577 be a list of cons cells of the form @code{(@var{char-or-string}
2578 . @var{string})}. These are used to set up a syntax table for syntactic
2579 fontification; the resulting syntax table is stored in
2580 @code{font-lock-syntax-table}. If @var{syntax-alist} is omitted or
2581 @code{nil}, syntactic fontification uses the syntax table returned by
2582 the @code{syntax-table} function. @xref{Syntax Table Functions}.
2583
2584 The fifth element, @var{syntax-begin}, specifies the value of
2585 @code{font-lock-beginning-of-syntax-function}. We recommend setting
2586 this variable to @code{nil} and using @code{syntax-begin-function}
2587 instead.
2588
2589 All the remaining elements (if any) are collectively called
2590 @var{other-vars}. Each of these elements should have the form
2591 @code{(@var{variable} . @var{value})}---which means, make
2592 @var{variable} buffer-local and then set it to @var{value}. You can
2593 use these @var{other-vars} to set other variables that affect
2594 fontification, aside from those you can control with the first five
2595 elements. @xref{Other Font Lock Variables}.
2596 @end defvar
2597
2598 If your mode fontifies text explicitly by adding
2599 @code{font-lock-face} properties, it can specify @code{(nil t)} for
2600 @code{font-lock-defaults} to turn off all automatic fontification.
2601 However, this is not required; it is possible to fontify some things
2602 using @code{font-lock-face} properties and set up automatic
2603 fontification for other parts of the text.
2604
2605 @node Search-based Fontification
2606 @subsection Search-based Fontification
2607
2608 The variable which directly controls search-based fontification is
2609 @code{font-lock-keywords}, which is typically specified via the
2610 @var{keywords} element in @code{font-lock-defaults}.
2611
2612 @defvar font-lock-keywords
2613 The value of this variable is a list of the keywords to highlight. Lisp
2614 programs should not set this variable directly. Normally, the value is
2615 automatically set by Font Lock mode, using the @var{keywords} element in
2616 @code{font-lock-defaults}. The value can also be altered using the
2617 functions @code{font-lock-add-keywords} and
2618 @code{font-lock-remove-keywords} (@pxref{Customizing Keywords}).
2619 @end defvar
2620
2621 Each element of @code{font-lock-keywords} specifies how to find
2622 certain cases of text, and how to highlight those cases. Font Lock mode
2623 processes the elements of @code{font-lock-keywords} one by one, and for
2624 each element, it finds and handles all matches. Ordinarily, once
2625 part of the text has been fontified already, this cannot be overridden
2626 by a subsequent match in the same text; but you can specify different
2627 behavior using the @var{override} element of a @var{subexp-highlighter}.
2628
2629 Each element of @code{font-lock-keywords} should have one of these
2630 forms:
2631
2632 @table @code
2633 @item @var{regexp}
2634 Highlight all matches for @var{regexp} using
2635 @code{font-lock-keyword-face}. For example,
2636
2637 @example
2638 ;; @r{Highlight occurrences of the word @samp{foo}}
2639 ;; @r{using @code{font-lock-keyword-face}.}
2640 "\\<foo\\>"
2641 @end example
2642
2643 Be careful when composing these regular expressions; a poorly written
2644 pattern can dramatically slow things down! The function
2645 @code{regexp-opt} (@pxref{Regexp Functions}) is useful for calculating
2646 optimal regular expressions to match several keywords.
2647
2648 @item @var{function}
2649 Find text by calling @var{function}, and highlight the matches
2650 it finds using @code{font-lock-keyword-face}.
2651
2652 When @var{function} is called, it receives one argument, the limit of
2653 the search; it should begin searching at point, and not search beyond the
2654 limit. It should return non-@code{nil} if it succeeds, and set the
2655 match data to describe the match that was found. Returning @code{nil}
2656 indicates failure of the search.
2657
2658 Fontification will call @var{function} repeatedly with the same limit,
2659 and with point where the previous invocation left it, until
2660 @var{function} fails. On failure, @var{function} need not reset point
2661 in any particular way.
2662
2663 @item (@var{matcher} . @var{subexp})
2664 In this kind of element, @var{matcher} is either a regular
2665 expression or a function, as described above. The @sc{cdr},
2666 @var{subexp}, specifies which subexpression of @var{matcher} should be
2667 highlighted (instead of the entire text that @var{matcher} matched).
2668
2669 @example
2670 ;; @r{Highlight the @samp{bar} in each occurrence of @samp{fubar},}
2671 ;; @r{using @code{font-lock-keyword-face}.}
2672 ("fu\\(bar\\)" . 1)
2673 @end example
2674
2675 If you use @code{regexp-opt} to produce the regular expression
2676 @var{matcher}, you can use @code{regexp-opt-depth} (@pxref{Regexp
2677 Functions}) to calculate the value for @var{subexp}.
2678
2679 @item (@var{matcher} . @var{facespec})
2680 In this kind of element, @var{facespec} is an expression whose value
2681 specifies the face to use for highlighting. In the simplest case,
2682 @var{facespec} is a Lisp variable (a symbol) whose value is a face
2683 name.
2684
2685 @example
2686 ;; @r{Highlight occurrences of @samp{fubar},}
2687 ;; @r{using the face which is the value of @code{fubar-face}.}
2688 ("fubar" . fubar-face)
2689 @end example
2690
2691 However, @var{facespec} can also evaluate to a list of this form:
2692
2693 @example
2694 (face @var{face} @var{prop1} @var{val1} @var{prop2} @var{val2}@dots{})
2695 @end example
2696
2697 @noindent
2698 to specify the face @var{face} and various additional text properties
2699 to put on the text that matches. If you do this, be sure to add the
2700 other text property names that you set in this way to the value of
2701 @code{font-lock-extra-managed-props} so that the properties will also
2702 be cleared out when they are no longer appropriate. Alternatively,
2703 you can set the variable @code{font-lock-unfontify-region-function} to
2704 a function that clears these properties. @xref{Other Font Lock
2705 Variables}.
2706
2707 @item (@var{matcher} . @var{subexp-highlighter})
2708 In this kind of element, @var{subexp-highlighter} is a list
2709 which specifies how to highlight matches found by @var{matcher}.
2710 It has the form:
2711
2712 @example
2713 (@var{subexp} @var{facespec} [@var{override} [@var{laxmatch}]])
2714 @end example
2715
2716 The @sc{car}, @var{subexp}, is an integer specifying which subexpression
2717 of the match to fontify (0 means the entire matching text). The second
2718 subelement, @var{facespec}, is an expression whose value specifies the
2719 face, as described above.
2720
2721 The last two values in @var{subexp-highlighter}, @var{override} and
2722 @var{laxmatch}, are optional flags. If @var{override} is @code{t},
2723 this element can override existing fontification made by previous
2724 elements of @code{font-lock-keywords}. If it is @code{keep}, then
2725 each character is fontified if it has not been fontified already by
2726 some other element. If it is @code{prepend}, the face specified by
2727 @var{facespec} is added to the beginning of the @code{font-lock-face}
2728 property. If it is @code{append}, the face is added to the end of the
2729 @code{font-lock-face} property.
2730
2731 If @var{laxmatch} is non-@code{nil}, it means there should be no error
2732 if there is no subexpression numbered @var{subexp} in @var{matcher}.
2733 Obviously, fontification of the subexpression numbered @var{subexp} will
2734 not occur. However, fontification of other subexpressions (and other
2735 regexps) will continue. If @var{laxmatch} is @code{nil}, and the
2736 specified subexpression is missing, then an error is signaled which
2737 terminates search-based fontification.
2738
2739 Here are some examples of elements of this kind, and what they do:
2740
2741 @smallexample
2742 ;; @r{Highlight occurrences of either @samp{foo} or @samp{bar}, using}
2743 ;; @r{@code{foo-bar-face}, even if they have already been highlighted.}
2744 ;; @r{@code{foo-bar-face} should be a variable whose value is a face.}
2745 ("foo\\|bar" 0 foo-bar-face t)
2746
2747 ;; @r{Highlight the first subexpression within each occurrence}
2748 ;; @r{that the function @code{fubar-match} finds,}
2749 ;; @r{using the face which is the value of @code{fubar-face}.}
2750 (fubar-match 1 fubar-face)
2751 @end smallexample
2752
2753 @item (@var{matcher} . @var{anchored-highlighter})
2754 In this kind of element, @var{anchored-highlighter} specifies how to
2755 highlight text that follows a match found by @var{matcher}. So a
2756 match found by @var{matcher} acts as the anchor for further searches
2757 specified by @var{anchored-highlighter}. @var{anchored-highlighter}
2758 is a list of the following form:
2759
2760 @example
2761 (@var{anchored-matcher} @var{pre-form} @var{post-form}
2762 @var{subexp-highlighters}@dots{})
2763 @end example
2764
2765 Here, @var{anchored-matcher}, like @var{matcher}, is either a regular
2766 expression or a function. After a match of @var{matcher} is found,
2767 point is at the end of the match. Now, Font Lock evaluates the form
2768 @var{pre-form}. Then it searches for matches of
2769 @var{anchored-matcher} and uses @var{subexp-highlighters} to highlight
2770 these. A @var{subexp-highlighter} is as described above. Finally,
2771 Font Lock evaluates @var{post-form}.
2772
2773 The forms @var{pre-form} and @var{post-form} can be used to initialize
2774 before, and cleanup after, @var{anchored-matcher} is used. Typically,
2775 @var{pre-form} is used to move point to some position relative to the
2776 match of @var{matcher}, before starting with @var{anchored-matcher}.
2777 @var{post-form} might be used to move back, before resuming with
2778 @var{matcher}.
2779
2780 After Font Lock evaluates @var{pre-form}, it does not search for
2781 @var{anchored-matcher} beyond the end of the line. However, if
2782 @var{pre-form} returns a buffer position that is greater than the
2783 position of point after @var{pre-form} is evaluated, then the position
2784 returned by @var{pre-form} is used as the limit of the search instead.
2785 It is generally a bad idea to return a position greater than the end
2786 of the line; in other words, the @var{anchored-matcher} search should
2787 not span lines.
2788
2789 For example,
2790
2791 @smallexample
2792 ;; @r{Highlight occurrences of the word @samp{item} following}
2793 ;; @r{an occurrence of the word @samp{anchor} (on the same line)}
2794 ;; @r{in the value of @code{item-face}.}
2795 ("\\<anchor\\>" "\\<item\\>" nil nil (0 item-face))
2796 @end smallexample
2797
2798 Here, @var{pre-form} and @var{post-form} are @code{nil}. Therefore
2799 searching for @samp{item} starts at the end of the match of
2800 @samp{anchor}, and searching for subsequent instances of @samp{anchor}
2801 resumes from where searching for @samp{item} concluded.
2802
2803 @item (@var{matcher} @var{highlighters}@dots{})
2804 This sort of element specifies several @var{highlighter} lists for a
2805 single @var{matcher}. A @var{highlighter} list can be of the type
2806 @var{subexp-highlighter} or @var{anchored-highlighter} as described
2807 above.
2808
2809 For example,
2810
2811 @smallexample
2812 ;; @r{Highlight occurrences of the word @samp{anchor} in the value}
2813 ;; @r{of @code{anchor-face}, and subsequent occurrences of the word}
2814 ;; @r{@samp{item} (on the same line) in the value of @code{item-face}.}
2815 ("\\<anchor\\>" (0 anchor-face)
2816 ("\\<item\\>" nil nil (0 item-face)))
2817 @end smallexample
2818
2819 @item (eval . @var{form})
2820 Here @var{form} is an expression to be evaluated the first time
2821 this value of @code{font-lock-keywords} is used in a buffer.
2822 Its value should have one of the forms described in this table.
2823 @end table
2824
2825 @strong{Warning:} Do not design an element of @code{font-lock-keywords}
2826 to match text which spans lines; this does not work reliably.
2827 For details, see @xref{Multiline Font Lock}.
2828
2829 You can use @var{case-fold} in @code{font-lock-defaults} to specify
2830 the value of @code{font-lock-keywords-case-fold-search} which says
2831 whether search-based fontification should be case-insensitive.
2832
2833 @defvar font-lock-keywords-case-fold-search
2834 Non-@code{nil} means that regular expression matching for the sake of
2835 @code{font-lock-keywords} should be case-insensitive.
2836 @end defvar
2837
2838 @node Customizing Keywords
2839 @subsection Customizing Search-Based Fontification
2840
2841 You can use @code{font-lock-add-keywords} to add additional
2842 search-based fontification rules to a major mode, and
2843 @code{font-lock-remove-keywords} to remove rules.
2844
2845 @defun font-lock-add-keywords mode keywords &optional how
2846 This function adds highlighting @var{keywords}, for the current buffer
2847 or for major mode @var{mode}. The argument @var{keywords} should be a
2848 list with the same format as the variable @code{font-lock-keywords}.
2849
2850 If @var{mode} is a symbol which is a major mode command name, such as
2851 @code{c-mode}, the effect is that enabling Font Lock mode in
2852 @var{mode} will add @var{keywords} to @code{font-lock-keywords}.
2853 Calling with a non-@code{nil} value of @var{mode} is correct only in
2854 your @file{~/.emacs} file.
2855
2856 If @var{mode} is @code{nil}, this function adds @var{keywords} to
2857 @code{font-lock-keywords} in the current buffer. This way of calling
2858 @code{font-lock-add-keywords} is usually used in mode hook functions.
2859
2860 By default, @var{keywords} are added at the beginning of
2861 @code{font-lock-keywords}. If the optional argument @var{how} is
2862 @code{set}, they are used to replace the value of
2863 @code{font-lock-keywords}. If @var{how} is any other non-@code{nil}
2864 value, they are added at the end of @code{font-lock-keywords}.
2865
2866 Some modes provide specialized support you can use in additional
2867 highlighting patterns. See the variables
2868 @code{c-font-lock-extra-types}, @code{c++-font-lock-extra-types},
2869 and @code{java-font-lock-extra-types}, for example.
2870
2871 @strong{Warning:} Major mode commands must not call
2872 @code{font-lock-add-keywords} under any circumstances, either directly
2873 or indirectly, except through their mode hooks. (Doing so would lead to
2874 incorrect behavior for some minor modes.) They should set up their
2875 rules for search-based fontification by setting
2876 @code{font-lock-keywords}.
2877 @end defun
2878
2879 @defun font-lock-remove-keywords mode keywords
2880 This function removes @var{keywords} from @code{font-lock-keywords}
2881 for the current buffer or for major mode @var{mode}. As in
2882 @code{font-lock-add-keywords}, @var{mode} should be a major mode
2883 command name or @code{nil}. All the caveats and requirements for
2884 @code{font-lock-add-keywords} apply here too.
2885 @end defun
2886
2887 For example, the following code adds two fontification patterns for C
2888 mode: one to fontify the word @samp{FIXME}, even in comments, and
2889 another to fontify the words @samp{and}, @samp{or} and @samp{not} as
2890 keywords.
2891
2892 @smallexample
2893 (font-lock-add-keywords 'c-mode
2894 '(("\\<\\(FIXME\\):" 1 font-lock-warning-face prepend)
2895 ("\\<\\(and\\|or\\|not\\)\\>" . font-lock-keyword-face)))
2896 @end smallexample
2897
2898 @noindent
2899 This example affects only C mode proper. To add the same patterns to C
2900 mode @emph{and} all modes derived from it, do this instead:
2901
2902 @smallexample
2903 (add-hook 'c-mode-hook
2904 (lambda ()
2905 (font-lock-add-keywords nil
2906 '(("\\<\\(FIXME\\):" 1 font-lock-warning-face prepend)
2907 ("\\<\\(and\\|or\\|not\\)\\>" .
2908 font-lock-keyword-face)))))
2909 @end smallexample
2910
2911 @node Other Font Lock Variables
2912 @subsection Other Font Lock Variables
2913
2914 This section describes additional variables that a major mode can
2915 set by means of @var{other-vars} in @code{font-lock-defaults}
2916 (@pxref{Font Lock Basics}).
2917
2918 @defvar font-lock-mark-block-function
2919 If this variable is non-@code{nil}, it should be a function that is
2920 called with no arguments, to choose an enclosing range of text for
2921 refontification for the command @kbd{M-o M-o}
2922 (@code{font-lock-fontify-block}).
2923
2924 The function should report its choice by placing the region around it.
2925 A good choice is a range of text large enough to give proper results,
2926 but not too large so that refontification becomes slow. Typical values
2927 are @code{mark-defun} for programming modes or @code{mark-paragraph} for
2928 textual modes.
2929 @end defvar
2930
2931 @defvar font-lock-extra-managed-props
2932 This variable specifies additional properties (other than
2933 @code{font-lock-face}) that are being managed by Font Lock mode. It
2934 is used by @code{font-lock-default-unfontify-region}, which normally
2935 only manages the @code{font-lock-face} property. If you want Font
2936 Lock to manage other properties as well, you must specify them in a
2937 @var{facespec} in @code{font-lock-keywords} as well as add them to
2938 this list. @xref{Search-based Fontification}.
2939 @end defvar
2940
2941 @defvar font-lock-fontify-buffer-function
2942 Function to use for fontifying the buffer. The default value is
2943 @code{font-lock-default-fontify-buffer}.
2944 @end defvar
2945
2946 @defvar font-lock-unfontify-buffer-function
2947 Function to use for unfontifying the buffer. This is used when
2948 turning off Font Lock mode. The default value is
2949 @code{font-lock-default-unfontify-buffer}.
2950 @end defvar
2951
2952 @defvar font-lock-fontify-region-function
2953 Function to use for fontifying a region. It should take two
2954 arguments, the beginning and end of the region, and an optional third
2955 argument @var{verbose}. If @var{verbose} is non-@code{nil}, the
2956 function should print status messages. The default value is
2957 @code{font-lock-default-fontify-region}.
2958 @end defvar
2959
2960 @defvar font-lock-unfontify-region-function
2961 Function to use for unfontifying a region. It should take two
2962 arguments, the beginning and end of the region. The default value is
2963 @code{font-lock-default-unfontify-region}.
2964 @end defvar
2965
2966 @defun jit-lock-register function &optional contextual
2967 This function tells Font Lock mode to run the Lisp function
2968 @var{function} any time it has to fontify or refontify part of the
2969 current buffer. It calls @var{function} before calling the default
2970 fontification functions, and gives it two arguments, @var{start} and
2971 @var{end}, which specify the region to be fontified or refontified.
2972
2973 The optional argument @var{contextual}, if non-@code{nil}, forces Font
2974 Lock mode to always refontify a syntactically relevant part of the
2975 buffer, and not just the modified lines. This argument can usually be
2976 omitted.
2977 @end defun
2978
2979 @defun jit-lock-unregister function
2980 If @var{function} was previously registered as a fontification
2981 function using @code{jit-lock-register}, this function unregisters it.
2982 @end defun
2983
2984 @node Levels of Font Lock
2985 @subsection Levels of Font Lock
2986
2987 Some major modes offer three different levels of fontification. You
2988 can define multiple levels by using a list of symbols for @var{keywords}
2989 in @code{font-lock-defaults}. Each symbol specifies one level of
2990 fontification; it is up to the user to choose one of these levels,
2991 normally by setting @code{font-lock-maximum-decoration} (@pxref{Font
2992 Lock,,, emacs, the GNU Emacs Manual}). The chosen level's symbol value
2993 is used to initialize @code{font-lock-keywords}.
2994
2995 Here are the conventions for how to define the levels of
2996 fontification:
2997
2998 @itemize @bullet
2999 @item
3000 Level 1: highlight function declarations, file directives (such as include or
3001 import directives), strings and comments. The idea is speed, so only
3002 the most important and top-level components are fontified.
3003
3004 @item
3005 Level 2: in addition to level 1, highlight all language keywords,
3006 including type names that act like keywords, as well as named constant
3007 values. The idea is that all keywords (either syntactic or semantic)
3008 should be fontified appropriately.
3009
3010 @item
3011 Level 3: in addition to level 2, highlight the symbols being defined in
3012 function and variable declarations, and all builtin function names,
3013 wherever they appear.
3014 @end itemize
3015
3016 @node Precalculated Fontification
3017 @subsection Precalculated Fontification
3018
3019 Some major modes such as @code{list-buffers} and @code{occur}
3020 construct the buffer text programmatically. The easiest way for them
3021 to support Font Lock mode is to specify the faces of text when they
3022 insert the text in the buffer.
3023
3024 The way to do this is to specify the faces in the text with the
3025 special text property @code{font-lock-face} (@pxref{Special
3026 Properties}). When Font Lock mode is enabled, this property controls
3027 the display, just like the @code{face} property. When Font Lock mode
3028 is disabled, @code{font-lock-face} has no effect on the display.
3029
3030 It is ok for a mode to use @code{font-lock-face} for some text and
3031 also use the normal Font Lock machinery. But if the mode does not use
3032 the normal Font Lock machinery, it should not set the variable
3033 @code{font-lock-defaults}.
3034
3035 @node Faces for Font Lock
3036 @subsection Faces for Font Lock
3037 @cindex faces for font lock
3038 @cindex font lock faces
3039
3040 Font Lock mode can highlight using any face, but Emacs defines several
3041 faces specifically for Font Lock to use to highlight text. These
3042 @dfn{Font Lock faces} are listed below. They can also be used by major
3043 modes for syntactic highlighting outside of Font Lock mode (@pxref{Major
3044 Mode Conventions}).
3045
3046 Each of these symbols is both a face name, and a variable whose
3047 default value is the symbol itself. Thus, the default value of
3048 @code{font-lock-comment-face} is @code{font-lock-comment-face}.
3049
3050 The faces are listed with descriptions of their typical usage, and in
3051 order of greater to lesser ``prominence''. If a mode's syntactic
3052 categories do not fit well with the usage descriptions, the faces can be
3053 assigned using the ordering as a guide.
3054
3055 @table @code
3056 @item font-lock-warning-face
3057 @vindex font-lock-warning-face
3058 for a construct that is peculiar, or that greatly changes the meaning of
3059 other text, like @samp{;;;###autoload} in Emacs Lisp and @samp{#error}
3060 in C.
3061
3062 @item font-lock-function-name-face
3063 @vindex font-lock-function-name-face
3064 for the name of a function being defined or declared.
3065
3066 @item font-lock-variable-name-face
3067 @vindex font-lock-variable-name-face
3068 for the name of a variable being defined or declared.
3069
3070 @item font-lock-keyword-face
3071 @vindex font-lock-keyword-face
3072 for a keyword with special syntactic significance, like @samp{for} and
3073 @samp{if} in C.
3074
3075 @item font-lock-comment-face
3076 @vindex font-lock-comment-face
3077 for comments.
3078
3079 @item font-lock-comment-delimiter-face
3080 @vindex font-lock-comment-delimiter-face
3081 for comments delimiters, like @samp{/*} and @samp{*/} in C. On most
3082 terminals, this inherits from @code{font-lock-comment-face}.
3083
3084 @item font-lock-type-face
3085 @vindex font-lock-type-face
3086 for the names of user-defined data types.
3087
3088 @item font-lock-constant-face
3089 @vindex font-lock-constant-face
3090 for the names of constants, like @samp{NULL} in C.
3091
3092 @item font-lock-builtin-face
3093 @vindex font-lock-builtin-face
3094 for the names of built-in functions.
3095
3096 @item font-lock-preprocessor-face
3097 @vindex font-lock-preprocessor-face
3098 for preprocessor commands. This inherits, by default, from
3099 @code{font-lock-builtin-face}.
3100
3101 @item font-lock-string-face
3102 @vindex font-lock-string-face
3103 for string constants.
3104
3105 @item font-lock-doc-face
3106 @vindex font-lock-doc-face
3107 for documentation strings in the code. This inherits, by default, from
3108 @code{font-lock-string-face}.
3109
3110 @item font-lock-negation-char-face
3111 @vindex font-lock-negation-char-face
3112 for easily-overlooked negation characters.
3113 @end table
3114
3115 @node Syntactic Font Lock
3116 @subsection Syntactic Font Lock
3117 @cindex syntactic font lock
3118
3119 Syntactic fontification uses a syntax table (@pxref{Syntax Tables}) to
3120 find and highlight syntactically relevant text. If enabled, it runs
3121 prior to search-based fontification. The variable
3122 @code{font-lock-syntactic-face-function}, documented below, determines
3123 which syntactic constructs to highlight. There are several variables
3124 that affect syntactic fontification; you should set them by means of
3125 @code{font-lock-defaults} (@pxref{Font Lock Basics}).
3126
3127 Whenever Font Lock mode performs syntactic fontification on a stretch
3128 of text, it first calls the function specified by
3129 @code{syntax-propertize-function}. Major modes can use this to apply
3130 @code{syntax-table} text properties to override the buffer's syntax
3131 table in special cases. @xref{Syntax Properties}.
3132
3133 @defvar font-lock-keywords-only
3134 If the value of this variable is non-@code{nil}, Font Lock does not do
3135 syntactic fontification, only search-based fontification based on
3136 @code{font-lock-keywords}. It is normally set by Font Lock mode based
3137 on the @var{keywords-only} element in @code{font-lock-defaults}.
3138 @end defvar
3139
3140 @defvar font-lock-syntax-table
3141 This variable holds the syntax table to use for fontification of
3142 comments and strings. It is normally set by Font Lock mode based on the
3143 @var{syntax-alist} element in @code{font-lock-defaults}. If this value
3144 is @code{nil}, syntactic fontification uses the buffer's syntax table
3145 (the value returned by the function @code{syntax-table}; @pxref{Syntax
3146 Table Functions}).
3147 @end defvar
3148
3149 @defvar font-lock-beginning-of-syntax-function
3150 If this variable is non-@code{nil}, it should be a function to move
3151 point back to a position that is syntactically at ``top level'' and
3152 outside of strings or comments. The value is normally set through an
3153 @var{other-vars} element in @code{font-lock-defaults}. If it is
3154 @code{nil}, Font Lock uses @code{syntax-begin-function} to move back
3155 outside of any comment, string, or sexp (@pxref{Position Parse}).
3156
3157 This variable is semi-obsolete; we usually recommend setting
3158 @code{syntax-begin-function} instead. One of its uses is to tune the
3159 behavior of syntactic fontification, e.g.@: to ensure that different
3160 kinds of strings or comments are highlighted differently.
3161
3162 The specified function is called with no arguments. It should leave
3163 point at the beginning of any enclosing syntactic block. Typical values
3164 are @code{beginning-of-line} (used when the start of the line is known
3165 to be outside a syntactic block), or @code{beginning-of-defun} for
3166 programming modes, or @code{backward-paragraph} for textual modes.
3167 @end defvar
3168
3169 @defvar font-lock-syntactic-face-function
3170 If this variable is non-@code{nil}, it should be a function to determine
3171 which face to use for a given syntactic element (a string or a comment).
3172 The value is normally set through an @var{other-vars} element in
3173 @code{font-lock-defaults}.
3174
3175 The function is called with one argument, the parse state at point
3176 returned by @code{parse-partial-sexp}, and should return a face. The
3177 default value returns @code{font-lock-comment-face} for comments and
3178 @code{font-lock-string-face} for strings (@pxref{Faces for Font Lock}).
3179 @end defvar
3180
3181 @node Multiline Font Lock
3182 @subsection Multiline Font Lock Constructs
3183 @cindex multiline font lock
3184
3185 Normally, elements of @code{font-lock-keywords} should not match
3186 across multiple lines; that doesn't work reliably, because Font Lock
3187 usually scans just part of the buffer, and it can miss a multi-line
3188 construct that crosses the line boundary where the scan starts. (The
3189 scan normally starts at the beginning of a line.)
3190
3191 Making elements that match multiline constructs work properly has
3192 two aspects: correct @emph{identification} and correct
3193 @emph{rehighlighting}. The first means that Font Lock finds all
3194 multiline constructs. The second means that Font Lock will correctly
3195 rehighlight all the relevant text when a multiline construct is
3196 changed---for example, if some of the text that was previously part of
3197 a multiline construct ceases to be part of it. The two aspects are
3198 closely related, and often getting one of them to work will appear to
3199 make the other also work. However, for reliable results you must
3200 attend explicitly to both aspects.
3201
3202 There are three ways to ensure correct identification of multiline
3203 constructs:
3204
3205 @itemize
3206 @item
3207 Add a function to @code{font-lock-extend-region-functions} that does
3208 the @emph{identification} and extends the scan so that the scanned
3209 text never starts or ends in the middle of a multiline construct.
3210 @item
3211 Use the @code{font-lock-fontify-region-function} hook similarly to
3212 extend the scan so that the scanned text never starts or ends in the
3213 middle of a multiline construct.
3214 @item
3215 Somehow identify the multiline construct right when it gets inserted
3216 into the buffer (or at any point after that but before font-lock
3217 tries to highlight it), and mark it with a @code{font-lock-multiline}
3218 which will instruct font-lock not to start or end the scan in the
3219 middle of the construct.
3220 @end itemize
3221
3222 There are three ways to do rehighlighting of multiline constructs:
3223
3224 @itemize
3225 @item
3226 Place a @code{font-lock-multiline} property on the construct. This
3227 will rehighlight the whole construct if any part of it is changed. In
3228 some cases you can do this automatically by setting the
3229 @code{font-lock-multiline} variable, which see.
3230 @item
3231 Make sure @code{jit-lock-contextually} is set and rely on it doing its
3232 job. This will only rehighlight the part of the construct that
3233 follows the actual change, and will do it after a short delay.
3234 This only works if the highlighting of the various parts of your
3235 multiline construct never depends on text in subsequent lines.
3236 Since @code{jit-lock-contextually} is activated by default, this can
3237 be an attractive solution.
3238 @item
3239 Place a @code{jit-lock-defer-multiline} property on the construct.
3240 This works only if @code{jit-lock-contextually} is used, and with the
3241 same delay before rehighlighting, but like @code{font-lock-multiline},
3242 it also handles the case where highlighting depends on
3243 subsequent lines.
3244 @end itemize
3245
3246 @menu
3247 * Font Lock Multiline:: Marking multiline chunks with a text property.
3248 * Region to Refontify:: Controlling which region gets refontified
3249 after a buffer change.
3250 @end menu
3251
3252 @node Font Lock Multiline
3253 @subsubsection Font Lock Multiline
3254
3255 One way to ensure reliable rehighlighting of multiline Font Lock
3256 constructs is to put on them the text property @code{font-lock-multiline}.
3257 It should be present and non-@code{nil} for text that is part of a
3258 multiline construct.
3259
3260 When Font Lock is about to highlight a range of text, it first
3261 extends the boundaries of the range as necessary so that they do not
3262 fall within text marked with the @code{font-lock-multiline} property.
3263 Then it removes any @code{font-lock-multiline} properties from the
3264 range, and highlights it. The highlighting specification (mostly
3265 @code{font-lock-keywords}) must reinstall this property each time,
3266 whenever it is appropriate.
3267
3268 @strong{Warning:} don't use the @code{font-lock-multiline} property
3269 on large ranges of text, because that will make rehighlighting slow.
3270
3271 @defvar font-lock-multiline
3272 If the @code{font-lock-multiline} variable is set to @code{t}, Font
3273 Lock will try to add the @code{font-lock-multiline} property
3274 automatically on multiline constructs. This is not a universal
3275 solution, however, since it slows down Font Lock somewhat. It can
3276 miss some multiline constructs, or make the property larger or smaller
3277 than necessary.
3278
3279 For elements whose @var{matcher} is a function, the function should
3280 ensure that submatch 0 covers the whole relevant multiline construct,
3281 even if only a small subpart will be highlighted. It is often just as
3282 easy to add the @code{font-lock-multiline} property by hand.
3283 @end defvar
3284
3285 The @code{font-lock-multiline} property is meant to ensure proper
3286 refontification; it does not automatically identify new multiline
3287 constructs. Identifying the requires that Font Lock mode operate on
3288 large enough chunks at a time. This will happen by accident on many
3289 cases, which may give the impression that multiline constructs magically
3290 work. If you set the @code{font-lock-multiline} variable
3291 non-@code{nil}, this impression will be even stronger, since the
3292 highlighting of those constructs which are found will be properly
3293 updated from then on. But that does not work reliably.
3294
3295 To find multiline constructs reliably, you must either manually place
3296 the @code{font-lock-multiline} property on the text before Font Lock
3297 mode looks at it, or use @code{font-lock-fontify-region-function}.
3298
3299 @node Region to Refontify
3300 @subsubsection Region to Fontify after a Buffer Change
3301
3302 When a buffer is changed, the region that Font Lock refontifies is
3303 by default the smallest sequence of whole lines that spans the change.
3304 While this works well most of the time, sometimes it doesn't---for
3305 example, when a change alters the syntactic meaning of text on an
3306 earlier line.
3307
3308 You can enlarge (or even reduce) the region to refontify by setting
3309 the following variable:
3310
3311 @defvar font-lock-extend-after-change-region-function
3312 This buffer-local variable is either @code{nil} or a function for Font
3313 Lock mode to call to determine the region to scan and fontify.
3314
3315 The function is given three parameters, the standard @var{beg},
3316 @var{end}, and @var{old-len} from @code{after-change-functions}
3317 (@pxref{Change Hooks}). It should return either a cons of the
3318 beginning and end buffer positions (in that order) of the region to
3319 fontify, or @code{nil} (which means choose the region in the standard
3320 way). This function needs to preserve point, the match-data, and the
3321 current restriction. The region it returns may start or end in the
3322 middle of a line.
3323
3324 Since this function is called after every buffer change, it should be
3325 reasonably fast.
3326 @end defvar
3327
3328 @node Auto-Indentation
3329 @section Automatic Indentation of code
3330
3331 For programming languages, an important feature of a major mode is to
3332 provide automatic indentation. This is controlled in Emacs by
3333 @code{indent-line-function} (@pxref{Mode-Specific Indent}).
3334 Writing a good indentation function can be difficult and to a large
3335 extent it is still a black art.
3336
3337 Many major mode authors will start by writing a simple indentation
3338 function that works for simple cases, for example by comparing with the
3339 indentation of the previous text line. For most programming languages
3340 that are not really line-based, this tends to scale very poorly:
3341 improving such a function to let it handle more diverse situations tends
3342 to become more and more difficult, resulting in the end with a large,
3343 complex, unmaintainable indentation function which nobody dares to touch.
3344
3345 A good indentation function will usually need to actually parse the
3346 text, according to the syntax of the language. Luckily, it is not
3347 necessary to parse the text in as much detail as would be needed
3348 for a compiler, but on the other hand, the parser embedded in the
3349 indentation code will want to be somewhat friendly to syntactically
3350 incorrect code.
3351
3352 Good maintainable indentation functions usually fall into two categories:
3353 either parsing forward from some ``safe'' starting point until the
3354 position of interest, or parsing backward from the position of interest.
3355 Neither of the two is a clearly better choice than the other: parsing
3356 backward is often more difficult than parsing forward because
3357 programming languages are designed to be parsed forward, but for the
3358 purpose of indentation it has the advantage of not needing to
3359 guess a ``safe'' starting point, and it generally enjoys the property
3360 that only a minimum of text will be analyzed to decide the indentation
3361 of a line, so indentation will tend to be unaffected by syntax errors in
3362 some earlier unrelated piece of code. Parsing forward on the other hand
3363 is usually easier and has the advantage of making it possible to
3364 reindent efficiently a whole region at a time, with a single parse.
3365
3366 Rather than write your own indentation function from scratch, it is
3367 often preferable to try and reuse some existing ones or to rely
3368 on a generic indentation engine. There are sadly few such
3369 engines. The CC-mode indentation code (used with C, C++, Java, Awk
3370 and a few other such modes) has been made more generic over the years,
3371 so if your language seems somewhat similar to one of those languages,
3372 you might try to use that engine. @c FIXME: documentation?
3373 Another one is SMIE which takes an approach in the spirit
3374 of Lisp sexps and adapts it to non-Lisp languages.
3375
3376 @menu
3377 * SMIE:: A simple minded indentation engine.
3378 @end menu
3379
3380 @node SMIE
3381 @subsection Simple Minded Indentation Engine
3382
3383 SMIE is a package that provides a generic navigation and indentation
3384 engine. Based on a very simple parser using an ``operator precedence
3385 grammar'', it lets major modes extend the sexp-based navigation of Lisp
3386 to non-Lisp languages as well as provide a simple to use but reliable
3387 auto-indentation.
3388
3389 Operator precedence grammar is a very primitive technology for parsing
3390 compared to some of the more common techniques used in compilers.
3391 It has the following characteristics: its parsing power is very limited,
3392 and it is largely unable to detect syntax errors, but it has the
3393 advantage of being algorithmically efficient and able to parse forward
3394 just as well as backward. In practice that means that SMIE can use it
3395 for indentation based on backward parsing, that it can provide both
3396 @code{forward-sexp} and @code{backward-sexp} functionality, and that it
3397 will naturally work on syntactically incorrect code without any extra
3398 effort. The downside is that it also means that most programming
3399 languages cannot be parsed correctly using SMIE, at least not without
3400 resorting to some special tricks (@pxref{SMIE Tricks}).
3401
3402 @menu
3403 * SMIE setup:: SMIE setup and features.
3404 * Operator Precedence Grammars:: A very simple parsing technique.
3405 * SMIE Grammar:: Defining the grammar of a language.
3406 * SMIE Lexer:: Defining tokens.
3407 * SMIE Tricks:: Working around the parser's limitations.
3408 * SMIE Indentation:: Specifying indentation rules.
3409 * SMIE Indentation Helpers:: Helper functions for indentation rules.
3410 * SMIE Indentation Example:: Sample indentation rules.
3411 @end menu
3412
3413 @node SMIE setup
3414 @subsubsection SMIE Setup and Features
3415
3416 SMIE is meant to be a one-stop shop for structural navigation and
3417 various other features which rely on the syntactic structure of code, in
3418 particular automatic indentation. The main entry point is
3419 @code{smie-setup} which is a function typically called while setting
3420 up a major mode.
3421
3422 @defun smie-setup grammar rules-function &rest keywords
3423 Setup SMIE navigation and indentation.
3424 @var{grammar} is a grammar table generated by @code{smie-prec2->grammar}.
3425 @var{rules-function} is a set of indentation rules for use on
3426 @code{smie-rules-function}.
3427 @var{keywords} are additional arguments, which can include the following
3428 keywords:
3429 @itemize
3430 @item
3431 @code{:forward-token} @var{fun}: Specify the forward lexer to use.
3432 @item
3433 @code{:backward-token} @var{fun}: Specify the backward lexer to use.
3434 @end itemize
3435 @end defun
3436
3437 Calling this function is sufficient to make commands such as
3438 @code{forward-sexp}, @code{backward-sexp}, and @code{transpose-sexps} be
3439 able to properly handle structural elements other than just the paired
3440 parentheses already handled by syntax tables. For example, if the
3441 provided grammar is precise enough, @code{transpose-sexps} can correctly
3442 transpose the two arguments of a @code{+} operator, taking into account
3443 the precedence rules of the language.
3444
3445 Calling `smie-setup' is also sufficient to make TAB indentation work in
3446 the expected way, extends @code{blink-matching-paren} to apply to
3447 elements like @code{begin...end}, and provides some commands that you
3448 can bind in the major mode keymap.
3449
3450 @deffn Command smie-close-block
3451 This command closes the most recently opened (and not yet closed) block.
3452 @end deffn
3453
3454 @deffn Command smie-down-list &optional arg
3455 This command is like @code{down-list} but it also pays attention to
3456 nesting of tokens other than parentheses, such as @code{begin...end}.
3457 @end deffn
3458
3459 @node Operator Precedence Grammars
3460 @subsubsection Operator Precedence Grammars
3461
3462 SMIE's precedence grammars simply give to each token a pair of
3463 precedences: the left-precedence and the right-precedence. We say
3464 @code{T1 < T2} if the right-precedence of token @code{T1} is less than
3465 the left-precedence of token @code{T2}. A good way to read this
3466 @code{<} is as a kind of parenthesis: if we find @code{... T1 something
3467 T2 ...} then that should be parsed as @code{... T1 (something T2 ...}
3468 rather than as @code{... T1 something) T2 ...}. The latter
3469 interpretation would be the case if we had @code{T1 > T2}. If we have
3470 @code{T1 = T2}, it means that token T2 follows token T1 in the same
3471 syntactic construction, so typically we have @code{"begin" = "end"}.
3472 Such pairs of precedences are sufficient to express left-associativity
3473 or right-associativity of infix operators, nesting of tokens like
3474 parentheses and many other cases.
3475
3476 @c Let's leave this undocumented to leave it more open for change!
3477 @c @defvar smie-grammar
3478 @c The value of this variable is an alist specifying the left and right
3479 @c precedence of each token. It is meant to be initialized by using one of
3480 @c the functions below.
3481 @c @end defvar
3482
3483 @defun smie-prec2->grammar table
3484 This function takes a @emph{prec2} grammar @var{table} and returns an
3485 alist suitable for use in @code{smie-setup}. The @emph{prec2}
3486 @var{table} is itself meant to be built by one of the functions below.
3487 @end defun
3488
3489 @defun smie-merge-prec2s &rest tables
3490 This function takes several @emph{prec2} @var{tables} and merges them
3491 into a new @emph{prec2} table.
3492 @end defun
3493
3494 @defun smie-precs->prec2 precs
3495 This function builds a @emph{prec2} table from a table of precedences
3496 @var{precs}. @var{precs} should be a list, sorted by precedence (for
3497 example @code{"+"} will come before @code{"*"}), of elements of the form
3498 @code{(@var{assoc} @var{op} ...)}, where each @var{op} is a token that
3499 acts as an operator; @var{assoc} is their associativity, which can be
3500 either @code{left}, @code{right}, @code{assoc}, or @code{nonassoc}.
3501 All operators in a given element share the same precedence level
3502 and associativity.
3503 @end defun
3504
3505 @defun smie-bnf->prec2 bnf &rest resolvers
3506 This function lets you specify the grammar using a BNF notation.
3507 It accepts a @var{bnf} description of the grammar along with a set of
3508 conflict resolution rules @var{resolvers}, and
3509 returns a @emph{prec2} table.
3510
3511 @var{bnf} is a list of nonterminal definitions of the form
3512 @code{(@var{nonterm} @var{rhs1} @var{rhs2} ...)} where each @var{rhs}
3513 is a (non-empty) list of terminals (aka tokens) or non-terminals.
3514
3515 Not all grammars are accepted:
3516 @itemize
3517 @item
3518 An @var{rhs} cannot be an empty list (an empty list is never needed,
3519 since SMIE allows all non-terminals to match the empty string anyway).
3520 @item
3521 An @var{rhs} cannot have 2 consecutive non-terminals: each pair of
3522 non-terminals needs to be separated by a terminal (aka token).
3523 This is a fundamental limitation of operator precedence grammars.
3524 @end itemize
3525
3526 Additionally, conflicts can occur:
3527 @itemize
3528 @item
3529 The returned @emph{prec2} table holds constraints between pairs of tokens, and
3530 for any given pair only one constraint can be present: T1 < T2,
3531 T1 = T2, or T1 > T2.
3532 @item
3533 A token can be an @code{opener} (something similar to an open-paren),
3534 a @code{closer} (like a close-paren), or @code{neither} of the two
3535 (e.g. an infix operator, or an inner token like @code{"else"}).
3536 @end itemize
3537
3538 Precedence conflicts can be resolved via @var{resolvers}, which
3539 is a list of @emph{precs} tables (see @code{smie-precs->prec2}): for
3540 each precedence conflict, if those @code{precs} tables
3541 specify a particular constraint, then the conflict is resolved by using
3542 this constraint instead, else a conflict is reported and one of the
3543 conflicting constraints is picked arbitrarily and the others are
3544 simply ignored.
3545 @end defun
3546
3547 @node SMIE Grammar
3548 @subsubsection Defining the Grammar of a Language
3549
3550 The usual way to define the SMIE grammar of a language is by
3551 defining a new global variable that holds the precedence table by
3552 giving a set of BNF rules.
3553 For example, the grammar definition for a small Pascal-like language
3554 could look like:
3555 @example
3556 @group
3557 (require 'smie)
3558 (defvar sample-smie-grammar
3559 (smie-prec2->grammar
3560 (smie-bnf->prec2
3561 @end group
3562 @group
3563 '((id)
3564 (inst ("begin" insts "end")
3565 ("if" exp "then" inst "else" inst)
3566 (id ":=" exp)
3567 (exp))
3568 (insts (insts ";" insts) (inst))
3569 (exp (exp "+" exp)
3570 (exp "*" exp)
3571 ("(" exps ")"))
3572 (exps (exps "," exps) (exp)))
3573 @end group
3574 @group
3575 '((assoc ";"))
3576 '((assoc ","))
3577 '((assoc "+") (assoc "*")))))
3578 @end group
3579 @end example
3580
3581 @noindent
3582 A few things to note:
3583
3584 @itemize
3585 @item
3586 The above grammar does not explicitly mention the syntax of function
3587 calls: SMIE will automatically allow any sequence of sexps, such as
3588 identifiers, balanced parentheses, or @code{begin ... end} blocks
3589 to appear anywhere anyway.
3590 @item
3591 The grammar category @code{id} has no right hand side: this does not
3592 mean that it can match only the empty string, since as mentioned any
3593 sequence of sexps can appear anywhere anyway.
3594 @item
3595 Because non terminals cannot appear consecutively in the BNF grammar, it
3596 is difficult to correctly handle tokens that act as terminators, so the
3597 above grammar treats @code{";"} as a statement @emph{separator} instead,
3598 which SMIE can handle very well.
3599 @item
3600 Separators used in sequences (such as @code{","} and @code{";"} above)
3601 are best defined with BNF rules such as @code{(foo (foo "separator" foo) ...)}
3602 which generate precedence conflicts which are then resolved by giving
3603 them an explicit @code{(assoc "separator")}.
3604 @item
3605 The @code{("(" exps ")")} rule was not needed to pair up parens, since
3606 SMIE will pair up any characters that are marked as having paren syntax
3607 in the syntax table. What this rule does instead (together with the
3608 definition of @code{exps}) is to make it clear that @code{","} should
3609 not appear outside of parentheses.
3610 @item
3611 Rather than have a single @emph{precs} table to resolve conflicts, it is
3612 preferable to have several tables, so as to let the BNF part of the
3613 grammar specify relative precedences where possible.
3614 @item
3615 Unless there is a very good reason to prefer @code{left} or
3616 @code{right}, it is usually preferable to mark operators as associative,
3617 using @code{assoc}. For that reason @code{"+"} and @code{"*"} are
3618 defined above as @code{assoc}, although the language defines them
3619 formally as left associative.
3620 @end itemize
3621
3622 @node SMIE Lexer
3623 @subsubsection Defining Tokens
3624
3625 SMIE comes with a predefined lexical analyzer which uses syntax tables
3626 in the following way: any sequence of characters that have word or
3627 symbol syntax is considered a token, and so is any sequence of
3628 characters that have punctuation syntax. This default lexer is
3629 often a good starting point but is rarely actually correct for any given
3630 language. For example, it will consider @code{"2,+3"} to be composed
3631 of 3 tokens: @code{"2"}, @code{",+"}, and @code{"3"}.
3632
3633 To describe the lexing rules of your language to SMIE, you need
3634 2 functions, one to fetch the next token, and another to fetch the
3635 previous token. Those functions will usually first skip whitespace and
3636 comments and then look at the next chunk of text to see if it
3637 is a special token. If so it should skip the token and
3638 return a description of this token. Usually this is simply the string
3639 extracted from the buffer, but it can be anything you want.
3640 For example:
3641 @example
3642 @group
3643 (defvar sample-keywords-regexp
3644 (regexp-opt '("+" "*" "," ";" ">" ">=" "<" "<=" ":=" "=")))
3645 @end group
3646 @group
3647 (defun sample-smie-forward-token ()
3648 (forward-comment (point-max))
3649 (cond
3650 ((looking-at sample-keywords-regexp)
3651 (goto-char (match-end 0))
3652 (match-string-no-properties 0))
3653 (t (buffer-substring-no-properties
3654 (point)
3655 (progn (skip-syntax-forward "w_")
3656 (point))))))
3657 @end group
3658 @group
3659 (defun sample-smie-backward-token ()
3660 (forward-comment (- (point)))
3661 (cond
3662 ((looking-back sample-keywords-regexp (- (point) 2) t)
3663 (goto-char (match-beginning 0))
3664 (match-string-no-properties 0))
3665 (t (buffer-substring-no-properties
3666 (point)
3667 (progn (skip-syntax-backward "w_")
3668 (point))))))
3669 @end group
3670 @end example
3671
3672 Notice how those lexers return the empty string when in front of
3673 parentheses. This is because SMIE automatically takes care of the
3674 parentheses defined in the syntax table. More specifically if the lexer
3675 returns nil or an empty string, SMIE tries to handle the corresponding
3676 text as a sexp according to syntax tables.
3677
3678 @node SMIE Tricks
3679 @subsubsection Living With a Weak Parser
3680
3681 The parsing technique used by SMIE does not allow tokens to behave
3682 differently in different contexts. For most programming languages, this
3683 manifests itself by precedence conflicts when converting the
3684 BNF grammar.
3685
3686 Sometimes, those conflicts can be worked around by expressing the
3687 grammar slightly differently. For example, for Modula-2 it might seem
3688 natural to have a BNF grammar that looks like this:
3689
3690 @example
3691 ...
3692 (inst ("IF" exp "THEN" insts "ELSE" insts "END")
3693 ("CASE" exp "OF" cases "END")
3694 ...)
3695 (cases (cases "|" cases)
3696 (caselabel ":" insts)
3697 ("ELSE" insts))
3698 ...
3699 @end example
3700
3701 But this will create conflicts for @code{"ELSE"}: on the one hand, the
3702 IF rule implies (among many other things) that @code{"ELSE" = "END"};
3703 but on the other hand, since @code{"ELSE"} appears within @code{cases},
3704 which appears left of @code{"END"}, we also have @code{"ELSE" > "END"}.
3705 We can solve the conflict either by using:
3706 @example
3707 ...
3708 (inst ("IF" exp "THEN" insts "ELSE" insts "END")
3709 ("CASE" exp "OF" cases "END")
3710 ("CASE" exp "OF" cases "ELSE" insts "END")
3711 ...)
3712 (cases (cases "|" cases) (caselabel ":" insts))
3713 ...
3714 @end example
3715 or
3716 @example
3717 ...
3718 (inst ("IF" exp "THEN" else "END")
3719 ("CASE" exp "OF" cases "END")
3720 ...)
3721 (else (insts "ELSE" insts))
3722 (cases (cases "|" cases) (caselabel ":" insts) (else))
3723 ...
3724 @end example
3725
3726 Reworking the grammar to try and solve conflicts has its downsides, tho,
3727 because SMIE assumes that the grammar reflects the logical structure of
3728 the code, so it is preferable to keep the BNF closer to the intended
3729 abstract syntax tree.
3730
3731 Other times, after careful consideration you may conclude that those
3732 conflicts are not serious and simply resolve them via the
3733 @var{resolvers} argument of @code{smie-bnf->prec2}. Usually this is
3734 because the grammar is simply ambiguous: the conflict does not affect
3735 the set of programs described by the grammar, but only the way those
3736 programs are parsed. This is typically the case for separators and
3737 associative infix operators, where you want to add a resolver like
3738 @code{'((assoc "|"))}. Another case where this can happen is for the
3739 classic @emph{dangling else} problem, where you will use @code{'((assoc
3740 "else" "then"))}. It can also happen for cases where the conflict is
3741 real and cannot really be resolved, but it is unlikely to pose a problem
3742 in practice.
3743
3744 Finally, in many cases some conflicts will remain despite all efforts to
3745 restructure the grammar. Do not despair: while the parser cannot be
3746 made more clever, you can make the lexer as smart as you want. So, the
3747 solution is then to look at the tokens involved in the conflict and to
3748 split one of those tokens into 2 (or more) different tokens. E.g. if
3749 the grammar needs to distinguish between two incompatible uses of the
3750 token @code{"begin"}, make the lexer return different tokens (say
3751 @code{"begin-fun"} and @code{"begin-plain"}) depending on which kind of
3752 @code{"begin"} it finds. This pushes the work of distinguishing the
3753 different cases to the lexer, which will thus have to look at the
3754 surrounding text to find ad-hoc clues.
3755
3756 @node SMIE Indentation
3757 @subsubsection Specifying Indentation Rules
3758
3759 Based on the provided grammar, SMIE will be able to provide automatic
3760 indentation without any extra effort. But in practice, this default
3761 indentation style will probably not be good enough. You will want to
3762 tweak it in many different cases.
3763
3764 SMIE indentation is based on the idea that indentation rules should be
3765 as local as possible. To this end, it relies on the idea of
3766 @emph{virtual} indentation, which is the indentation that a particular
3767 program point would have if it were at the beginning of a line.
3768 Of course, if that program point is indeed at the beginning of a line,
3769 its virtual indentation is its current indentation. But if not, then
3770 SMIE uses the indentation algorithm to compute the virtual indentation
3771 of that point. Now in practice, the virtual indentation of a program
3772 point does not have to be identical to the indentation it would have if
3773 we inserted a newline before it. To see how this works, the SMIE rule
3774 for indentation after a @code{@{} in C does not care whether the
3775 @code{@{} is standing on a line of its own or is at the end of the
3776 preceding line. Instead, these different cases are handled in the
3777 indentation rule that decides how to indent before a @code{@{}.
3778
3779 Another important concept is the notion of @emph{parent}: The
3780 @emph{parent} of a token, is the head token of the nearest enclosing
3781 syntactic construct. For example, the parent of an @code{else} is the
3782 @code{if} to which it belongs, and the parent of an @code{if}, in turn,
3783 is the lead token of the surrounding construct. The command
3784 @code{backward-sexp} jumps from a token to its parent, but there are
3785 some caveats: for @emph{openers} (tokens which start a construct, like
3786 @code{if}), you need to start with point before the token, while for
3787 others you need to start with point after the token.
3788 @code{backward-sexp} stops with point before the parent token if that is
3789 the @emph{opener} of the token of interest, and otherwise it stops with
3790 point after the parent token.
3791
3792 SMIE indentation rules are specified using a function that takes two
3793 arguments @var{method} and @var{arg} where the meaning of @var{arg} and the
3794 expected return value depend on @var{method}.
3795
3796 @var{method} can be:
3797 @itemize
3798 @item
3799 @code{:after}, in which case @var{arg} is a token and the function
3800 should return the @var{offset} to use for indentation after @var{arg}.
3801 @item
3802 @code{:before}, in which case @var{arg} is a token and the function
3803 should return the @var{offset} to use to indent @var{arg} itself.
3804 @item
3805 @code{:elem}, in which case the function should return either the offset
3806 to use to indent function arguments (if @var{arg} is the symbol
3807 @code{arg}) or the basic indentation step (if @var{arg} is the symbol
3808 @code{basic}).
3809 @item
3810 @code{:list-intro}, in which case @var{arg} is a token and the function
3811 should return non-@code{nil} if the token is followed by a list of
3812 expressions (not separated by any token) rather than an expression.
3813 @end itemize
3814
3815 When @var{arg} is a token, the function is called with point just before
3816 that token. A return value of nil always means to fallback on the
3817 default behavior, so the function should return nil for arguments it
3818 does not expect.
3819
3820 @var{offset} can be:
3821 @itemize
3822 @item
3823 @code{nil}: use the default indentation rule.
3824 @item
3825 @code{(column . @var{column})}: indent to column @var{column}.
3826 @item
3827 @var{number}: offset by @var{number}, relative to a base token which is
3828 the current token for @code{:after} and its parent for @code{:before}.
3829 @end itemize
3830
3831 @node SMIE Indentation Helpers
3832 @subsubsection Helper Functions for Indentation Rules
3833
3834 SMIE provides various functions designed specifically for use in the
3835 indentation rules function (several of those functions break if used in
3836 another context). These functions all start with the prefix
3837 @code{smie-rule-}.
3838
3839 @defun smie-rule-bolp
3840 Return non-@code{nil} if the current token is the first on the line.
3841 @end defun
3842
3843 @defun smie-rule-hanging-p
3844 Return non-@code{nil} if the current token is @emph{hanging}.
3845 A token is @emph{hanging} if it is the last token on the line
3846 and if it is preceded by other tokens: a lone token on a line is not
3847 hanging.
3848 @end defun
3849
3850 @defun smie-rule-next-p &rest tokens
3851 Return non-@code{nil} if the next token is among @var{tokens}.
3852 @end defun
3853
3854 @defun smie-rule-prev-p &rest tokens
3855 Return non-@code{nil} if the previous token is among @var{tokens}.
3856 @end defun
3857
3858 @defun smie-rule-parent-p &rest parents
3859 Return non-@code{nil} if the current token's parent is among @var{parents}.
3860 @end defun
3861
3862 @defun smie-rule-sibling-p
3863 Return non-nil if the current token's parent is actually a sibling.
3864 This is the case for example when the parent of a @code{","} is just the
3865 previous @code{","}.
3866 @end defun
3867
3868 @defun smie-rule-parent &optional offset
3869 Return the proper offset to align the current token with the parent.
3870 If non-@code{nil}, @var{offset} should be an integer giving an
3871 additional offset to apply.
3872 @end defun
3873
3874 @defun smie-rule-separator method
3875 Indent current token as a @emph{separator}.
3876
3877 By @emph{separator}, we mean here a token whose sole purpose is to
3878 separate various elements within some enclosing syntactic construct, and
3879 which does not have any semantic significance in itself (i.e. it would
3880 typically not exist as a node in an abstract syntax tree).
3881
3882 Such a token is expected to have an associative syntax and be closely
3883 tied to its syntactic parent. Typical examples are @code{","} in lists
3884 of arguments (enclosed inside parentheses), or @code{";"} in sequences
3885 of instructions (enclosed in a @code{@{...@}} or @code{begin...end}
3886 block).
3887
3888 @var{method} should be the method name that was passed to
3889 `smie-rules-function'.
3890 @end defun
3891
3892 @node SMIE Indentation Example
3893 @subsubsection Sample Indentation Rules
3894
3895 Here is an example of an indentation function:
3896
3897 @example
3898 (defun sample-smie-rules (kind token)
3899 (pcase (cons kind token)
3900 (`(:elem . basic) sample-indent-basic)
3901 (`(,_ . ",") (smie-rule-separator kind))
3902 (`(:after . ":=") sample-indent-basic)
3903 (`(:before . ,(or `"begin" `"(" `"@{")))
3904 (if (smie-rule-hanging-p) (smie-rule-parent)))
3905 (`(:before . "if")
3906 (and (not (smie-rule-bolp)) (smie-rule-prev-p "else")
3907 (smie-rule-parent)))))
3908 @end example
3909
3910 @noindent
3911 A few things to note:
3912
3913 @itemize
3914 @item
3915 The first case indicates the basic indentation increment to use.
3916 If @code{sample-indent-basic} is nil, then SMIE uses the global
3917 setting @code{smie-indent-basic}. The major mode could have set
3918 @code{smie-indent-basic} buffer-locally instead, but that
3919 is discouraged.
3920
3921 @item
3922 The rule for the token @code{","} make SMIE try to be more clever when
3923 the comma separator is placed at the beginning of lines. It tries to
3924 outdent the separator so as to align the code after the comma; for
3925 example:
3926
3927 @example
3928 x = longfunctionname (
3929 arg1
3930 , arg2
3931 );
3932 @end example
3933
3934 @item
3935 The rule for indentation after @code{":="} exists because otherwise
3936 SMIE would treat @code{":="} as an infix operator and would align the
3937 right argument with the left one.
3938
3939 @item
3940 The rule for indentation before @code{"begin"} is an example of the use
3941 of virtual indentation: This rule is used only when @code{"begin"} is
3942 hanging, which can happen only when @code{"begin"} is not at the
3943 beginning of a line. So this is not used when indenting
3944 @code{"begin"} itself but only when indenting something relative to this
3945 @code{"begin"}. Concretely, this rule changes the indentation from:
3946
3947 @example
3948 if x > 0 then begin
3949 dosomething(x);
3950 end
3951 @end example
3952 to
3953 @example
3954 if x > 0 then begin
3955 dosomething(x);
3956 end
3957 @end example
3958
3959 @item
3960 The rule for indentation before @code{"if"} is similar to the one for
3961 @code{"begin"}, but where the purpose is to treat @code{"else if"}
3962 as a single unit, so as to align a sequence of tests rather than indent
3963 each test further to the right. This function does this only in the
3964 case where the @code{"if"} is not placed on a separate line, hence the
3965 @code{smie-rule-bolp} test.
3966
3967 If we know that the @code{"else"} is always aligned with its @code{"if"}
3968 and is always at the beginning of a line, we can use a more efficient
3969 rule:
3970 @example
3971 ((equal token "if")
3972 (and (not (smie-rule-bolp))
3973 (smie-rule-prev-p "else")
3974 (save-excursion
3975 (sample-smie-backward-token)
3976 (cons 'column (current-column)))))
3977 @end example
3978
3979 The advantage of this formulation is that it reuses the indentation of
3980 the previous @code{"else"}, rather than going all the way back to the
3981 first @code{"if"} of the sequence.
3982 @end itemize
3983
3984 @node Desktop Save Mode
3985 @section Desktop Save Mode
3986 @cindex desktop save mode
3987
3988 @dfn{Desktop Save Mode} is a feature to save the state of Emacs from
3989 one session to another. The user-level commands for using Desktop
3990 Save Mode are described in the GNU Emacs Manual (@pxref{Saving Emacs
3991 Sessions,,, emacs, the GNU Emacs Manual}). Modes whose buffers visit
3992 a file, don't have to do anything to use this feature.
3993
3994 For buffers not visiting a file to have their state saved, the major
3995 mode must bind the buffer local variable @code{desktop-save-buffer} to
3996 a non-@code{nil} value.
3997
3998 @defvar desktop-save-buffer
3999 If this buffer-local variable is non-@code{nil}, the buffer will have
4000 its state saved in the desktop file at desktop save. If the value is
4001 a function, it is called at desktop save with argument
4002 @var{desktop-dirname}, and its value is saved in the desktop file along
4003 with the state of the buffer for which it was called. When file names
4004 are returned as part of the auxiliary information, they should be
4005 formatted using the call
4006
4007 @example
4008 (desktop-file-name @var{file-name} @var{desktop-dirname})
4009 @end example
4010
4011 @end defvar
4012
4013 For buffers not visiting a file to be restored, the major mode must
4014 define a function to do the job, and that function must be listed in
4015 the alist @code{desktop-buffer-mode-handlers}.
4016
4017 @defvar desktop-buffer-mode-handlers
4018 Alist with elements
4019
4020 @example
4021 (@var{major-mode} . @var{restore-buffer-function})
4022 @end example
4023
4024 The function @var{restore-buffer-function} will be called with
4025 argument list
4026
4027 @example
4028 (@var{buffer-file-name} @var{buffer-name} @var{desktop-buffer-misc})
4029 @end example
4030
4031 and it should return the restored buffer.
4032 Here @var{desktop-buffer-misc} is the value returned by the function
4033 optionally bound to @code{desktop-save-buffer}.
4034 @end defvar
4035