(define-ibuffer-filter filename): If `dired-directory' is a list, use its car.
[emacs.git] / lispref / modes.texi
blob4e6085566c4bff2f43f7bdc5de272ff9ae456be7
1 @c -*-texinfo-*-
2 @c This is part of the GNU Emacs Lisp Reference Manual.
3 @c Copyright (C) 1990, 1991, 1992, 1993, 1994, 1995, 1998, 1999,
4 @c   2003, 2004, 2005 Free Software Foundation, Inc.
5 @c See the file elisp.texi for copying conditions.
6 @setfilename ../info/modes
7 @node Modes, Documentation, Keymaps, Top
8 @chapter Major and Minor Modes
9 @cindex mode
11   A @dfn{mode} is a set of definitions that customize Emacs and can be
12 turned on and off while you edit.  There are two varieties of modes:
13 @dfn{major modes}, which are mutually exclusive and used for editing
14 particular kinds of text, and @dfn{minor modes}, which provide features
15 that users can enable individually.
17   This chapter describes how to write both major and minor modes, how to
18 indicate them in the mode line, and how they run hooks supplied by the
19 user.  For related topics such as keymaps and syntax tables, see
20 @ref{Keymaps}, and @ref{Syntax Tables}.
22 @menu
23 * Major Modes::        Defining major modes.
24 * Minor Modes::        Defining minor modes.
25 * Mode Line Format::   Customizing the text that appears in the mode line.
26 * Imenu::              How a mode can provide a menu
27                          of definitions in the buffer.
28 * Font Lock Mode::     How modes can highlight text according to syntax.
29 * Desktop Save Mode::  How modes can have buffer state saved between
30                          Emacs sessions.
31 * Hooks::              How to use hooks; how to write code that provides hooks.
32 @end menu
34 @node Major Modes
35 @section Major Modes
36 @cindex major mode
37 @cindex Fundamental mode
39   Major modes specialize Emacs for editing particular kinds of text.
40 Each buffer has only one major mode at a time.  For each major mode
41 there is a function to switch to that mode in the current buffer; its
42 name should end in @samp{-mode}.  These functions work by setting
43 buffer-local variable bindings and other data associated with the
44 buffer, such as a local keymap.  The effect lasts until you switch
45 to another major mode in the same buffer.
47   The least specialized major mode is called @dfn{Fundamental mode}.
48 This mode has no mode-specific definitions or variable settings, so each
49 Emacs command behaves in its default manner, and each option is in its
50 default state.  All other major modes redefine various keys and options.
51 For example, Lisp Interaction mode provides special key bindings for
52 @kbd{C-j} (@code{eval-print-last-sexp}), @key{TAB}
53 (@code{lisp-indent-line}), and other keys.
55   When you need to write several editing commands to help you perform a
56 specialized editing task, creating a new major mode is usually a good
57 idea.  In practice, writing a major mode is easy (in contrast to
58 writing a minor mode, which is often difficult).
60   If the new mode is similar to an old one, it is often unwise to modify
61 the old one to serve two purposes, since it may become harder to use and
62 maintain.  Instead, copy and rename an existing major mode definition
63 and alter the copy---or define a @dfn{derived mode} (@pxref{Derived
64 Modes}).  For example, Rmail Edit mode, which is in
65 @file{emacs/lisp/mail/rmailedit.el}, is a major mode that is very similar to
66 Text mode except that it provides two additional commands.  Its
67 definition is distinct from that of Text mode, but uses that of Text mode.
69   Even if the new mode is not an obvious derivative of any other mode,
70 it is convenient to use @code{define-derived-mode} with a @code{nil}
71 parent argument, since it automatically enforces the most important
72 coding conventions for you.
74   For a very simple programming language major mode that handles
75 comments and fontification, you can use @code{define-generic-mode}.
76 @xref{Generic Modes}.
78   Rmail Edit mode offers an example of changing the major mode
79 temporarily for a buffer, so it can be edited in a different way (with
80 ordinary Emacs commands rather than Rmail commands).  In such cases, the
81 temporary major mode usually provides a command to switch back to the
82 buffer's usual mode (Rmail mode, in this case).  You might be tempted to
83 present the temporary redefinitions inside a recursive edit and restore
84 the usual ones when the user exits; but this is a bad idea because it
85 constrains the user's options when it is done in more than one buffer:
86 recursive edits must be exited most-recently-entered first.  Using an
87 alternative major mode avoids this limitation.  @xref{Recursive
88 Editing}.
90   The standard GNU Emacs Lisp library directory tree contains the code
91 for several major modes, in files such as @file{text-mode.el},
92 @file{texinfo.el}, @file{lisp-mode.el}, @file{c-mode.el}, and
93 @file{rmail.el}.  They are found in various subdirectories of the
94 @file{lisp} directory.  You can study these libraries to see how modes
95 are written.  Text mode is perhaps the simplest major mode aside from
96 Fundamental mode.  Rmail mode is a complicated and specialized mode.
98 @menu
99 * Major Mode Conventions::  Coding conventions for keymaps, etc.
100 * Example Major Modes::     Text mode and Lisp modes.
101 * Auto Major Mode::         How Emacs chooses the major mode automatically.
102 * Mode Help::               Finding out how to use a mode.
103 * Derived Modes::           Defining a new major mode based on another major
104                               mode.
105 * Generic Modes::           Defining a simple major mode that supports
106                               comment syntax and Font Lock mode.
107 * Mode Hooks::              Hooks run at the end of major mode functions.
108 @end menu
110 @node Major Mode Conventions
111 @subsection Major Mode Conventions
113   The code for existing major modes follows various coding conventions,
114 including conventions for local keymap and syntax table initialization,
115 global names, and hooks.  Please follow these conventions when you
116 define a new major mode.
118   This list of conventions is only partial, because each major mode
119 should aim for consistency in general with other Emacs major modes.
120 This makes Emacs as a whole more coherent.  It is impossible to list
121 here all the possible points where this issue might come up; if the
122 Emacs developers point out an area where your major mode deviates from
123 the usual conventions, please make it compatible.
125 @itemize @bullet
126 @item
127 Define a command whose name ends in @samp{-mode}, with no arguments,
128 that switches to the new mode in the current buffer.  This command
129 should set up the keymap, syntax table, and buffer-local variables in an
130 existing buffer, without changing the buffer's contents.
132 @item
133 Write a documentation string for this command that describes the
134 special commands available in this mode.  @kbd{C-h m}
135 (@code{describe-mode}) in your mode will display this string.
137 The documentation string may include the special documentation
138 substrings, @samp{\[@var{command}]}, @samp{\@{@var{keymap}@}}, and
139 @samp{\<@var{keymap}>}, which enable the documentation to adapt
140 automatically to the user's own key bindings.  @xref{Keys in
141 Documentation}.
143 @item
144 The major mode command should start by calling
145 @code{kill-all-local-variables}.  This is what gets rid of the
146 buffer-local variables of the major mode previously in effect.
148 @item
149 The major mode command should set the variable @code{major-mode} to the
150 major mode command symbol.  This is how @code{describe-mode} discovers
151 which documentation to print.
153 @item
154 The major mode command should set the variable @code{mode-name} to the
155 ``pretty'' name of the mode, as a string.  This string appears in the
156 mode line.
158 @item
159 @cindex functions in modes
160 Since all global names are in the same name space, all the global
161 variables, constants, and functions that are part of the mode should
162 have names that start with the major mode name (or with an abbreviation
163 of it if the name is long).  @xref{Coding Conventions}.
165 @item
166 In a major mode for editing some kind of structured text, such as a
167 programming language, indentation of text according to structure is
168 probably useful.  So the mode should set @code{indent-line-function}
169 to a suitable function, and probably customize other variables
170 for indentation.
172 @item
173 @cindex keymaps in modes
174 The major mode should usually have its own keymap, which is used as the
175 local keymap in all buffers in that mode.  The major mode command should
176 call @code{use-local-map} to install this local map.  @xref{Active
177 Keymaps}, for more information.
179 This keymap should be stored permanently in a global variable named
180 @code{@var{modename}-mode-map}.  Normally the library that defines the
181 mode sets this variable.
183 @xref{Tips for Defining}, for advice about how to write the code to set
184 up the mode's keymap variable.
186 @item
187 The key sequences bound in a major mode keymap should usually start with
188 @kbd{C-c}, followed by a control character, a digit, or @kbd{@{},
189 @kbd{@}}, @kbd{<}, @kbd{>}, @kbd{:} or @kbd{;}.  The other punctuation
190 characters are reserved for minor modes, and ordinary letters are
191 reserved for users.
193 A major mode can also rebind the keys @kbd{M-n}, @kbd{M-p} and
194 @kbd{M-s}.  The bindings for @kbd{M-n} and @kbd{M-p} should normally
195 be some kind of ``moving forward and backward,'' but this does not
196 necessarily mean cursor motion.
198 It is legitimate for a major mode to rebind a standard key sequence if
199 it provides a command that does ``the same job'' in a way better
200 suited to the text this mode is used for.  For example, a major mode
201 for editing a programming language might redefine @kbd{C-M-a} to
202 ``move to the beginning of a function'' in a way that works better for
203 that language.
205 It is also legitimate for a major mode to rebind a standard key
206 sequence whose standard meaning is rarely useful in that mode.  For
207 instance, minibuffer modes rebind @kbd{M-r}, whose standard meaning is
208 rarely of any use in the minibuffer.  Major modes such as Dired or
209 Rmail that do not allow self-insertion of text can reasonably redefine
210 letters and other printing characters as special commands.
212 @item
213 Major modes must not define @key{RET} to do anything other than insert
214 a newline.  The command to insert a newline and then indent is
215 @kbd{C-j}.  Please keep this distinction uniform for all major modes.
217 @item
218 Major modes should not alter options that are primarily a matter of user
219 preference, such as whether Auto-Fill mode is enabled.  Leave this to
220 each user to decide.  However, a major mode should customize other
221 variables so that Auto-Fill mode will work usefully @emph{if} the user
222 decides to use it.
224 @item
225 @cindex syntax tables in modes
226 The mode may have its own syntax table or may share one with other
227 related modes.  If it has its own syntax table, it should store this in
228 a variable named @code{@var{modename}-mode-syntax-table}.  @xref{Syntax
229 Tables}.
231 @item
232 If the mode handles a language that has a syntax for comments, it should
233 set the variables that define the comment syntax.  @xref{Options for
234 Comments,, Options Controlling Comments, emacs, The GNU Emacs Manual}.
236 @item
237 @cindex abbrev tables in modes
238 The mode may have its own abbrev table or may share one with other
239 related modes.  If it has its own abbrev table, it should store this
240 in a variable named @code{@var{modename}-mode-abbrev-table}.  If the
241 major mode command defines any abbrevs itself, it should pass @code{t}
242 for the @var{system-flag} argument to @code{define-abbrev}.
243 @xref{Abbrev Tables}.
245 @item
246 The mode should specify how to do highlighting for Font Lock mode, by
247 setting up a buffer-local value for the variable
248 @code{font-lock-defaults} (@pxref{Font Lock Mode}).
250 @item
251 The mode should specify how Imenu should find the definitions or
252 sections of a buffer, by setting up a buffer-local value for the
253 variable @code{imenu-generic-expression}, for the pair of variables
254 @code{imenu-prev-index-position-function} and
255 @code{imenu-extract-index-name-function}, or for the variable
256 @code{imenu-create-index-function} (@pxref{Imenu}).
258 @item
259 The mode can specify a local value for
260 @code{eldoc-documentation-function} to tell ElDoc mode how to handle
261 this mode.
263 @item
264 Use @code{defvar} or @code{defcustom} to set mode-related variables, so
265 that they are not reinitialized if they already have a value.  (Such
266 reinitialization could discard customizations made by the user.)
268 @item
269 @cindex buffer-local variables in modes
270 To make a buffer-local binding for an Emacs customization variable, use
271 @code{make-local-variable} in the major mode command, not
272 @code{make-variable-buffer-local}.  The latter function would make the
273 variable local to every buffer in which it is subsequently set, which
274 would affect buffers that do not use this mode.  It is undesirable for a
275 mode to have such global effects.  @xref{Buffer-Local Variables}.
277 With rare exceptions, the only reasonable way to use
278 @code{make-variable-buffer-local} in a Lisp package is for a variable
279 which is used only within that package.  Using it on a variable used by
280 other packages would interfere with them.
282 @item
283 @cindex mode hook
284 @cindex major mode hook
285 Each major mode should have a @dfn{mode hook} named
286 @code{@var{modename}-mode-hook}.  The major mode command should run that
287 hook, with @code{run-mode-hooks}, as the very last thing it
288 does.  @xref{Mode Hooks}.
290 @item
291 The major mode command may start by calling some other major mode
292 command (called the @dfn{parent mode}) and then alter some of its
293 settings.  A mode that does this is called a @dfn{derived mode}.  The
294 recommended way to define one is to use @code{define-derived-mode},
295 but this is not required.  Such a mode should use
296 @code{delay-mode-hooks} around its entire body (including the call to
297 the parent mode command) @emph{except} for the final call to
298 @code{run-mode-hooks}, which runs the derived mode's hook.  (Using
299 @code{define-derived-mode} does this automatically.)  @xref{Derived
300 Modes}, and @ref{Mode Hooks}.
302 @item
303 If something special should be done if the user switches a buffer from
304 this mode to any other major mode, this mode can set up a buffer-local
305 value for @code{change-major-mode-hook} (@pxref{Creating Buffer-Local}).
307 @item
308 If this mode is appropriate only for specially-prepared text, then the
309 major mode command symbol should have a property named @code{mode-class}
310 with value @code{special}, put on as follows:
312 @kindex mode-class @r{(property)}
313 @cindex @code{special}
314 @example
315 (put 'funny-mode 'mode-class 'special)
316 @end example
318 @noindent
319 This tells Emacs that new buffers created while the current buffer is
320 in Funny mode should not inherit Funny mode, in case
321 @code{default-major-mode} is @code{nil}.  Modes such as Dired, Rmail,
322 and Buffer List use this feature.
324 @item
325 If you want to make the new mode the default for files with certain
326 recognizable names, add an element to @code{auto-mode-alist} to select
327 the mode for those file names.  If you define the mode command to
328 autoload, you should add this element in the same file that calls
329 @code{autoload}.  Otherwise, it is sufficient to add the element in the
330 file that contains the mode definition.  @xref{Auto Major Mode}.
332 @item
333 In the comments that document the file, you should provide a sample
334 @code{autoload} form and an example of how to add to
335 @code{auto-mode-alist}, that users can include in their init files
336 (@pxref{Init File}).
338 @item
339 @cindex mode loading
340 The top-level forms in the file defining the mode should be written so
341 that they may be evaluated more than once without adverse consequences.
342 Even if you never load the file more than once, someone else will.
343 @end itemize
345 @node Example Major Modes
346 @subsection Major Mode Examples
348   Text mode is perhaps the simplest mode besides Fundamental mode.
349 Here are excerpts from  @file{text-mode.el} that illustrate many of
350 the conventions listed above:
352 @smallexample
353 @group
354 ;; @r{Create the syntax table for this mode.}
355 (defvar text-mode-syntax-table
356   (let ((st (make-syntax-table)))
357     (modify-syntax-entry ?\" ".   " st)
358     (modify-syntax-entry ?\\ ".   " st)
359     ;; We add `p' so that M-c on 'hello' leads to 'Hello' rather than 'hello'.
360     (modify-syntax-entry ?' "w p" st)
361     st)
362   "Syntax table used while in `text-mode'.")
363 @end group
365 ;; @r{Create the keymap for this mode.}
366 @group
367 (defvar text-mode-map
368   (let ((map (make-sparse-keymap)))
369     (define-key map "\e\t" 'ispell-complete-word)
370     (define-key map "\es" 'center-line)
371     (define-key map "\eS" 'center-paragraph)
372     map)
373   "Keymap for `text-mode'.
374 Many other modes, such as `mail-mode', `outline-mode' and `indented-text-mode',
375 inherit all the commands defined in this map.")
376 @end group
377 @end smallexample
379   Here is how the actual mode command is defined now:
381 @smallexample
382 @group
383 (define-derived-mode text-mode nil "Text"
384   "Major mode for editing text written for humans to read.
385 In this mode, paragraphs are delimited only by blank or white lines.
386 You can thus get the full benefit of adaptive filling
387  (see the variable `adaptive-fill-mode').
388 \\@{text-mode-map@}
389 Turning on Text mode runs the normal hook `text-mode-hook'."
390 @end group
391 @group
392   (make-local-variable 'text-mode-variant)
393   (setq text-mode-variant t)
394   ;; @r{These two lines are a feature added recently.}
395   (set (make-local-variable 'require-final-newline)
396        mode-require-final-newline)
397   (set (make-local-variable 'indent-line-function) 'indent-relative))
398 @end group
399 @end smallexample
401   But here is how it was defined formerly, before
402 @code{define-derived-mode} existed:
404 @smallexample
405 @group
406 ;; @r{This isn't needed nowadays, since @code{define-derived-mode} does it.}
407 (defvar text-mode-abbrev-table nil
408   "Abbrev table used while in text mode.")
409 (define-abbrev-table 'text-mode-abbrev-table ())
410 @end group
412 @group
413 (defun text-mode ()
414   "Major mode for editing text intended for humans to read...
415  Special commands: \\@{text-mode-map@}
416 @end group
417 @group
418 Turning on text-mode runs the hook `text-mode-hook'."
419   (interactive)
420   (kill-all-local-variables)
421   (use-local-map text-mode-map)
422 @end group
423 @group
424   (setq local-abbrev-table text-mode-abbrev-table)
425   (set-syntax-table text-mode-syntax-table)
426 @end group
427 @group
428   ;; @r{These four lines are absent from the current version}
429   ;; @r{not because this is done some other way, but rather}
430   ;; @r{because nowadays Text mode uses the normal definition of paragraphs.}
431   (make-local-variable 'paragraph-start)
432   (setq paragraph-start (concat "[ \t]*$\\|" page-delimiter))
433   (make-local-variable 'paragraph-separate)
434   (setq paragraph-separate paragraph-start)
435   (make-local-variable 'indent-line-function)
436   (setq indent-line-function 'indent-relative-maybe)
437 @end group
438 @group
439   (setq mode-name "Text")
440   (setq major-mode 'text-mode)
441   (run-mode-hooks 'text-mode-hook)) ; @r{Finally, this permits the user to}
442                                     ;   @r{customize the mode with a hook.}
443 @end group
444 @end smallexample
446 @cindex @file{lisp-mode.el}
447   The three Lisp modes (Lisp mode, Emacs Lisp mode, and Lisp
448 Interaction mode) have more features than Text mode and the code is
449 correspondingly more complicated.  Here are excerpts from
450 @file{lisp-mode.el} that illustrate how these modes are written.
452 @cindex syntax table example
453 @smallexample
454 @group
455 ;; @r{Create mode-specific table variables.}
456 (defvar lisp-mode-syntax-table nil "")
457 (defvar lisp-mode-abbrev-table nil "")
458 @end group
460 @group
461 (defvar emacs-lisp-mode-syntax-table
462   (let ((table (make-syntax-table)))
463     (let ((i 0))
464 @end group
466 @group
467       ;; @r{Set syntax of chars up to @samp{0} to say they are}
468       ;;   @r{part of symbol names but not words.}
469       ;;   @r{(The digit @samp{0} is @code{48} in the @acronym{ASCII} character set.)}
470       (while (< i ?0)
471         (modify-syntax-entry i "_   " table)
472         (setq i (1+ i)))
473       ;; @r{@dots{} similar code follows for other character ranges.}
474 @end group
475 @group
476       ;; @r{Then set the syntax codes for characters that are special in Lisp.}
477       (modify-syntax-entry ?  "    " table)
478       (modify-syntax-entry ?\t "    " table)
479       (modify-syntax-entry ?\f "    " table)
480       (modify-syntax-entry ?\n ">   " table)
481 @end group
482 @group
483       ;; @r{Give CR the same syntax as newline, for selective-display.}
484       (modify-syntax-entry ?\^m ">   " table)
485       (modify-syntax-entry ?\; "<   " table)
486       (modify-syntax-entry ?` "'   " table)
487       (modify-syntax-entry ?' "'   " table)
488       (modify-syntax-entry ?, "'   " table)
489 @end group
490 @group
491       ;; @r{@dots{}likewise for many other characters@dots{}}
492       (modify-syntax-entry ?\( "()  " table)
493       (modify-syntax-entry ?\) ")(  " table)
494       (modify-syntax-entry ?\[ "(]  " table)
495       (modify-syntax-entry ?\] ")[  " table))
496     table))
497 @end group
498 @group
499 ;; @r{Create an abbrev table for lisp-mode.}
500 (define-abbrev-table 'lisp-mode-abbrev-table ())
501 @end group
502 @end smallexample
504   Much code is shared among the three Lisp modes.  The following
505 function sets various variables; it is called by each of the major Lisp
506 mode functions:
508 @smallexample
509 @group
510 (defun lisp-mode-variables (lisp-syntax)
511   (when lisp-syntax
512     (set-syntax-table lisp-mode-syntax-table))
513   (setq local-abbrev-table lisp-mode-abbrev-table)
514   @dots{}
515 @end group
516 @end smallexample
518   Functions such as @code{forward-paragraph} use the value of the
519 @code{paragraph-start} variable.  Since Lisp code is different from
520 ordinary text, the @code{paragraph-start} variable needs to be set
521 specially to handle Lisp.  Also, comments are indented in a special
522 fashion in Lisp and the Lisp modes need their own mode-specific
523 @code{comment-indent-function}.  The code to set these variables is the
524 rest of @code{lisp-mode-variables}.
526 @smallexample
527 @group
528   (make-local-variable 'paragraph-start)
529   (setq paragraph-start (concat page-delimiter "\\|$" ))
530   (make-local-variable 'paragraph-separate)
531   (setq paragraph-separate paragraph-start)
532   @dots{}
533 @end group
534 @group
535   (make-local-variable 'comment-indent-function)
536   (setq comment-indent-function 'lisp-comment-indent))
537   @dots{}
538 @end group
539 @end smallexample
541   Each of the different Lisp modes has a slightly different keymap.  For
542 example, Lisp mode binds @kbd{C-c C-z} to @code{run-lisp}, but the other
543 Lisp modes do not.  However, all Lisp modes have some commands in
544 common.  The following code sets up the common commands:
546 @smallexample
547 @group
548 (defvar shared-lisp-mode-map ()
549   "Keymap for commands shared by all sorts of Lisp modes.")
551 ;; @r{Putting this @code{if} after the @code{defvar} is an older style.}
552 (if shared-lisp-mode-map
553     ()
554    (setq shared-lisp-mode-map (make-sparse-keymap))
555    (define-key shared-lisp-mode-map "\e\C-q" 'indent-sexp)
556    (define-key shared-lisp-mode-map "\177"
557                'backward-delete-char-untabify))
558 @end group
559 @end smallexample
561 @noindent
562 And here is the code to set up the keymap for Lisp mode:
564 @smallexample
565 @group
566 (defvar lisp-mode-map ()
567   "Keymap for ordinary Lisp mode...")
569 (if lisp-mode-map
570     ()
571   (setq lisp-mode-map (make-sparse-keymap))
572   (set-keymap-parent lisp-mode-map shared-lisp-mode-map)
573   (define-key lisp-mode-map "\e\C-x" 'lisp-eval-defun)
574   (define-key lisp-mode-map "\C-c\C-z" 'run-lisp))
575 @end group
576 @end smallexample
578   Finally, here is the complete major mode function definition for
579 Lisp mode.
581 @smallexample
582 @group
583 (defun lisp-mode ()
584   "Major mode for editing Lisp code for Lisps other than GNU Emacs Lisp.
585 Commands:
586 Delete converts tabs to spaces as it moves back.
587 Blank lines separate paragraphs.  Semicolons start comments.
588 \\@{lisp-mode-map@}
589 Note that `run-lisp' may be used either to start an inferior Lisp job
590 or to switch back to an existing one.
591 @end group
593 @group
594 Entry to this mode calls the value of `lisp-mode-hook'
595 if that value is non-nil."
596   (interactive)
597   (kill-all-local-variables)
598 @end group
599 @group
600   (use-local-map lisp-mode-map)          ; @r{Select the mode's keymap.}
601   (setq major-mode 'lisp-mode)           ; @r{This is how @code{describe-mode}}
602                                          ;   @r{finds out what to describe.}
603   (setq mode-name "Lisp")                ; @r{This goes into the mode line.}
604   (lisp-mode-variables t)                ; @r{This defines various variables.}
605   (make-local-variable 'comment-start-skip)
606   (setq comment-start-skip
607         "\\(\\(^\\|[^\\\\\n]\\)\\(\\\\\\\\\\)*\\)\\(;+\\|#|\\) *")
608   (make-local-variable 'font-lock-keywords-case-fold-search)
609   (setq font-lock-keywords-case-fold-search t)
610 @end group
611 @group
612   (setq imenu-case-fold-search t)
613   (set-syntax-table lisp-mode-syntax-table)
614   (run-mode-hooks 'lisp-mode-hook))           ; @r{This permits the user to use a}
615                                          ;   @r{hook to customize the mode.}
616 @end group
617 @end smallexample
619 @node Auto Major Mode
620 @subsection How Emacs Chooses a Major Mode
622   Based on information in the file name or in the file itself, Emacs
623 automatically selects a major mode for the new buffer when a file is
624 visited.  It also processes local variables specified in the file text.
626 @deffn Command fundamental-mode
627   Fundamental mode is a major mode that is not specialized for anything
628 in particular.  Other major modes are defined in effect by comparison
629 with this one---their definitions say what to change, starting from
630 Fundamental mode.  The @code{fundamental-mode} function does @emph{not}
631 run any mode hooks; you're not supposed to customize it.  (If you want Emacs
632 to behave differently in Fundamental mode, change the @emph{global}
633 state of Emacs.)
634 @end deffn
636 @deffn Command normal-mode &optional find-file
637 This function establishes the proper major mode and buffer-local variable
638 bindings for the current buffer.  First it calls @code{set-auto-mode},
639 then it runs @code{hack-local-variables} to parse, and bind or
640 evaluate as appropriate, the file's local variables.
642 If the @var{find-file} argument to @code{normal-mode} is non-@code{nil},
643 @code{normal-mode} assumes that the @code{find-file} function is calling
644 it.  In this case, it may process a local variables list at the end of
645 the file and in the @samp{-*-} line.  The variable
646 @code{enable-local-variables} controls whether to do so.  @xref{File
647 variables, , Local Variables in Files, emacs, The GNU Emacs Manual}, for
648 the syntax of the local variables section of a file.
650 If you run @code{normal-mode} interactively, the argument
651 @var{find-file} is normally @code{nil}.  In this case,
652 @code{normal-mode} unconditionally processes any local variables list.
654 @cindex file mode specification error
655 @code{normal-mode} uses @code{condition-case} around the call to the
656 major mode function, so errors are caught and reported as a @samp{File
657 mode specification error},  followed by the original error message.
658 @end deffn
660 @defun set-auto-mode
661 @cindex visited file mode
662   This function selects the major mode that is appropriate for the
663 current buffer.  It may base its decision on the value of the @w{@samp{-*-}}
664 line, on the visited file name (using @code{auto-mode-alist}), on the
665 @w{@samp{#!}} line (using @code{interpreter-mode-alist}), or on the
666 file's local variables list.  However, this function does not look for
667 the @samp{mode:} local variable near the end of a file; the
668 @code{hack-local-variables} function does that.  @xref{Choosing Modes, ,
669 How Major Modes are Chosen, emacs, The GNU Emacs Manual}.
670 @end defun
672 @defopt default-major-mode
673 This variable holds the default major mode for new buffers.  The
674 standard value is @code{fundamental-mode}.
676 If the value of @code{default-major-mode} is @code{nil}, Emacs uses
677 the (previously) current buffer's major mode for the major mode of a new
678 buffer.  However, if that major mode symbol has a @code{mode-class}
679 property with value @code{special}, then it is not used for new buffers;
680 Fundamental mode is used instead.  The modes that have this property are
681 those such as Dired and Rmail that are useful only with text that has
682 been specially prepared.
683 @end defopt
685 @defun set-buffer-major-mode buffer
686 This function sets the major mode of @var{buffer} to the value of
687 @code{default-major-mode}.  If that variable is @code{nil}, it uses
688 the current buffer's major mode (if that is suitable).
690 The low-level primitives for creating buffers do not use this function,
691 but medium-level commands such as @code{switch-to-buffer} and
692 @code{find-file-noselect} use it whenever they create buffers.
693 @end defun
695 @defvar initial-major-mode
696 @cindex @samp{*scratch*}
697 The value of this variable determines the major mode of the initial
698 @samp{*scratch*} buffer.  The value should be a symbol that is a major
699 mode command.  The default value is @code{lisp-interaction-mode}.
700 @end defvar
702 @defvar auto-mode-alist
703 This variable contains an association list of file name patterns
704 (regular expressions; @pxref{Regular Expressions}) and corresponding
705 major mode commands.  Usually, the file name patterns test for suffixes,
706 such as @samp{.el} and @samp{.c}, but this need not be the case.  An
707 ordinary element of the alist looks like @code{(@var{regexp} .
708 @var{mode-function})}.
710 For example,
712 @smallexample
713 @group
714 (("\\`/tmp/fol/" . text-mode)
715  ("\\.texinfo\\'" . texinfo-mode)
716  ("\\.texi\\'" . texinfo-mode)
717 @end group
718 @group
719  ("\\.el\\'" . emacs-lisp-mode)
720  ("\\.c\\'" . c-mode)
721  ("\\.h\\'" . c-mode)
722  @dots{})
723 @end group
724 @end smallexample
726 When you visit a file whose expanded file name (@pxref{File Name
727 Expansion}) matches a @var{regexp}, @code{set-auto-mode} calls the
728 corresponding @var{mode-function}.  This feature enables Emacs to select
729 the proper major mode for most files.
731 If an element of @code{auto-mode-alist} has the form @code{(@var{regexp}
732 @var{function} t)}, then after calling @var{function}, Emacs searches
733 @code{auto-mode-alist} again for a match against the portion of the file
734 name that did not match before.  This feature is useful for
735 uncompression packages: an entry of the form @code{("\\.gz\\'"
736 @var{function} t)} can uncompress the file and then put the uncompressed
737 file in the proper mode according to the name sans @samp{.gz}.
739 Here is an example of how to prepend several pattern pairs to
740 @code{auto-mode-alist}.  (You might use this sort of expression in your
741 init file.)
743 @smallexample
744 @group
745 (setq auto-mode-alist
746   (append
747    ;; @r{File name (within directory) starts with a dot.}
748    '(("/\\.[^/]*\\'" . fundamental-mode)
749      ;; @r{File name has no dot.}
750      ("[^\\./]*\\'" . fundamental-mode)
751      ;; @r{File name ends in @samp{.C}.}
752      ("\\.C\\'" . c++-mode))
753    auto-mode-alist))
754 @end group
755 @end smallexample
756 @end defvar
758 @defvar interpreter-mode-alist
759 This variable specifies major modes to use for scripts that specify a
760 command interpreter in a @samp{#!} line.  Its value is a list of
761 elements of the form @code{(@var{interpreter} . @var{mode})}; for
762 example, @code{("perl" . perl-mode)} is one element present by default.
763 The element says to use mode @var{mode} if the file specifies
764 an interpreter which matches @var{interpreter}.  The value of
765 @var{interpreter} is actually a regular expression.
767 This variable is applicable only when the @code{auto-mode-alist} does
768 not indicate which major mode to use.
769 @end defvar
771 @node Mode Help
772 @subsection Getting Help about a Major Mode
773 @cindex mode help
774 @cindex help for major mode
775 @cindex documentation for major mode
777   The @code{describe-mode} function is used to provide information
778 about major modes.  It is normally called with @kbd{C-h m}.  The
779 @code{describe-mode} function uses the value of @code{major-mode},
780 which is why every major mode function needs to set the
781 @code{major-mode} variable.
783 @deffn Command describe-mode
784 This function displays the documentation of the current major mode.
786 The @code{describe-mode} function calls the @code{documentation}
787 function using the value of @code{major-mode} as an argument.  Thus, it
788 displays the documentation string of the major mode function.
789 (@xref{Accessing Documentation}.)
790 @end deffn
792 @defvar major-mode
793 This variable holds the symbol for the current buffer's major mode.
794 This symbol should have a function definition that is the command to
795 switch to that major mode.  The @code{describe-mode} function uses the
796 documentation string of the function as the documentation of the major
797 mode.
798 @end defvar
800 @node Derived Modes
801 @subsection Defining Derived Modes
802 @cindex derived mode
804   It's often useful to define a new major mode in terms of an existing
805 one.  An easy way to do this is to use @code{define-derived-mode}.
807 @defmac define-derived-mode variant parent name docstring body@dots{}
808 This construct defines @var{variant} as a major mode command, using
809 @var{name} as the string form of the mode name.
811 The new command @var{variant} is defined to call the function
812 @var{parent}, then override certain aspects of that parent mode:
814 @itemize @bullet
815 @item
816 The new mode has its own keymap, named @code{@var{variant}-map}.
817 @code{define-derived-mode} initializes this map to inherit from
818 @code{@var{parent}-map}, if it is not already set.
820 @item
821 The new mode has its own syntax table, kept in the variable
822 @code{@var{variant}-syntax-table}.
823 @code{define-derived-mode} initializes this variable by copying
824 @code{@var{parent}-syntax-table}, if it is not already set.
826 @item
827 The new mode has its own abbrev table, kept in the variable
828 @code{@var{variant}-abbrev-table}.
829 @code{define-derived-mode} initializes this variable by copying
830 @code{@var{parent}-abbrev-table}, if it is not already set.
832 @item
833 The new mode has its own mode hook, @code{@var{variant}-hook},
834 which it runs in standard fashion as the very last thing that it does.
835 (The new mode also runs the mode hook of @var{parent} as part
836 of calling @var{parent}.)
837 @end itemize
839 In addition, you can specify how to override other aspects of
840 @var{parent} with @var{body}.  The command @var{variant}
841 evaluates the forms in @var{body} after setting up all its usual
842 overrides, just before running @code{@var{variant}-hook}.
844 The argument @var{docstring} specifies the documentation string for the
845 new mode.  If you omit @var{docstring}, @code{define-derived-mode}
846 generates a documentation string.
848 Here is a hypothetical example:
850 @example
851 (define-derived-mode hypertext-mode
852   text-mode "Hypertext"
853   "Major mode for hypertext.
854 \\@{hypertext-mode-map@}"
855   (setq case-fold-search nil))
857 (define-key hypertext-mode-map
858   [down-mouse-3] 'do-hyper-link)
859 @end example
861 Do not write an @code{interactive} spec in the definition;
862 @code{define-derived-mode} does that automatically.
863 @end defmac
865 @node Generic Modes
866 @subsection Generic Modes
867 @cindex generic mode
869 @dfn{Generic modes} are simple major modes with basic support for
870 comment syntax and Font Lock mode.  They are primarily useful for
871 configuration files.  To define a generic mode, use the macro
872 @code{define-generic-mode}.  See the file @file{generic-x.el} for some
873 examples of the use of @code{define-generic-mode}.
875 @defmac define-generic-mode mode comment-list keyword-list font-lock-list auto-mode-list function-list &optional docstring
876 This macro creates a new generic mode.  The argument @var{mode} (an
877 unquoted symbol) is the major mode command.  The optional argument
878 @var{docstring} is the documentation for the mode command.  If you do
879 not supply it, @code{define-generic-mode} uses a default documentation
880 string instead.
882 @var{comment-list} is a list in which each element is either a
883 character, a string of one or two characters, or a cons cell.  A
884 character or a string is set up in the mode's syntax table as a
885 ``comment starter.''  If the entry is a cons cell, the @sc{car} is set
886 up as a ``comment starter'' and the @sc{cdr} as a ``comment ender.''
887 (Use @code{nil} for the latter if you want comments to end at the end
888 of the line.)  Note that the syntax table has limitations about what
889 comment starters and enders are actually possible.  @xref{Syntax
890 Tables}.
892 @var{keyword-list} is a list of keywords to highlight with
893 @code{font-lock-keyword-face}.  Each keyword should be a string.
894 @var{font-lock-list} is a list of additional expressions to highlight.
895 Each element of this list should have the same form as an element of
896 @code{font-lock-keywords}.  @xref{Search-based Fontification}.
898 @var{auto-mode-list} is a list of regular expressions to add to the
899 variable @code{auto-mode-alist}.  These regular expressions are added
900 when Emacs runs the macro expansion.
902 @var{function-list} is a list of functions to call to do some
903 additional setup.  The mode command calls these functions just before
904 it runs the mode hook variable @code{@var{mode}-hook}.
905 @end defmac
907 @node Mode Hooks
908 @subsection Mode Hooks
910 The two last things a major mode function does is to run its mode
911 hook and finally the mode independent normal hook
912 @code{after-change-major-mode-hook}.  If the major mode is a derived
913 mode, that is if it calls another major mode (the parent mode) in its
914 body, then the parent's mode hook is run just before the derived
915 mode's hook.  Neither the parent's mode hook nor
916 @code{after-change-major-mode-hook} are run at the end of the actual
917 call to the parent mode.  This applies recursively if the parent mode
918 has itself a parent.  That is, the mode hooks of all major modes called
919 directly or indirectly by the major mode function are all run in
920 sequence at the end, just before @code{after-change-major-mode-hook}.
922 If you are customizing a major mode, rather than defining one, the
923 above is all you need to know about the hooks run at the end of a
924 major mode.  This also applies if you use @code{define-derived-mode}
925 to define a major mode, because that macro will automatically
926 implement the above for you.
928 Programmers wishing to define a major mode without using
929 @code{define-derived-mode}, should make sure that their major mode
930 follows the above conventions.  @xref{Major Mode Conventions}, for how
931 this should be accomplished.  Below, we give some implementation
932 details.
934 @defun run-mode-hooks &rest hookvars
935 Major modes should run their mode hook using this function.  It is
936 similar to @code{run-hooks} (@pxref{Hooks}), but if run inside a
937 @code{delay-mode-hooks} form, this function does not run any hooks.
938 Instead, it arranges for @var{hookvars} to be run at a later call to
939 the function.  Otherwise, @code{run-mode-hooks} runs any delayed hooks
940 in order, then @var{hookvars} and finally
941 @code{after-change-major-mode-hook}.
942 @end defun
944 @defmac delay-mode-hooks body...
945 This macro executes @var{body} like @code{progn}, but all calls to
946 @code{run-mode-hooks} inside @var{body} delay running their hooks.
947 They will be run by the first call to @code{run-mode-hooks} after exit
948 from @code{delay-mode-hooks}.
949 @end defmac
951 @defvar after-change-major-mode-hook
952 Every major mode function should run this normal hook at its very end.
953 It normally does not need to do so explicitly.  Indeed, a major mode
954 function should normally run its mode hook with @code{run-mode-hooks}
955 as the very last thing it does and @code{run-mode-hooks} runs
956 @code{after-change-major-mode-hook} at its very end.
957 @end defvar
959 @node Minor Modes
960 @section Minor Modes
961 @cindex minor mode
963   A @dfn{minor mode} provides features that users may enable or disable
964 independently of the choice of major mode.  Minor modes can be enabled
965 individually or in combination.  Minor modes would be better named
966 ``generally available, optional feature modes,'' except that such a name
967 would be unwieldy.
969   A minor mode is not usually meant as a variation of a single major mode.
970 Usually they are general and can apply to many major modes.  For
971 example, Auto Fill mode works with any major mode that permits text
972 insertion.  To be general, a minor mode must be effectively independent
973 of the things major modes do.
975   A minor mode is often much more difficult to implement than a major
976 mode.  One reason is that you should be able to activate and deactivate
977 minor modes in any order.  A minor mode should be able to have its
978 desired effect regardless of the major mode and regardless of the other
979 minor modes in effect.
981   Often the biggest problem in implementing a minor mode is finding a
982 way to insert the necessary hook into the rest of Emacs.  Minor mode
983 keymaps make this easier than it used to be.
985 @defvar minor-mode-list
986 The value of this variable is a list of all minor mode commands.
987 @end defvar
989 @menu
990 * Minor Mode Conventions::      Tips for writing a minor mode.
991 * Keymaps and Minor Modes::     How a minor mode can have its own keymap.
992 * Defining Minor Modes::        A convenient facility for defining minor modes.
993 @end menu
995 @node Minor Mode Conventions
996 @subsection Conventions for Writing Minor Modes
997 @cindex minor mode conventions
998 @cindex conventions for writing minor modes
1000   There are conventions for writing minor modes just as there are for
1001 major modes.  Several of the major mode conventions apply to minor
1002 modes as well: those regarding the name of the mode initialization
1003 function, the names of global symbols, and the use of keymaps and
1004 other tables.
1006   In addition, there are several conventions that are specific to
1007 minor modes.  (The easiest way to follow all the conventions is to use
1008 the macro @code{define-minor-mode}; @ref{Defining Minor Modes}.)
1010 @itemize @bullet
1011 @item
1012 @cindex mode variable
1013 Make a variable whose name ends in @samp{-mode} to control the minor
1014 mode.  We call this the @dfn{mode variable}.  The minor mode command
1015 should set this variable (@code{nil} to disable; anything else to
1016 enable).
1018 If possible, implement the mode so that setting the variable
1019 automatically enables or disables the mode.  Then the minor mode command
1020 does not need to do anything except set the variable.
1022 This variable is used in conjunction with the @code{minor-mode-alist} to
1023 display the minor mode name in the mode line.  It can also enable
1024 or disable a minor mode keymap.  Individual commands or hooks can also
1025 check the variable's value.
1027 If you want the minor mode to be enabled separately in each buffer,
1028 make the variable buffer-local.
1030 @item
1031 Define a command whose name is the same as the mode variable.
1032 Its job is to enable and disable the mode by setting the variable.
1034 The command should accept one optional argument.  If the argument is
1035 @code{nil}, it should toggle the mode (turn it on if it is off, and
1036 off if it is on).  It should turn the mode on if the argument is a
1037 positive integer, the symbol @code{t}, or a list whose @sc{car} is one
1038 of those.  It should turn the mode off if the argument is a negative
1039 integer or zero, the symbol @code{-}, or a list whose @sc{car} is a
1040 negative integer or zero.  The meaning of other arguments is not
1041 specified.
1043 Here is an example taken from the definition of @code{transient-mark-mode}.
1044 It shows the use of @code{transient-mark-mode} as a variable that enables or
1045 disables the mode's behavior, and also shows the proper way to toggle,
1046 enable or disable the minor mode based on the raw prefix argument value.
1048 @smallexample
1049 @group
1050 (setq transient-mark-mode
1051       (if (null arg) (not transient-mark-mode)
1052         (> (prefix-numeric-value arg) 0)))
1053 @end group
1054 @end smallexample
1056 @item
1057 Add an element to @code{minor-mode-alist} for each minor mode
1058 (@pxref{Mode Line Variables}), if you want to indicate the minor mode in
1059 the mode line.  This element should be a list of the following form:
1061 @smallexample
1062 (@var{mode-variable} @var{string})
1063 @end smallexample
1065 Here @var{mode-variable} is the variable that controls enabling of the
1066 minor mode, and @var{string} is a short string, starting with a space,
1067 to represent the mode in the mode line.  These strings must be short so
1068 that there is room for several of them at once.
1070 When you add an element to @code{minor-mode-alist}, use @code{assq} to
1071 check for an existing element, to avoid duplication.  For example:
1073 @smallexample
1074 @group
1075 (unless (assq 'leif-mode minor-mode-alist)
1076   (setq minor-mode-alist
1077         (cons '(leif-mode " Leif") minor-mode-alist)))
1078 @end group
1079 @end smallexample
1081 @noindent
1082 or like this, using @code{add-to-list} (@pxref{Setting Variables}):
1084 @smallexample
1085 @group
1086 (add-to-list 'minor-mode-alist '(leif-mode " Leif"))
1087 @end group
1088 @end smallexample
1089 @end itemize
1091   Global minor modes distributed with Emacs should if possible support
1092 enabling and disabling via Custom (@pxref{Customization}).  To do this,
1093 the first step is to define the mode variable with @code{defcustom}, and
1094 specify @code{:type boolean}.
1096   If just setting the variable is not sufficient to enable the mode, you
1097 should also specify a @code{:set} method which enables the mode by
1098 invoking the mode command.  Note in the variable's documentation string that
1099 setting the variable other than via Custom may not take effect.
1101   Also mark the definition with an autoload cookie (@pxref{Autoload}),
1102 and specify a @code{:require} so that customizing the variable will load
1103 the library that defines the mode.  This will copy suitable definitions
1104 into @file{loaddefs.el} so that users can use @code{customize-option} to
1105 enable the mode.  For example:
1107 @smallexample
1108 @group
1110 ;;;###autoload
1111 (defcustom msb-mode nil
1112   "Toggle msb-mode.
1113 Setting this variable directly does not take effect;
1114 use either \\[customize] or the function `msb-mode'."
1115   :set (lambda (symbol value)
1116          (msb-mode (or value 0)))
1117   :initialize 'custom-initialize-default
1118   :version "20.4"
1119   :type    'boolean
1120   :group   'msb
1121   :require 'msb)
1122 @end group
1123 @end smallexample
1125 @node Keymaps and Minor Modes
1126 @subsection Keymaps and Minor Modes
1128   Each minor mode can have its own keymap, which is active when the mode
1129 is enabled.  To set up a keymap for a minor mode, add an element to the
1130 alist @code{minor-mode-map-alist}.  @xref{Active Keymaps}.
1132 @cindex @code{self-insert-command}, minor modes
1133   One use of minor mode keymaps is to modify the behavior of certain
1134 self-inserting characters so that they do something else as well as
1135 self-insert.  In general, this is the only way to do that, since the
1136 facilities for customizing @code{self-insert-command} are limited to
1137 special cases (designed for abbrevs and Auto Fill mode).  (Do not try
1138 substituting your own definition of @code{self-insert-command} for the
1139 standard one.  The editor command loop handles this function specially.)
1141 The key sequences bound in a minor mode should consist of @kbd{C-c}
1142 followed by a punctuation character @emph{other than} @kbd{@{},
1143 @kbd{@}}, @kbd{<}, @kbd{>}, @kbd{:}, and @kbd{;}.  (Those few punctuation
1144 characters are reserved for major modes.)
1146 @node Defining Minor Modes
1147 @subsection Defining Minor Modes
1149   The macro @code{define-minor-mode} offers a convenient way of
1150 implementing a mode in one self-contained definition.
1152 @defmac define-minor-mode mode doc [init-value [lighter [keymap]]] keyword-args... body...
1153 @tindex define-minor-mode
1154 This macro defines a new minor mode whose name is @var{mode} (a
1155 symbol).  It defines a command named @var{mode} to toggle the minor
1156 mode, with @var{doc} as its documentation string.  It also defines a
1157 variable named @var{mode}, which is set to @code{t} or @code{nil} by
1158 enabling or disabling the mode.  The variable is initialized to
1159 @var{init-value}.
1161 The string @var{lighter} says what to display in the mode line
1162 when the mode is enabled; if it is @code{nil}, the mode is not displayed
1163 in the mode line.
1165 The optional argument @var{keymap} specifies the keymap for the minor mode.
1166 It can be a variable name, whose value is the keymap, or it can be an alist
1167 specifying bindings in this form:
1169 @example
1170 (@var{key-sequence} . @var{definition})
1171 @end example
1173 The above three arguments @var{init-value}, @var{lighter}, and
1174 @var{keymap} can be (partially) omitted when @var{keyword-args} are
1175 used.  The @var{keyword-args} consist of keywords followed by
1176 corresponding values.  A few keywords have special meanings:
1178 @table @code
1179 @item :group @var{group}
1180 Custom group name to use in all generated @code{defcustom} forms.
1181 Defaults to @var{mode} without the possible trailing @samp{-mode}.
1182 @strong{Warning:} don't use this default group name unless you have
1183 written a @code{defgroup} to define that group properly.  @xref{Group
1184 Definitions}.
1186 @item :global @var{global}
1187 If non-@code{nil} specifies that the minor mode should be global.
1188 By default, minor modes are buffer-local.
1190 @item :init-value @var{init-value}
1191 This is equivalent to specifying @var{init-value} positionally.
1193 @item :lighter @var{lighter}
1194 This is equivalent to specifying @var{lighter} positionally.
1196 @item :keymap @var{keymap}
1197 This is equivalent to specifying @var{keymap} positionally.
1198 @end table
1200 Any other keyword arguments are passed passed directly to the
1201 @code{defcustom} generated for the variable @var{mode}.
1203 The command named @var{mode} finishes by executing the @var{body} forms,
1204 if any, after it has performed the standard actions such as setting
1205 the variable named @var{mode}.
1206 @end defmac
1208 @findex easy-mmode-define-minor-mode
1209   The name @code{easy-mmode-define-minor-mode} is an alias
1210 for this macro.
1212   Here is an example of using @code{define-minor-mode}:
1214 @smallexample
1215 (define-minor-mode hungry-mode
1216   "Toggle Hungry mode.
1217 With no argument, this command toggles the mode.
1218 Non-null prefix argument turns on the mode.
1219 Null prefix argument turns off the mode.
1221 When Hungry mode is enabled, the control delete key
1222 gobbles all preceding whitespace except the last.
1223 See the command \\[hungry-electric-delete]."
1224  ;; The initial value.
1225  nil
1226  ;; The indicator for the mode line.
1227  " Hungry"
1228  ;; The minor mode bindings.
1229  '(("\C-\^?" . hungry-electric-delete))
1230  :group 'hunger)
1231 @end smallexample
1233 @noindent
1234 This defines a minor mode named ``Hungry mode'', a command named
1235 @code{hungry-mode} to toggle it, a variable named @code{hungry-mode}
1236 which indicates whether the mode is enabled, and a variable named
1237 @code{hungry-mode-map} which holds the keymap that is active when the
1238 mode is enabled.  It initializes the keymap with a key binding for
1239 @kbd{C-@key{DEL}}.  It puts the variable @code{hungry-mode} into
1240 custom group @code{hunger}.  There are no @var{body} forms---many
1241 minor modes don't need any.
1243   Here's an equivalent way to write it:
1245 @smallexample
1246 (define-minor-mode hungry-mode
1247   "Toggle Hungry mode.
1248 With no argument, this command toggles the mode.
1249 Non-null prefix argument turns on the mode.
1250 Null prefix argument turns off the mode.
1252 When Hungry mode is enabled, the control delete key
1253 gobbles all preceding whitespace except the last.
1254 See the command \\[hungry-electric-delete]."
1255  ;; The initial value.
1256  :initial-value nil
1257  ;; The indicator for the mode line.
1258  :lighter " Hungry"
1259  ;; The minor mode bindings.
1260  :keymap
1261  '(("\C-\^?" . hungry-electric-delete)
1262    ("\C-\M-\^?"
1263     . (lambda ()
1264         (interactive)
1265         (hungry-electric-delete t))))
1266  :group 'hunger)
1267 @end smallexample
1269 @node Mode Line Format
1270 @section Mode-Line Format
1271 @cindex mode line
1273   Each Emacs window (aside from minibuffer windows) typically has a mode
1274 line at the bottom, which displays status information about the buffer
1275 displayed in the window.  The mode line contains information about the
1276 buffer, such as its name, associated file, depth of recursive editing,
1277 and major and minor modes.  A window can also have a @dfn{header
1278 line}, which is much like the mode line but appears at the top of the
1279 window.
1281   This section describes how to control the contents of the mode line
1282 and header line.  We include it in this chapter because much of the
1283 information displayed in the mode line relates to the enabled major and
1284 minor modes.
1286   @code{mode-line-format} is a buffer-local variable that holds a
1287 template used to display the mode line of the current buffer.  All
1288 windows for the same buffer use the same @code{mode-line-format}, so
1289 their mode lines appear the same---except for scrolling percentages, and
1290 line and column numbers, since those depend on point and on how the
1291 window is scrolled.  @code{header-line-format} is used likewise for
1292 header lines.
1294   For efficiency, Emacs does not recompute the mode line and header
1295 line of a window in every redisplay.  It does so when circumstances
1296 appear to call for it---for instance, if you change the window
1297 configuration, switch buffers, narrow or widen the buffer, scroll, or
1298 change the buffer's modification status.  If you modify any of the
1299 variables referenced by @code{mode-line-format} (@pxref{Mode Line
1300 Variables}), or any other variables and data structures that affect
1301 how text is displayed (@pxref{Display}), you may want to force an
1302 update of the mode line so as to display the new information or
1303 display it in the new way.
1305 @c Emacs 19 feature
1306 @defun force-mode-line-update &optional all
1307 Force redisplay of the current buffer's mode line and header line.
1308 The next redisplay will update the mode line and header line based on
1309 the latest values of all relevant variables.  With optional
1310 non-@code{nil} @var{all}, force redisplay of all mode lines and header
1311 lines.
1313 This function also forces recomputation of the menu bar menus
1314 and the frame title.
1315 @end defun
1317   The selected window's mode line is usually displayed in a different
1318 color using the face @code{mode-line}.  Other windows' mode lines
1319 appear in the face @code{mode-line-inactive} instead.  @xref{Faces}.
1321   A window that is just one line tall does not display either a mode
1322 line or a header line, even if the variables call for one.  A window
1323 that is two lines tall cannot display both a mode line and a header
1324 line at once; if the variables call for both, only the mode line
1325 actually appears.
1327 @menu
1328 * Mode Line Data::        The data structure that controls the mode line.
1329 * Mode Line Variables::   Variables used in that data structure.
1330 * %-Constructs::          Putting information into a mode line.
1331 * Properties in Mode::    Using text properties in the mode line.
1332 * Header Lines::          Like a mode line, but at the top.
1333 * Emulating Mode Line::   Formatting text as the mode line would.
1334 @end menu
1336 @node Mode Line Data
1337 @subsection The Data Structure of the Mode Line
1338 @cindex mode-line construct
1340   The mode-line contents are controlled by a data structure of lists,
1341 strings, symbols, and numbers kept in buffer-local variables.  The data
1342 structure is called a @dfn{mode-line construct}, and it is built in
1343 recursive fashion out of simpler mode-line constructs.  The same data
1344 structure is used for constructing frame titles (@pxref{Frame Titles})
1345 and header lines (@pxref{Header Lines}).
1347 @defvar mode-line-format
1348 The value of this variable is a mode-line construct with overall
1349 responsibility for the mode-line format.  The value of this variable
1350 controls which other variables are used to form the mode-line text, and
1351 where they appear.
1353 If you set this variable to @code{nil} in a buffer, that buffer does not
1354 have a mode line.
1355 @end defvar
1357   A mode-line construct may be as simple as a fixed string of text, but
1358 it usually specifies how to use other variables to construct the text.
1359 Many of these variables are themselves defined to have mode-line
1360 constructs as their values.
1362   The default value of @code{mode-line-format} incorporates the values
1363 of variables such as @code{mode-line-position} and
1364 @code{mode-line-modes} (which in turn incorporates the values of the
1365 variables @code{mode-name} and @code{minor-mode-alist}).  Because of
1366 this, very few modes need to alter @code{mode-line-format} itself.  For
1367 most purposes, it is sufficient to alter some of the variables that
1368 @code{mode-line-format} either directly or indirectly refers to.
1370   A mode-line construct may be a list, a symbol, or a string.  If the
1371 value is a list, each element may be a list, a symbol, or a string.
1373   The mode line can display various faces, if the strings that control
1374 it have the @code{face} property.  @xref{Properties in Mode}.  In
1375 addition, the face @code{mode-line} is used as a default for the whole
1376 mode line (@pxref{Standard Faces}).
1378 @table @code
1379 @cindex percent symbol in mode line
1380 @item @var{string}
1381 A string as a mode-line construct is displayed verbatim in the mode line
1382 except for @dfn{@code{%}-constructs}.  Decimal digits after the @samp{%}
1383 specify the field width for space filling on the right (i.e., the data
1384 is left justified).  @xref{%-Constructs}.
1386 @item @var{symbol}
1387 A symbol as a mode-line construct stands for its value.  The value of
1388 @var{symbol} is used as a mode-line construct, in place of @var{symbol}.
1389 However, the symbols @code{t} and @code{nil} are ignored, as is any
1390 symbol whose value is void.
1392 There is one exception: if the value of @var{symbol} is a string, it is
1393 displayed verbatim: the @code{%}-constructs are not recognized.
1395 Unless @var{symbol} is marked as ``risky'' (i.e., it has a
1396 non-@code{nil} @code{risky-local-variable} property), all properties in
1397 any strings, as well as all @code{:eval} and @code{:propertize} forms in
1398 the value of that symbol will be ignored.
1400 @item (@var{string} @var{rest}@dots{}) @r{or} (@var{list} @var{rest}@dots{})
1401 A list whose first element is a string or list means to process all the
1402 elements recursively and concatenate the results.  This is the most
1403 common form of mode-line construct.
1405 @item (:eval @var{form})
1406 A list whose first element is the symbol @code{:eval} says to evaluate
1407 @var{form}, and use the result as a string to display.
1409 @item (:propertize @var{elt} @var{props}@dots{})
1410 A list whose first element is the symbol @code{:propertize} says to
1411 process the mode-line construct @var{elt} recursively and add the text
1412 properties specified by @var{props} to the result.  The argument
1413 @var{props} should consist of zero or more pairs @var{text-property}
1414 @var{value}.  (This feature is new as of Emacs 22.1.)
1416 @item (@var{symbol} @var{then} @var{else})
1417 A list whose first element is a symbol that is not a keyword specifies a
1418 conditional.  Its meaning depends on the value of @var{symbol}.  If the
1419 value is non-@code{nil}, the second element, @var{then}, is processed
1420 recursively as a mode-line element.  But if the value of @var{symbol} is
1421 @code{nil}, the third element, @var{else}, is processed recursively.
1422 You may omit @var{else}; then the mode-line element displays nothing if
1423 the value of @var{symbol} is @code{nil}.
1425 @item (@var{width} @var{rest}@dots{})
1426 A list whose first element is an integer specifies truncation or
1427 padding of the results of @var{rest}.  The remaining elements
1428 @var{rest} are processed recursively as mode-line constructs and
1429 concatenated together.  Then the result is space filled (if
1430 @var{width} is positive) or truncated (to @minus{}@var{width} columns,
1431 if @var{width} is negative) on the right.
1433 For example, the usual way to show what percentage of a buffer is above
1434 the top of the window is to use a list like this: @code{(-3 "%p")}.
1435 @end table
1437   If you do alter @code{mode-line-format} itself, the new value should
1438 use the same variables that appear in the default value (@pxref{Mode
1439 Line Variables}), rather than duplicating their contents or displaying
1440 the information in another fashion.  This way, customizations made by
1441 the user or by Lisp programs (such as @code{display-time} and major
1442 modes) via changes to those variables remain effective.
1444 @cindex Shell mode @code{mode-line-format}
1445   Here is an example of a @code{mode-line-format} that might be
1446 useful for @code{shell-mode}, since it contains the host name and default
1447 directory.
1449 @example
1450 @group
1451 (setq mode-line-format
1452   (list "-"
1453    'mode-line-mule-info
1454    'mode-line-modified
1455    'mode-line-frame-identification
1456    "%b--"
1457 @end group
1458 @group
1459    ;; @r{Note that this is evaluated while making the list.}
1460    ;; @r{It makes a mode-line construct which is just a string.}
1461    (getenv "HOST")
1462 @end group
1463    ":"
1464    'default-directory
1465    "   "
1466    'global-mode-string
1467    "   %[("
1468    '(:eval (mode-line-mode-name))
1469    'mode-line-process
1470    'minor-mode-alist
1471    "%n"
1472    ")%]--"
1473 @group
1474    '(which-func-mode ("" which-func-format "--"))
1475    '(line-number-mode "L%l--")
1476    '(column-number-mode "C%c--")
1477    '(-3 "%p")
1478    "-%-"))
1479 @end group
1480 @end example
1482 @noindent
1483 (The variables @code{line-number-mode}, @code{column-number-mode}
1484 and @code{which-func-mode} enable particular minor modes; as usual,
1485 these variable names are also the minor mode command names.)
1487 @node Mode Line Variables
1488 @subsection Variables Used in the Mode Line
1490   This section describes variables incorporated by the
1491 standard value of @code{mode-line-format} into the text of the mode
1492 line.  There is nothing inherently special about these variables; any
1493 other variables could have the same effects on the mode line if
1494 @code{mode-line-format} were changed to use them.
1496 @defvar mode-line-mule-info
1497 This variable holds the value of the mode-line construct that displays
1498 information about the language environment, buffer coding system, and
1499 current input method.  @xref{Non-ASCII Characters}.
1500 @end defvar
1502 @defvar mode-line-modified
1503 This variable holds the value of the mode-line construct that displays
1504 whether the current buffer is modified.
1506 The default value of @code{mode-line-modified} is @code{("%1*%1+")}.
1507 This means that the mode line displays @samp{**} if the buffer is
1508 modified, @samp{--} if the buffer is not modified, @samp{%%} if the
1509 buffer is read only, and @samp{%*} if the buffer is read only and
1510 modified.
1512 Changing this variable does not force an update of the mode line.
1513 @end defvar
1515 @defvar mode-line-frame-identification
1516 This variable identifies the current frame.  The default value is
1517 @code{"  "} if you are using a window system which can show multiple
1518 frames, or @code{"-%F  "} on an ordinary terminal which shows only one
1519 frame at a time.
1520 @end defvar
1522 @defvar mode-line-buffer-identification
1523 This variable identifies the buffer being displayed in the window.  Its
1524 default value is @code{("%12b")}, which displays the buffer name, padded
1525 with spaces to at least 12 columns.
1526 @end defvar
1528 @defvar mode-line-position
1529 This variable indicates the position in the buffer.  Here is a
1530 simplified version of its default value.  The actual default value
1531 also specifies addition of the @code{help-echo} text property.
1533 @example
1534 @group
1535 ((-3 "%p")
1536  (size-indication-mode (8 " of %I"))
1537 @end group
1538 @group
1539  (line-number-mode
1540   ((column-number-mode
1541     (10 " (%l,%c)")
1542     (6 " L%l")))
1543   ((column-number-mode
1544     (5 " C%c")))))
1545 @end group
1546 @end example
1548 This means that @code{mode-line-position} displays at least the buffer
1549 percentage and possibly the buffer size, the line number and the column
1550 number.
1551 @end defvar
1553 @defvar vc-mode
1554 The variable @code{vc-mode}, buffer-local in each buffer, records
1555 whether the buffer's visited file is maintained with version control,
1556 and, if so, which kind.  Its value is a string that appears in the mode
1557 line, or @code{nil} for no version control.
1558 @end defvar
1560 @defvar mode-line-modes
1561 This variable displays the buffer's major and minor modes.  Here is a
1562 simplified version of its default value.  The real default value also
1563 specifies addition of text properties.
1565 @example
1566 @group
1567 ("%[(" mode-name
1568  mode-line-process minor-mode-alist
1569  "%n" ")%]--")
1570 @end group
1571 @end example
1573 So @code{mode-line-modes} normally also displays the recursive editing
1574 level, information on the process status and whether narrowing is in
1575 effect.
1576 @end defvar
1578   The following three variables are used in @code{mode-line-modes}:
1580 @defvar mode-name
1581 This buffer-local variable holds the ``pretty'' name of the current
1582 buffer's major mode.  Each major mode should set this variable so that the
1583 mode name will appear in the mode line.
1584 @end defvar
1586 @defvar mode-line-process
1587 This buffer-local variable contains the mode-line information on process
1588 status in modes used for communicating with subprocesses.  It is
1589 displayed immediately following the major mode name, with no intervening
1590 space.  For example, its value in the @samp{*shell*} buffer is
1591 @code{(":%s")}, which allows the shell to display its status along
1592 with the major mode as: @samp{(Shell:run)}.  Normally this variable
1593 is @code{nil}.
1594 @end defvar
1596 @defvar minor-mode-alist
1597 This variable holds an association list whose elements specify how the
1598 mode line should indicate that a minor mode is active.  Each element of
1599 the @code{minor-mode-alist} should be a two-element list:
1601 @example
1602 (@var{minor-mode-variable} @var{mode-line-string})
1603 @end example
1605 More generally, @var{mode-line-string} can be any mode-line spec.  It
1606 appears in the mode line when the value of @var{minor-mode-variable}
1607 is non-@code{nil}, and not otherwise.  These strings should begin with
1608 spaces so that they don't run together.  Conventionally, the
1609 @var{minor-mode-variable} for a specific mode is set to a
1610 non-@code{nil} value when that minor mode is activated.
1612 @code{minor-mode-alist} itself is not buffer-local.  Each variable
1613 mentioned in the alist should be buffer-local if its minor mode can be
1614 enabled separately in each buffer.
1615 @end defvar
1617 @defvar global-mode-string
1618 This variable holds a mode-line spec that, by default, appears in the
1619 mode line just after the @code{which-func-mode} minor mode if set,
1620 else after @code{mode-line-modes}.  The command @code{display-time}
1621 sets @code{global-mode-string} to refer to the variable
1622 @code{display-time-string}, which holds a string containing the time
1623 and load information.
1625 The @samp{%M} construct substitutes the value of
1626 @code{global-mode-string}, but that is obsolete, since the variable is
1627 included in the mode line from @code{mode-line-format}.
1628 @end defvar
1630   The variable @code{default-mode-line-format} is where
1631 @code{mode-line-format} usually gets its value:
1633 @defvar default-mode-line-format
1634 This variable holds the default @code{mode-line-format} for buffers
1635 that do not override it.  This is the same as @code{(default-value
1636 'mode-line-format)}.
1638 Here is a simplified version of the default value of
1639 @code{default-mode-line-format}.  The real default value also
1640 specifies addition of text properties.
1642 @example
1643 @group
1644 ("-"
1645  mode-line-mule-info
1646  mode-line-modified
1647  mode-line-frame-identification
1648  mode-line-buffer-identification
1649 @end group
1650  "   "
1651  mode-line-position
1652  (vc-mode vc-mode)
1653  "   "
1654 @group
1655  mode-line-modes
1656  (which-func-mode ("" which-func-format "--"))
1657  (global-mode-string ("--" global-mode-string))
1658  "-%-")
1659 @end group
1660 @end example
1661 @end defvar
1663 @node %-Constructs
1664 @subsection @code{%}-Constructs in the Mode Line
1666   The following table lists the recognized @code{%}-constructs and what
1667 they mean.  In any construct except @samp{%%}, you can add a decimal
1668 integer after the @samp{%} to specify how many characters to display.
1670 @table @code
1671 @item %b
1672 The current buffer name, obtained with the @code{buffer-name} function.
1673 @xref{Buffer Names}.
1675 @item %c
1676 The current column number of point.
1678 @item %f
1679 The visited file name, obtained with the @code{buffer-file-name}
1680 function.  @xref{Buffer File Name}.
1682 @item %F
1683 The title (only on a window system) or the name of the selected frame.
1684 @xref{Window Frame Parameters}.
1686 @item %i
1687 The size of the accessible part of the current buffer; basically
1688 @code{(- (point-max) (point-min))}.
1690 @item %I
1691 Like @samp{%i}, but the size is printed in a more readable way by using
1692 @samp{k} for 10^3, @samp{M} for 10^6, @samp{G} for 10^9, etc., to
1693 abbreviate.
1695 @item %l
1696 The current line number of point, counting within the accessible portion
1697 of the buffer.
1699 @item %n
1700 @samp{Narrow} when narrowing is in effect; nothing otherwise (see
1701 @code{narrow-to-region} in @ref{Narrowing}).
1703 @item %p
1704 The percentage of the buffer text above the @strong{top} of window, or
1705 @samp{Top}, @samp{Bottom} or @samp{All}.  Note that the default
1706 mode-line specification truncates this to three characters.
1708 @item %P
1709 The percentage of the buffer text that is above the @strong{bottom} of
1710 the window (which includes the text visible in the window, as well as
1711 the text above the top), plus @samp{Top} if the top of the buffer is
1712 visible on screen; or @samp{Bottom} or @samp{All}.
1714 @item %s
1715 The status of the subprocess belonging to the current buffer, obtained with
1716 @code{process-status}.  @xref{Process Information}.
1718 @item %t
1719 Whether the visited file is a text file or a binary file.  This is a
1720 meaningful distinction only on certain operating systems (@pxref{MS-DOS
1721 File Types}).
1723 @item %*
1724 @samp{%} if the buffer is read only (see @code{buffer-read-only}); @*
1725 @samp{*} if the buffer is modified (see @code{buffer-modified-p}); @*
1726 @samp{-} otherwise.  @xref{Buffer Modification}.
1728 @item %+
1729 @samp{*} if the buffer is modified (see @code{buffer-modified-p}); @*
1730 @samp{%} if the buffer is read only (see @code{buffer-read-only}); @*
1731 @samp{-} otherwise.  This differs from @samp{%*} only for a modified
1732 read-only buffer.  @xref{Buffer Modification}.
1734 @item %&
1735 @samp{*} if the buffer is modified, and @samp{-} otherwise.
1737 @item %[
1738 An indication of the depth of recursive editing levels (not counting
1739 minibuffer levels): one @samp{[} for each editing level.
1740 @xref{Recursive Editing}.
1742 @item %]
1743 One @samp{]} for each recursive editing level (not counting minibuffer
1744 levels).
1746 @item %-
1747 Dashes sufficient to fill the remainder of the mode line.
1749 @item %%
1750 The character @samp{%}---this is how to include a literal @samp{%} in a
1751 string in which @code{%}-constructs are allowed.
1752 @end table
1754 The following two @code{%}-constructs are still supported, but they are
1755 obsolete, since you can get the same results with the variables
1756 @code{mode-name} and @code{global-mode-string}.
1758 @table @code
1759 @item %m
1760 The value of @code{mode-name}.
1762 @item %M
1763 The value of @code{global-mode-string}.  Currently, only
1764 @code{display-time} modifies the value of @code{global-mode-string}.
1765 @end table
1767 @node Properties in Mode
1768 @subsection Properties in the Mode Line
1769 @cindex text properties in the mode line
1771   Certain text properties are meaningful in the
1772 mode line.  The @code{face} property affects the appearance of text; the
1773 @code{help-echo} property associate help strings with the text, and
1774 @code{local-map} can make the text mouse-sensitive.
1776   There are four ways to specify text properties for text in the mode
1777 line:
1779 @enumerate
1780 @item
1781 Put a string with a text property directly into the mode-line data
1782 structure.
1784 @item
1785 Put a text property on a mode-line %-construct such as @samp{%12b}; then
1786 the expansion of the %-construct will have that same text property.
1788 @item
1789 Use a @code{(:propertize @var{elt} @var{props}@dots{})} construct to
1790 give @var{elt} a text property specified by @var{props}.
1792 @item
1793 Use a list containing @code{:eval @var{form}} in the mode-line data
1794 structure, and make @var{form} evaluate to a string that has a text
1795 property.
1796 @end enumerate
1798   You use the @code{local-map} property to specify a keymap.  Like any
1799 keymap, it can bind character keys and function keys; but that has no
1800 effect, since it is impossible to move point into the mode line.  This
1801 keymap can only take real effect for mouse clicks.
1803   When the mode line refers to a variable which does not have a
1804 non-@code{nil} @code{risky-local-variable} property, any text
1805 properties given or specified within that variable's values are
1806 ignored.  This is because such properties could otherwise specify
1807 functions to be called, and those functions could come from file
1808 local variables.
1810 @node Header Lines
1811 @subsection Window Header Lines
1812 @cindex header line (of a window)
1813 @cindex window header line
1815   A window can have a @dfn{header line} at the
1816 top, just as it can have a mode line at the bottom.  The header line
1817 feature works just like the mode-line feature, except that it's
1818 controlled by different variables.
1820 @tindex header-line-format
1821 @defvar header-line-format
1822 This variable, local in every buffer, specifies how to display the
1823 header line, for windows displaying the buffer.  The format of the value
1824 is the same as for @code{mode-line-format} (@pxref{Mode Line Data}).
1825 @end defvar
1827 @tindex default-header-line-format
1828 @defvar default-header-line-format
1829 This variable holds the default @code{header-line-format} for buffers
1830 that do not override it.  This is the same as @code{(default-value
1831 'header-line-format)}.
1833 It is normally @code{nil}, so that ordinary buffers have no header line.
1834 @end defvar
1836 @node Emulating Mode Line
1837 @subsection Emulating Mode-Line Formatting
1839   You can use the function @code{format-mode-line} to compute
1840 the text that would appear in a mode line or header line
1841 based on certain mode-line specification.
1843 @defun format-mode-line format &optional face window buffer
1844 This function formats a line of text according to @var{format} as if
1845 it were generating the mode line for @var{window}, but instead of
1846 displaying the text in the mode line or the header line, it returns
1847 the text as a string.  The argument @var{window} defaults to the
1848 selected window.  If @var{buffer} is non-@code{nil}, all the
1849 information used is taken from @var{buffer}; by default, it comes from
1850 @var{window}'s buffer.
1852 The value string normally has text properties that correspond to the
1853 faces, keymaps, etc., that the mode line would have.  And any character
1854 for which no @code{face} property is specified gets a default
1855 value which is usually @var{face}.  (If @var{face} is @code{t},
1856 that stands for either @code{mode-line} if @var{window} is selected,
1857 otherwise @code{mode-line-inactive}.)
1859 However, if @var{face} is an integer, the value has no text properties.
1861 For example, @code{(format-mode-line header-line-format)} returns the
1862 text that would appear in the selected window's header line (@code{""}
1863 if it has no header line).  @code{(format-mode-line header-line-format
1864 'header-line)} returns the same text, with each character
1865 carrying the face that it will have in the header line itself.
1866 @end defun
1868 @node Imenu
1869 @section Imenu
1871 @cindex Imenu
1872   @dfn{Imenu} is a feature that lets users select a definition or
1873 section in the buffer, from a menu which lists all of them, to go
1874 directly to that location in the buffer.  Imenu works by constructing
1875 a buffer index which lists the names and buffer positions of the
1876 definitions, or other named portions of the buffer; then the user can
1877 choose one of them and move point to it.  Major modes can add a menu
1878 bar item to use Imenu using @code{imenu-add-to-menubar}.
1880 @defun imenu-add-to-menubar name
1881 This function defines a local menu bar item named @var{name}
1882 to run Imenu.
1883 @end defun
1885   The user-level commands for using Imenu are described in the Emacs
1886 Manual (@pxref{Imenu,, Imenu, emacs, the Emacs Manual}).  This section
1887 explains how to customize Imenu's method of finding definitions or
1888 buffer portions for a particular major mode.
1890   The usual and simplest way is to set the variable
1891 @code{imenu-generic-expression}:
1893 @defvar imenu-generic-expression
1894 This variable, if non-@code{nil}, is a list that specifies regular
1895 expressions for finding definitions for Imenu.  Simple elements of
1896 @code{imenu-generic-expression} look like this:
1898 @example
1899 (@var{menu-title} @var{regexp} @var{index})
1900 @end example
1902 Here, if @var{menu-title} is non-@code{nil}, it says that the matches
1903 for this element should go in a submenu of the buffer index;
1904 @var{menu-title} itself specifies the name for the submenu.  If
1905 @var{menu-title} is @code{nil}, the matches for this element go directly
1906 in the top level of the buffer index.
1908 The second item in the list, @var{regexp}, is a regular expression
1909 (@pxref{Regular Expressions}); anything in the buffer that it matches
1910 is considered a definition, something to mention in the buffer index.
1911 The third item, @var{index}, is a non-negative integer that indicates
1912 which subexpression in @var{regexp} matches the definition's name.
1914 An element can also look like this:
1916 @example
1917 (@var{menu-title} @var{regexp} @var{index} @var{function} @var{arguments}@dots{})
1918 @end example
1920 Like in the previous case, each match for this element creates an
1921 index item.  However, if this index item is selected by the user, it
1922 calls @var{function} with arguments consisting of the item name, the
1923 buffer position, and @var{arguments}.
1925 For Emacs Lisp mode, @code{imenu-generic-expression} could look like
1926 this:
1928 @c should probably use imenu-syntax-alist and \\sw rather than [-A-Za-z0-9+]
1929 @example
1930 @group
1931 ((nil "^\\s-*(def\\(un\\|subst\\|macro\\|advice\\)\
1932 \\s-+\\([-A-Za-z0-9+]+\\)" 2)
1933 @end group
1934 @group
1935  ("*Vars*" "^\\s-*(def\\(var\\|const\\)\
1936 \\s-+\\([-A-Za-z0-9+]+\\)" 2)
1937 @end group
1938 @group
1939  ("*Types*"
1940   "^\\s-*\
1941 (def\\(type\\|struct\\|class\\|ine-condition\\)\
1942 \\s-+\\([-A-Za-z0-9+]+\\)" 2))
1943 @end group
1944 @end example
1946 Setting this variable makes it buffer-local in the current buffer.
1947 @end defvar
1949 @defvar imenu-case-fold-search
1950 This variable controls whether matching against the regular
1951 expressions in the value of @code{imenu-generic-expression} is
1952 case-sensitive: @code{t}, the default, means matching should ignore
1953 case.
1955 Setting this variable makes it buffer-local in the current buffer.
1956 @end defvar
1958 @defvar imenu-syntax-alist
1959 This variable is an alist of syntax table modifiers to use while
1960 processing @code{imenu-generic-expression}, to override the syntax table
1961 of the current buffer.  Each element should have this form:
1963 @example
1964 (@var{characters} . @var{syntax-description})
1965 @end example
1967 The @sc{car}, @var{characters}, can be either a character or a string.
1968 The element says to give that character or characters the syntax
1969 specified by @var{syntax-description}, which is passed to
1970 @code{modify-syntax-entry} (@pxref{Syntax Table Functions}).
1972 This feature is typically used to give word syntax to characters which
1973 normally have symbol syntax, and thus to simplify
1974 @code{imenu-generic-expression} and speed up matching.
1975 For example, Fortran mode uses it this way:
1977 @example
1978 (setq imenu-syntax-alist '(("_$" . "w")))
1979 @end example
1981 The @code{imenu-generic-expression} regular expressions can then use
1982 @samp{\\sw+} instead of @samp{\\(\\sw\\|\\s_\\)+}.  Note that this
1983 technique may be inconvenient when the mode needs to limit the initial
1984 character of a name to a smaller set of characters than are allowed in
1985 the rest of a name.
1987 Setting this variable makes it buffer-local in the current buffer.
1988 @end defvar
1990   Another way to customize Imenu for a major mode is to set the
1991 variables @code{imenu-prev-index-position-function} and
1992 @code{imenu-extract-index-name-function}:
1994 @defvar imenu-prev-index-position-function
1995 If this variable is non-@code{nil}, its value should be a function that
1996 finds the next ``definition'' to put in the buffer index, scanning
1997 backward in the buffer from point.  It should return @code{nil} if it
1998 doesn't find another ``definition'' before point.  Otherwise it should
1999 leave point at the place it finds a ``definition,'' and return any
2000 non-@code{nil} value.
2002 Setting this variable makes it buffer-local in the current buffer.
2003 @end defvar
2005 @defvar imenu-extract-index-name-function
2006 If this variable is non-@code{nil}, its value should be a function to
2007 return the name for a definition, assuming point is in that definition
2008 as the @code{imenu-prev-index-position-function} function would leave
2011 Setting this variable makes it buffer-local in the current buffer.
2012 @end defvar
2014   The last way to customize Imenu for a major mode is to set the
2015 variable @code{imenu-create-index-function}:
2017 @defvar imenu-create-index-function
2018 This variable specifies the function to use for creating a buffer
2019 index.  The function should take no arguments, and return an index
2020 alist for the current buffer.  It is called within
2021 @code{save-excursion}, so where it leaves point makes no difference.
2023 The index alist can have three types of elements.  Simple elements
2024 look like this:
2026 @example
2027 (@var{index-name} . @var{index-position})
2028 @end example
2030 Selecting a simple element has the effect of moving to position
2031 @var{index-position} in the buffer.  Special elements look like this:
2033 @example
2034 (@var{index-name} @var{index-position} @var{function} @var{arguments}@dots{})
2035 @end example
2037 Selecting a special element performs:
2039 @example
2040 (funcall @var{function}
2041          @var{index-name} @var{index-position} @var{arguments}@dots{})
2042 @end example
2044 A nested sub-alist element looks like this:
2046 @example
2047 (@var{menu-title} @var{sub-alist})
2048 @end example
2050 It creates the submenu @var{menu-title} specified by @var{sub-alist}.
2052 The default value of @code{imenu-create-index-function} is
2053 @code{imenu-default-create-index-function}.  This function uses
2054 @code{imenu-prev-index-position-function} and
2055 @code{imenu-extract-index-name-function} to produce the index alist.
2056 However, if either of these two variables is @code{nil}, the default
2057 function uses @code{imenu-generic-expression} instead.
2059 Setting this variable makes it buffer-local in the current buffer.
2060 @end defvar
2062 @node Font Lock Mode
2063 @section Font Lock Mode
2064 @cindex Font Lock Mode
2066   @dfn{Font Lock mode} is a feature that automatically attaches
2067 @code{face} properties to certain parts of the buffer based on their
2068 syntactic role.  How it parses the buffer depends on the major mode;
2069 most major modes define syntactic criteria for which faces to use in
2070 which contexts.  This section explains how to customize Font Lock for a
2071 particular major mode.
2073   Font Lock mode finds text to highlight in two ways: through
2074 syntactic parsing based on the syntax table, and through searching
2075 (usually for regular expressions).  Syntactic fontification happens
2076 first; it finds comments and string constants and highlights them.
2077 Search-based fontification happens second.
2079 @menu
2080 * Font Lock Basics::            Overview of customizing Font Lock.
2081 * Search-based Fontification::  Fontification based on regexps.
2082 * Other Font Lock Variables::   Additional customization facilities.
2083 * Levels of Font Lock::         Each mode can define alternative levels
2084                                   so that the user can select more or less.
2085 * Precalculated Fontification:: How Lisp programs that produce the buffer
2086                                   contents can also specify how to fontify it.
2087 * Faces for Font Lock::         Special faces specifically for Font Lock.
2088 * Syntactic Font Lock::         Fontification based on syntax tables.
2089 * Setting Syntax Properties::   Defining character syntax based on context
2090                                   using the Font Lock mechanism.
2091 @end menu
2093 @node Font Lock Basics
2094 @subsection Font Lock Basics
2096   There are several variables that control how Font Lock mode highlights
2097 text.  But major modes should not set any of these variables directly.
2098 Instead, they should set @code{font-lock-defaults} as a buffer-local
2099 variable.  The value assigned to this variable is used, if and when Font
2100 Lock mode is enabled, to set all the other variables.
2102 @defvar font-lock-defaults
2103 This variable is set by major modes, as a buffer-local variable, to
2104 specify how to fontify text in that mode.  It automatically becomes
2105 buffer-local when you set it.  The value should look like this:
2107 @example
2108 (@var{keywords} [@var{keywords-only} [@var{case-fold}
2109  [@var{syntax-alist} [@var{syntax-begin} @var{other-vars}@dots{}]]]])
2110 @end example
2112 The first element, @var{keywords}, indirectly specifies the value of
2113 @code{font-lock-keywords} which directs search-based fontification.
2114 It can be a symbol, a variable or a function whose value is the list
2115 to use for @code{font-lock-keywords}.  It can also be a list of
2116 several such symbols, one for each possible level of fontification.
2117 The first symbol specifies how to do level 1 fontification, the second
2118 symbol how to do level 2, and so on.  @xref{Levels of Font Lock}.
2120 The second element, @var{keywords-only}, specifies the value of the
2121 variable @code{font-lock-keywords-only}.  If this is non-@code{nil},
2122 syntactic fontification (of strings and comments) is not performed.
2123 @xref{Syntactic Font Lock}.
2125 The third element, @var{case-fold}, specifies the value of
2126 @code{font-lock-keywords-case-fold-search}.  If it is non-@code{nil},
2127 Font Lock mode ignores case when searching as directed by
2128 @code{font-lock-keywords}.
2130 If the fourth element, @var{syntax-alist}, is non-@code{nil}, it
2131 should be a list of cons cells of the form @code{(@var{char-or-string}
2132 . @var{string})}.  These are used to set up a syntax table for
2133 syntactic fontification (@pxref{Syntax Table Functions}).  The
2134 resulting syntax table is stored in @code{font-lock-syntax-table}.
2136 The fifth element, @var{syntax-begin}, specifies the value of
2137 @code{font-lock-beginning-of-syntax-function}.
2139 All the remaining elements (if any) are collectively called
2140 @var{other-vars}.  Each of these elements should have the form
2141 @code{(@var{variable} . @var{value})}---which means, make
2142 @var{variable} buffer-local and then set it to @var{value}.  You can
2143 use these @var{other-vars} to set other variables that affect
2144 fontification, aside from those you can control with the first five
2145 elements.  @xref{Other Font Lock Variables}.
2146 @end defvar
2148 @node Search-based Fontification
2149 @subsection Search-based Fontification
2151   The most important variable for customizing Font Lock mode is
2152 @code{font-lock-keywords}.  It specifies the search criteria for
2153 search-based fontification.  You should specify the value of this
2154 variable with @var{keywords} in @code{font-lock-defaults}.
2156 @defvar font-lock-keywords
2157 This variable's value is a list of the keywords to highlight.  Be
2158 careful when composing regular expressions for this list; a poorly
2159 written pattern can dramatically slow things down!
2160 @end defvar
2162   Each element of @code{font-lock-keywords} specifies how to find
2163 certain cases of text, and how to highlight those cases.  Font Lock mode
2164 processes the elements of @code{font-lock-keywords} one by one, and for
2165 each element, it finds and handles all matches.  Ordinarily, once
2166 part of the text has been fontified already, this cannot be overridden
2167 by a subsequent match in the same text; but you can specify different
2168 behavior using the @var{override} element of a @var{subexp-highlighter}.
2170   Each element of @code{font-lock-keywords} should have one of these
2171 forms:
2173 @table @code
2174 @item @var{regexp}
2175 Highlight all matches for @var{regexp} using
2176 @code{font-lock-keyword-face}.  For example,
2178 @example
2179 ;; @r{Highlight occurrences of the word @samp{foo}}
2180 ;; @r{using @code{font-lock-keyword-face}.}
2181 "\\<foo\\>"
2182 @end example
2184 The function @code{regexp-opt} (@pxref{Regexp Functions}) is useful
2185 for calculating optimal regular expressions to match a number of
2186 different keywords.
2188 @item @var{function}
2189 Find text by calling @var{function}, and highlight the matches
2190 it finds using @code{font-lock-keyword-face}.
2192 When @var{function} is called, it receives one argument, the limit of
2193 the search; it should begin searching at point, and not search beyond the
2194 limit.  It should return non-@code{nil} if it succeeds, and set the
2195 match data to describe the match that was found.  Returning @code{nil}
2196 indicates failure of the search.
2198 Fontification will call @var{function} repeatedly with the same limit,
2199 and with point where the previous invocation left it, until
2200 @var{function} fails.  On failure, @var{function} need not reset point
2201 in any particular way.
2203 @item (@var{matcher} . @var{subexp})
2204 In this kind of element, @var{matcher} is either a regular
2205 expression or a function, as described above.  The @sc{cdr},
2206 @var{subexp}, specifies which subexpression of @var{matcher} should be
2207 highlighted (instead of the entire text that @var{matcher} matched).
2209 @example
2210 ;; @r{Highlight the @samp{bar} in each occurrence of @samp{fubar},}
2211 ;; @r{using @code{font-lock-keyword-face}.}
2212 ("fu\\(bar\\)" . 1)
2213 @end example
2215 If you use @code{regexp-opt} to produce the regular expression
2216 @var{matcher}, then you can use @code{regexp-opt-depth} (@pxref{Regexp
2217 Functions}) to calculate the value for @var{subexp}.
2219 @item (@var{matcher} . @var{facespec})
2220 In this kind of element, @var{facespec} is an expression whose value
2221 specifies the face to use for highlighting.  In the simplest case,
2222 @var{facespec} is a Lisp variable (a symbol) whose value is a face
2223 name.
2225 @example
2226 ;; @r{Highlight occurrences of @samp{fubar},}
2227 ;; @r{using the face which is the value of @code{fubar-face}.}
2228 ("fubar" . fubar-face)
2229 @end example
2231 However, @var{facespec} can also evaluate to a list of this form:
2233 @example
2234 (face @var{face} @var{prop1} @var{val1} @var{prop2} @var{val2}@dots{})
2235 @end example
2237 @noindent
2238 to specify the face @var{face} and various additional text properties
2239 to put on the text that matches.  If you do this, be sure to add the
2240 other text property names that you set in this way to the value of
2241 @code{font-lock-extra-managed-props} so that the properties will also
2242 be cleared out when they are no longer appropriate.  Alternatively,
2243 you can set the variable @code{font-lock-unfontify-region-function} to
2244 a function that clears these properties.  @xref{Other Font Lock
2245 Variables}.
2247 @item (@var{matcher} . @var{subexp-highlighter})
2248 In this kind of element, @var{subexp-highlighter} is a list
2249 which specifies how to highlight matches found by @var{matcher}.
2250 It has the form:
2252 @example
2253 (@var{subexp} @var{facespec} [[@var{override} [@var{laxmatch}]])
2254 @end example
2256 The @sc{car}, @var{subexp}, is an integer specifying which subexpression
2257 of the match to fontify (0 means the entire matching text).  The second
2258 subelement, @var{facespec}, is an expression whose value specifies the
2259 face, as described above.
2261 The last two values in @var{subexp-highlighter}, @var{override} and
2262 @var{laxmatch}, are optional flags.  If @var{override} is @code{t},
2263 this element can override existing fontification made by previous
2264 elements of @code{font-lock-keywords}.  If it is @code{keep}, then
2265 each character is fontified if it has not been fontified already by
2266 some other element.  If it is @code{prepend}, the face specified by
2267 @var{facespec} is added to the beginning of the @code{font-lock-face}
2268 property.  If it is @code{append}, the face is added to the end of the
2269 @code{font-lock-face} property.
2271 If @var{laxmatch} is non-@code{nil}, it means there should be no error
2272 if there is no subexpression numbered @var{subexp} in @var{matcher}.
2273 Obviously, fontification of the subexpression numbered @var{subexp} will
2274 not occur.  However, fontification of other subexpressions (and other
2275 regexps) will continue.  If @var{laxmatch} is @code{nil}, and the
2276 specified subexpression is missing, then an error is signaled which
2277 terminates search-based fontification.
2279 Here are some examples of elements of this kind, and what they do:
2281 @smallexample
2282 ;; @r{Highlight occurrences of either @samp{foo} or @samp{bar}, using}
2283 ;; @r{@code{foo-bar-face}, even if they have already been highlighted.}
2284 ;; @r{@code{foo-bar-face} should be a variable whose value is a face.}
2285 ("foo\\|bar" 0 foo-bar-face t)
2287 ;; @r{Highlight the first subexpression within each occurrence}
2288 ;; @r{that the function @code{fubar-match} finds,}
2289 ;; @r{using the face which is the value of @code{fubar-face}.}
2290 (fubar-match 1 fubar-face)
2291 @end smallexample
2293 @item (@var{matcher} . @var{anchored-highlighter})
2294 In this kind of element, @var{anchored-highlighter} specifies how to
2295 highlight text that follows a match found by @var{matcher}.  So a
2296 match found by @var{matcher} acts as the anchor for further searches
2297 specified by @var{anchored-highlighter}.  @var{anchored-highlighter}
2298 is a list of the following form:
2300 @example
2301 (@var{anchored-matcher} @var{pre-form} @var{post-form}
2302                         @var{subexp-highlighters}@dots{})
2303 @end example
2305 Here, @var{anchored-matcher}, like @var{matcher}, is either a regular
2306 expression or a function.  After a match of @var{matcher} is found,
2307 point is at the end of the match.  Now, Font Lock evaluates the form
2308 @var{pre-form}.  Then it searches for matches of
2309 @var{anchored-matcher} and uses @var{subexp-highlighters} to highlight
2310 these.  A @var{subexp-highlighter} is as described above.  Finally,
2311 Font Lock evaluates @var{post-form}.
2313 The forms @var{pre-form} and @var{post-form} can be used to initialize
2314 before, and cleanup after, @var{anchored-matcher} is used.  Typically,
2315 @var{pre-form} is used to move point to some position relative to the
2316 match of @var{matcher}, before starting with @var{anchored-matcher}.
2317 @var{post-form} might be used to move back, before resuming with
2318 @var{matcher}.
2320 After Font Lock evaluates @var{pre-form}, it does not search for
2321 @var{anchored-matcher} beyond the end of the line.  However, if
2322 @var{pre-form} returns a buffer position that is greater than the
2323 position of point after @var{pre-form} is evaluated, then the position
2324 returned by @var{pre-form} is used as the limit of the search instead.
2325 It is generally a bad idea to return a position greater than the end
2326 of the line; in other words, the @var{anchored-matcher} search should
2327 not span lines.
2329 For example,
2331 @smallexample
2332 ;; @r{Highlight occurrences of the word @samp{item} following}
2333 ;; @r{an occurrence of the word @samp{anchor} (on the same line)}
2334 ;; @r{in the value of @code{item-face}.}
2335 ("\\<anchor\\>" "\\<item\\>" nil nil (0 item-face))
2336 @end smallexample
2338 Here, @var{pre-form} and @var{post-form} are @code{nil}.  Therefore
2339 searching for @samp{item} starts at the end of the match of
2340 @samp{anchor}, and searching for subsequent instances of @samp{anchor}
2341 resumes from where searching for @samp{item} concluded.
2343 @item (@var{matcher} @var{highlighters}@dots{})
2344 This sort of element specifies several @var{highlighter} lists for a
2345 single @var{matcher}.  A @var{highlighter} list can be of the type
2346 @var{subexp-highlighter} or @var{anchored-highlighter} as described
2347 above.
2349 For example,
2351 @smallexample
2352 ;; @r{Highlight occurrences of the word @samp{anchor} in the value}
2353 ;; @r{of @code{anchor-face}, and subsequent occurrences of the word}
2354 ;; @r{@samp{item} (on the same line) in the value of @code{item-face}.}
2355 ("\\<anchor\\>" (0 anchor-face)
2356                 ("\\<item\\>" nil nil (0 item-face)))
2357 @end smallexample
2359 @item (eval . @var{form})
2360 Here @var{form} is an expression to be evaluated the first time
2361 this value of @code{font-lock-keywords} is used in a buffer.
2362 Its value should have one of the forms described in this table.
2363 @end table
2365 @vindex font-lock-multiline
2366 @strong{Warning:} Do not design an element of @code{font-lock-keywords}
2367 to match text which spans lines; this does not work reliably.  While
2368 @code{font-lock-fontify-buffer} handles multi-line patterns correctly,
2369 updating when you edit the buffer does not, since it considers text one
2370 line at a time.  If you have patterns that typically only span one
2371 line but can occasionally span two or three, such as
2372 @samp{<title>...</title>}, you can ask Font Lock to be more careful by
2373 setting @code{font-lock-multiline} to @code{t}.  But it still will not
2374 work in all cases.
2376 You can use @var{case-fold} in @code{font-lock-defaults} to specify
2377 the value of @code{font-lock-keywords-case-fold-search} which says
2378 whether search-based fontification should be case-insensitive.
2380 @defvar font-lock-keywords-case-fold-search
2381 Non-@code{nil} means that regular expression matching for the sake of
2382 @code{font-lock-keywords} should be case-insensitive.
2383 @end defvar
2385 You can use @code{font-lock-add-keywords} to add additional
2386 search-based fontification rules to a major mode, and
2387 @code{font-lock-remove-keywords} to removes rules.
2389 @defun font-lock-add-keywords mode keywords &optional append
2390 This function adds highlighting @var{keywords} for @var{mode}.  The
2391 argument @var{keywords} should be a list with the same format as the
2392 variable @code{font-lock-keywords}.  @var{mode} should be a symbol,
2393 the major mode command name, such as @code{c-mode}.  When Font Lock
2394 mode is turned on in @var{mode}, it adds @var{keywords} to
2395 @code{font-lock-keywords}.  @var{mode} can also be @code{nil}; the
2396 highlighting @var{keywords} are immediately added to
2397 @code{font-lock-keywords} in the current buffer in that case.
2399 By default, @var{keywords} are added at the beginning of
2400 @code{font-lock-keywords}.  If the optional argument @var{append} is
2401 @code{set}, they are used to replace the value of
2402 @code{font-lock-keywords}.  If @var{append} is any other
2403 non-@code{nil} value, they are added at the end of
2404 @code{font-lock-keywords}.
2406 For example:
2408 @smallexample
2409 (font-lock-add-keywords 'c-mode
2410  '(("\\<\\(FIXME\\):" 1 font-lock-warning-face prepend)
2411    ("\\<\\(and\\|or\\|not\\)\\>" . font-lock-keyword-face)))
2412 @end smallexample
2414 adds two fontification patterns for C mode: one to fontify the word
2415 @samp{FIXME}, even in comments, and another to fontify the words
2416 @samp{and}, @samp{or} and @samp{not} as keywords.
2418 Some modes have specialized support for additional patterns.  See the
2419 variables @code{c-font-lock-extra-types},
2420 @code{c++-font-lock-extra-types}, @code{objc-font-lock-extra-types}
2421 and @code{java-font-lock-extra-types}, for example.
2422 @end defun
2424 @defun font-lock-remove-keywords mode keywords
2425 This function removes highlighting @var{keywords} for @var{mode}.  As
2426 in @code{font-lock-add-keywords}, @var{mode} should be a major mode
2427 command name or @code{nil}.  If @code{nil}, the highlighting
2428 @var{keywords} are immediately removed in the current buffer.
2429 @end defun
2431 @strong{Warning:} Only use a non-@code{nil} @var{mode} argument when
2432 you use @code{font-lock-add-keywords} or
2433 @code{font-lock-remove-keywords} in your @file{.emacs} file.  When you
2434 use these functions from a Lisp program (such as a minor mode), we
2435 recommend that you use @code{nil} for @var{mode} (and place the call
2436 on a hook) to avoid subtle problems due to the details of the
2437 implementation.
2439 @node Other Font Lock Variables
2440 @subsection Other Font Lock Variables
2442   This section describes additional variables that a major mode can
2443 set by means of @var{other-vars} in @code{font-lock-defaults}
2444 (@pxref{Font Lock Basics}).
2446 @defvar font-lock-mark-block-function
2447 If this variable is non-@code{nil}, it should be a function that is
2448 called with no arguments, to choose an enclosing range of text for
2449 refontification for the command @kbd{M-o M-o}
2450 (@code{font-lock-fontify-block}).
2452 The function should report its choice by placing the region around it.
2453 A good choice is a range of text large enough to give proper results,
2454 but not too large so that refontification becomes slow.  Typical values
2455 are @code{mark-defun} for programming modes or @code{mark-paragraph} for
2456 textual modes.
2457 @end defvar
2459 @defvar font-lock-extra-managed-props
2460 This variable specifies additional properties (other than
2461 @code{font-lock-face}) that are being managed by Font Lock mode.  It
2462 is used by @code{font-lock-default-unfontify-region}, which normally
2463 only manages the @code{font-lock-face} property.  If you want Font
2464 Lock to manage other properties as well, you must specify them in a
2465 @var{facespec} in @code{font-lock-keywords} as well as add them to
2466 this list.  @xref{Search-based Fontification}.
2467 @end defvar
2469 @defvar font-lock-fontify-buffer-function
2470 Function to use for fontifying the buffer.  The default value is
2471 @code{font-lock-default-fontify-buffer}.
2472 @end defvar
2474 @defvar font-lock-unfontify-buffer-function
2475 Function to use for unfontifying the buffer.  This is used when
2476 turning off Font Lock mode.  The default value is
2477 @code{font-lock-default-unfontify-buffer}.
2478 @end defvar
2480 @defvar font-lock-fontify-region-function
2481 Function to use for fontifying a region.  It should take two
2482 arguments, the beginning and end of the region, and an optional third
2483 argument @var{verbose}.  If @var{verbose} is non-@code{nil}, the
2484 function should print status messages.  The default value is
2485 @code{font-lock-default-fontify-region}.
2486 @end defvar
2488 @defvar font-lock-unfontify-region-function
2489 Function to use for unfontifying a region.  It should take two
2490 arguments, the beginning and end of the region.  The default value is
2491 @code{font-lock-default-unfontify-region}.
2492 @end defvar
2494 @defvar font-lock-lines-before
2495 This variable specifies the number of extra lines to consider when
2496 refontifying the buffer after each text change.  Font lock begins
2497 refontifying from that number of lines before the changed region.  The
2498 default is 1, but using a larger value can be useful for coping with
2499 multi-line patterns.
2500 @end defvar
2502 @ignore
2503 @defvar font-lock-inhibit-thing-lock
2504 List of Font Lock mode related modes that should not be turned on.
2505 Currently, valid mode names are @code{fast-lock-mode},
2506 @code{jit-lock-mode} and @code{lazy-lock-mode}.
2507 @end defvar
2508 @end ignore
2510 @node Levels of Font Lock
2511 @subsection Levels of Font Lock
2513   Many major modes offer three different levels of fontification.  You
2514 can define multiple levels by using a list of symbols for @var{keywords}
2515 in @code{font-lock-defaults}.  Each symbol specifies one level of
2516 fontification; it is up to the user to choose one of these levels.  The
2517 chosen level's symbol value is used to initialize
2518 @code{font-lock-keywords}.
2520   Here are the conventions for how to define the levels of
2521 fontification:
2523 @itemize @bullet
2524 @item
2525 Level 1: highlight function declarations, file directives (such as include or
2526 import directives), strings and comments.  The idea is speed, so only
2527 the most important and top-level components are fontified.
2529 @item
2530 Level 2: in addition to level 1, highlight all language keywords,
2531 including type names that act like keywords, as well as named constant
2532 values.  The idea is that all keywords (either syntactic or semantic)
2533 should be fontified appropriately.
2535 @item
2536 Level 3: in addition to level 2, highlight the symbols being defined in
2537 function and variable declarations, and all builtin function names,
2538 wherever they appear.
2539 @end itemize
2541 @node Precalculated Fontification
2542 @subsection Precalculated Fontification
2544   In addition to using @code{font-lock-defaults} for search-based
2545 fontification, you may use the special character property
2546 @code{font-lock-face} (@pxref{Special Properties}).  This property
2547 acts just like the explicit @code{face} property, but its activation
2548 is toggled when the user calls @kbd{M-x font-lock-mode}.  Using
2549 @code{font-lock-face} is especially convenient for special modes
2550 which construct their text programmatically, such as
2551 @code{list-buffers} and @code{occur}.
2553 If your mode does not use any of the other machinery of Font Lock
2554 (i.e. it only uses the @code{font-lock-face} property), it should not
2555 set the variable @code{font-lock-defaults}.  That way, it will not
2556 cause loading of the @file{font-lock} library.
2558 @node Faces for Font Lock
2559 @subsection Faces for Font Lock
2561   You can make Font Lock mode use any face, but several faces are
2562 defined specifically for Font Lock mode.  Each of these symbols is both
2563 a face name, and a variable whose default value is the symbol itself.
2564 Thus, the default value of @code{font-lock-comment-face} is
2565 @code{font-lock-comment-face}.  This means you can write
2566 @code{font-lock-comment-face} in a context such as
2567 @code{font-lock-keywords} where a face-name-valued expression is used.
2569 @table @code
2570 @item font-lock-comment-face
2571 @vindex font-lock-comment-face
2572 Used (typically) for comments.
2574 @item font-lock-comment-delimiter-face
2575 @vindex font-lock-comment-delimiter-face
2576 Used (typically) for comments delimiters.
2578 @item font-lock-doc-face
2579 @vindex font-lock-doc-face
2580 Used (typically) for documentation strings in the code.
2582 @item font-lock-string-face
2583 @vindex font-lock-string-face
2584 Used (typically) for string constants.
2586 @item font-lock-keyword-face
2587 @vindex font-lock-keyword-face
2588 Used (typically) for keywords---names that have special syntactic
2589 significance, like @code{for} and @code{if} in C.
2591 @item font-lock-builtin-face
2592 @vindex font-lock-builtin-face
2593 Used (typically) for built-in function names.
2595 @item font-lock-function-name-face
2596 @vindex font-lock-function-name-face
2597 Used (typically) for the name of a function being defined or declared,
2598 in a function definition or declaration.
2600 @item font-lock-variable-name-face
2601 @vindex font-lock-variable-name-face
2602 Used (typically) for the name of a variable being defined or declared,
2603 in a variable definition or declaration.
2605 @item font-lock-type-face
2606 @vindex font-lock-type-face
2607 Used (typically) for names of user-defined data types,
2608 where they are defined and where they are used.
2610 @item font-lock-constant-face
2611 @vindex font-lock-constant-face
2612 Used (typically) for constant names.
2614 @item font-lock-preprocessor-face
2615 @vindex font-lock-preprocessor-face
2616 Used (typically) for preprocessor commands.
2618 @item font-lock-warning-face
2619 @vindex font-lock-warning-face
2620 Used (typically) for constructs that are peculiar, or that greatly
2621 change the meaning of other text.  For example, this is used for
2622 @samp{;;;###autoload} cookies in Emacs Lisp, and for @code{#error}
2623 directives in C.
2624 @end table
2626 @node Syntactic Font Lock
2627 @subsection Syntactic Font Lock
2629 Syntactic fontification uses the syntax table to find comments and
2630 string constants (@pxref{Syntax Tables}).  It highlights them using
2631 @code{font-lock-comment-face} and @code{font-lock-string-face}
2632 (@pxref{Faces for Font Lock}).  There are several variables that
2633 affect syntactic fontification; you should set them by means of
2634 @code{font-lock-defaults} (@pxref{Font Lock Basics}).
2636 @defvar font-lock-keywords-only
2637 Non-@code{nil} means Font Lock should not do syntactic fontification;
2638 it should only fontify based on @code{font-lock-keywords}.  The normal
2639 way for a mode to set this variable to @code{t} is with
2640 @var{keywords-only} in @code{font-lock-defaults}.
2641 @end defvar
2643 @defvar font-lock-syntax-table
2644 This variable holds the syntax table to use for fontification of
2645 comments and strings.  Specify it using @var{syntax-alist} in
2646 @code{font-lock-defaults}.
2647 @end defvar
2649 @c ???
2650 @c The docstring says that font-lock-syntax-table is semi-obsolete.
2651 @c How the alternative should be used is not clear.  --lute
2653 @defvar font-lock-beginning-of-syntax-function
2654 If this variable is non-@code{nil}, it should be a function to move
2655 point back to a position that is syntactically at ``top level'' and
2656 outside of strings or comments.  Font Lock uses this when necessary
2657 to get the right results for syntactic fontification.
2659 This function is called with no arguments.  It should leave point at
2660 the beginning of any enclosing syntactic block.  Typical values are
2661 @code{beginning-of-line} (used when the start of the line is known to
2662 be outside a syntactic block), or @code{beginning-of-defun} for
2663 programming modes, or @code{backward-paragraph} for textual modes.
2665 If the value is @code{nil}, the beginning of the buffer is used as a
2666 position outside of a syntactic block.  This cannot be wrong, but it
2667 can be slow.
2669 Specify this variable using @var{syntax-begin} in
2670 @code{font-lock-defaults}.
2671 @end defvar
2673 @defvar font-lock-syntactic-face-function
2674 A function to determine which face to use for a given syntactic
2675 element (a string or a comment).  The function is called with one
2676 argument, the parse state at point returned by
2677 @code{parse-partial-sexp}, and should return a face.  The default
2678 value returns @code{font-lock-comment-face} for comments and
2679 @code{font-lock-string-face} for strings.
2681 This can be used to highlighting different kinds of strings or
2682 comments differently.  It is also sometimes abused together with
2683 @code{font-lock-syntactic-keywords} to highlight elements that span
2684 multiple lines, but this is too obscure to document in this manual.
2686 Specify this variable using @var{other-vars} in
2687 @code{font-lock-defaults}.
2688 @end defvar
2690 @node Setting Syntax Properties
2691 @subsection Setting Syntax Properties
2693   Font Lock mode can be used to update @code{syntax-table} properties
2694 automatically (@pxref{Syntax Properties}).  This is useful in
2695 languages for which a single syntax table by itself is not sufficient.
2697 @defvar font-lock-syntactic-keywords
2698 This variable enables and controls updating @code{syntax-table}
2699 properties by Font Lock.  Its value should be a list of elements of
2700 this form:
2702 @example
2703 (@var{matcher} @var{subexp} @var{syntax} @var{override} @var{laxmatch})
2704 @end example
2706 The parts of this element have the same meanings as in the corresponding
2707 sort of element of @code{font-lock-keywords},
2709 @example
2710 (@var{matcher} @var{subexp} @var{facespec} @var{override} @var{laxmatch})
2711 @end example
2713 However, instead of specifying the value @var{facespec} to use for the
2714 @code{face} property, it specifies the value @var{syntax} to use for
2715 the @code{syntax-table} property.  Here, @var{syntax} can be a string
2716 (as taken by @code{modify-syntax-entry}), a syntax table, a cons cell
2717 (as returned by @code{string-to-syntax}), or an expression whose value
2718 is one of those two types.  @var{override} cannot be @code{prepend} or
2719 @code{append}.
2721 For example, an element of the form:
2723 @example
2724 ("\\$\\(#\\)" 1 ".")
2725 @end example
2727 highlights syntactically a hash character when following a dollar
2728 character, with a SYNTAX of @code{"."} (meaning punctuation syntax).
2729 Assuming that the buffer syntax table specifies hash characters to
2730 have comment start syntax, the element will only highlight hash
2731 characters that do not follow dollar characters as comments
2732 syntactically.
2734 An element of the form:
2736 @example
2737  ("\\('\\).\\('\\)"
2738   (1 "\"")
2739   (2 "\""))
2740 @end example
2742 highlights syntactically both single quotes which surround a single
2743 character, with a SYNTAX of @code{"\""} (meaning string quote syntax).
2744 Assuming that the buffer syntax table does not specify single quotes
2745 to have quote syntax, the element will only highlight single quotes of
2746 the form @samp{'@var{c}'} as strings syntactically.  Other forms, such
2747 as @samp{foo'bar} or @samp{'fubar'}, will not be highlighted as
2748 strings.
2750 Major modes normally set this variable with @var{other-vars} in
2751 @code{font-lock-defaults}.
2752 @end defvar
2754 @node Desktop Save Mode
2755 @section Desktop Save Mode
2756 @cindex desktop save mode
2758 @dfn{Desktop Save Mode} is a feature to save the state of Emacs from
2759 one session to another.  The user-level commands for using Desktop
2760 Save Mode are described in the GNU Emacs Manual (@pxref{Saving Emacs
2761 Sessions,,, emacs, the GNU Emacs Manual}).  Modes whose buffers visit
2762 a file, don't have to do anything to use this feature.
2764 For buffers not visiting a file to have their state saved, the major
2765 mode must bind the buffer local variable @code{desktop-save-buffer} to
2766 a non-@code{nil} value.
2768 @defvar desktop-save-buffer
2769 If this buffer-local variable is non-@code{nil}, the buffer will have
2770 its state saved in the desktop file at desktop save.  If the value is
2771 a function, it is called at desktop save with argument
2772 @var{desktop-dirname}, and its value is saved in the desktop file along
2773 with the state of the buffer for which it was called.  When file names
2774 are returned as part of the auxiliary information, they should be
2775 formatted using the call
2777 @example
2778 (desktop-file-name @var{file-name} @var{desktop-dirname})
2779 @end example
2781 @end defvar
2783 For buffers not visiting a file to be restored, the major mode must
2784 define a function to do the job, and that function must be listed in
2785 the alist @code{desktop-buffer-mode-handlers}.
2787 @defvar desktop-buffer-mode-handlers
2788 Alist with elements
2790 @example
2791 (@var{major-mode} . @var{restore-buffer-function})
2792 @end example
2794 The function @var{restore-buffer-function} will be called with
2795 argument list
2797 @example
2798 (@var{buffer-file-name} @var{buffer-name} @var{desktop-buffer-misc})
2799 @end example
2801 and it should return the restored buffer.
2802 Here @var{desktop-buffer-misc} is the value returned by the function
2803 optionally bound to @code{desktop-save-buffer}.
2805 @end defvar
2807 @node Hooks
2808 @section Hooks
2809 @cindex hooks
2811   A @dfn{hook} is a variable where you can store a function or functions
2812 to be called on a particular occasion by an existing program.  Emacs
2813 provides hooks for the sake of customization.  Most often, hooks are set
2814 up in the init file (@pxref{Init File}), but Lisp programs can set them also.
2815 @xref{Standard Hooks}, for a list of standard hook variables.
2817 @cindex normal hook
2818   Most of the hooks in Emacs are @dfn{normal hooks}.  These variables
2819 contain lists of functions to be called with no arguments.  When the
2820 hook name ends in @samp{-hook}, that tells you it is normal.  We try to
2821 make all hooks normal, as much as possible, so that you can use them in
2822 a uniform way.
2824   Every major mode function is supposed to run a normal hook called the
2825 @dfn{mode hook} as the last step of initialization.  This makes it easy
2826 for a user to customize the behavior of the mode, by overriding the
2827 buffer-local variable assignments already made by the mode.  But hooks
2828 are used in other contexts too.  For example, the hook
2829 @code{suspend-hook} runs just before Emacs suspends itself
2830 (@pxref{Suspending Emacs}).
2832   The recommended way to add a hook function to a normal hook is by
2833 calling @code{add-hook} (see below).  The hook functions may be any of
2834 the valid kinds of functions that @code{funcall} accepts (@pxref{What
2835 Is a Function}).  Most normal hook variables are initially void;
2836 @code{add-hook} knows how to deal with this.  You can add hooks either
2837 globally or buffer-locally with @code{add-hook}.
2839 @cindex abnormal hook
2840   If the hook variable's name does not end with @samp{-hook}, that
2841 indicates it is probably an @dfn{abnormal hook}.  Then you should look at its
2842 documentation to see how to use the hook properly.
2844   If the variable's name ends in @samp{-functions} or @samp{-hooks},
2845 then the value is a list of functions, but it is abnormal in that either
2846 these functions are called with arguments or their values are used in
2847 some way.  You can use @code{add-hook} to add a function to the list,
2848 but you must take care in writing the function.  (A few of these
2849 variables, notably those ending in @samp{-hooks}, are actually
2850 normal hooks which were named before we established the convention of
2851 using @samp{-hook} for them.)
2853   If the variable's name ends in @samp{-function}, then its value
2854 is just a single function, not a list of functions.
2856   Here's an example that uses a mode hook to turn on Auto Fill mode when
2857 in Lisp Interaction mode:
2859 @example
2860 (add-hook 'lisp-interaction-mode-hook 'turn-on-auto-fill)
2861 @end example
2863   At the appropriate time, Emacs uses the @code{run-hooks} function to
2864 run particular hooks.  This function calls the hook functions that have
2865 been added with @code{add-hook}.
2867 @defun run-hooks &rest hookvars
2868 This function takes one or more normal hook variable names as
2869 arguments, and runs each hook in turn.  Each argument should be a
2870 symbol that is a normal hook variable.  These arguments are processed
2871 in the order specified.
2873 If a hook variable has a non-@code{nil} value, that value may be a
2874 function or a list of functions.  (The former option is considered
2875 obsolete.)  If the value is a function (either a lambda expression or
2876 a symbol with a function definition), it is called.  If it is a list
2877 that isn't a function, its elements are called, consecutively.  All
2878 the hook functions are called with no arguments.
2879 @end defun
2881 @defun run-hook-with-args hook &rest args
2882 This function is the way to run an abnormal hook and always call all
2883 of the hook functions.  It calls each of the hook functions one by
2884 one, passing each of them the arguments @var{args}.
2885 @end defun
2887 @defun run-hook-with-args-until-failure hook &rest args
2888 This function is the way to run an abnormal hook until one of the hook
2889 functions fails.  It calls each of the hook functions, passing each of
2890 them the arguments @var{args}, until some hook function returns
2891 @code{nil}.  It then stops and returns @code{nil}.  If none of the
2892 hook functions return @code{nil}, it returns a non-@code{nil} value.
2893 @end defun
2895 @defun run-hook-with-args-until-success hook &rest args
2896 This function is the way to run an abnormal hook until a hook function
2897 succeeds.  It calls each of the hook functions, passing each of them
2898 the arguments @var{args}, until some hook function returns
2899 non-@code{nil}.  Then it stops, and returns whatever was returned by
2900 the last hook function that was called.  If all hook functions return
2901 @code{nil}, it returns @code{nil} as well.
2902 @end defun
2904 @defun add-hook hook function &optional append local
2905 This function is the handy way to add function @var{function} to hook
2906 variable @var{hook}.  You can use it for abnormal hooks as well as for
2907 normal hooks.  @var{function} can be any Lisp function that can accept
2908 the proper number of arguments for @var{hook}.  For example,
2910 @example
2911 (add-hook 'text-mode-hook 'my-text-hook-function)
2912 @end example
2914 @noindent
2915 adds @code{my-text-hook-function} to the hook called @code{text-mode-hook}.
2917 If @var{function} is already present in @var{hook} (comparing using
2918 @code{equal}), then @code{add-hook} does not add it a second time.
2920 It is best to design your hook functions so that the order in which they
2921 are executed does not matter.  Any dependence on the order is ``asking
2922 for trouble''.  However, the order is predictable: normally,
2923 @var{function} goes at the front of the hook list, so it will be
2924 executed first (barring another @code{add-hook} call).  If the optional
2925 argument @var{append} is non-@code{nil}, the new hook function goes at
2926 the end of the hook list and will be executed last.
2928 If @var{local} is non-@code{nil}, that says to add @var{function} to
2929 the buffer-local hook list instead of to the global hook list.  If
2930 needed, this makes the hook buffer-local and adds @code{t} to the
2931 buffer-local value.  The latter acts as a flag to run the hook
2932 functions in the default value as well as in the local value.
2933 @end defun
2935 @defun remove-hook hook function &optional local
2936 This function removes @var{function} from the hook variable
2937 @var{hook}.  It compares @var{function} with elements of @var{hook}
2938 using @code{equal}, so it works for both symbols and lambda
2939 expressions.
2941 If @var{local} is non-@code{nil}, that says to remove @var{function}
2942 from the buffer-local hook list instead of from the global hook list.
2943 @end defun
2945 @ignore
2946    arch-tag: 4c7bff41-36e6-4da6-9e7f-9b9289e27c8e
2947 @end ignore