2 @c This is part of the GNU Emacs Lisp Reference Manual.
3 @c Copyright (C) 1990, 1991, 1992, 1993, 1994 Free Software Foundation, Inc.
4 @c See the file elisp.texi for copying conditions.
5 @setfilename ../info/modes
6 @node Modes, Documentation, Keymaps, Top
7 @chapter Major and Minor Modes
10 A @dfn{mode} is a set of definitions that customize Emacs and can be
11 turned on and off while you edit. There are two varieties of modes:
12 @dfn{major modes}, which are mutually exclusive and used for editing
13 particular kinds of text, and @dfn{minor modes}, which provide features
14 that users can enable individually.
16 This chapter describes how to write both major and minor modes, how to
17 indicate them in the mode line, and how they run hooks supplied by the
18 user. For related topics such as keymaps and syntax tables, see
19 @ref{Keymaps}, and @ref{Syntax Tables}.
22 * Major Modes:: Defining major modes.
23 * Minor Modes:: Defining minor modes.
24 * Mode Line Format:: Customizing the text that appears in the mode line.
25 * Hooks:: How to use hooks; how to write code that provides hooks.
31 @cindex Fundamental mode
33 Major modes specialize Emacs for editing particular kinds of text.
34 Each buffer has only one major mode at a time.
36 The least specialized major mode is called @dfn{Fundamental mode}.
37 This mode has no mode-specific definitions or variable settings, so each
38 Emacs command behaves in its default manner, and each option is in its
39 default state. All other major modes redefine various keys and options.
40 For example, Lisp Interaction mode provides special key bindings for
41 @key{LFD} (@code{eval-print-last-sexp}), @key{TAB}
42 (@code{lisp-indent-line}), and other keys.
44 When you need to write several editing commands to help you perform a
45 specialized editing task, creating a new major mode is usually a good
46 idea. In practice, writing a major mode is easy (in contrast to
47 writing a minor mode, which is often difficult).
49 If the new mode is similar to an old one, it is often unwise to modify
50 the old one to serve two purposes, since it may become harder to use and
51 maintain. Instead, copy and rename an existing major mode definition
52 and alter the copy---or define a @dfn{derived mode} (@pxref{Derived
53 Modes}). For example, Rmail Edit mode, which is in
54 @file{emacs/lisp/rmailedit.el}, is a major mode that is very similar to
55 Text mode except that it provides three additional commands. Its
56 definition is distinct from that of Text mode, but was derived from it.
58 Rmail Edit mode is an example of a case where one piece of text is put
59 temporarily into a different major mode so it can be edited in a
60 different way (with ordinary Emacs commands rather than Rmail). In such
61 cases, the temporary major mode usually has a command to switch back to
62 the buffer's usual mode (Rmail mode, in this case). You might be
63 tempted to present the temporary redefinitions inside a recursive edit
64 and restore the usual ones when the user exits; but this is a bad idea
65 because it constrains the user's options when it is done in more than
66 one buffer: recursive edits must be exited most-recently-entered first.
67 Using alternative major modes avoids this limitation. @xref{Recursive
70 The standard GNU Emacs Lisp library directory contains the code for
71 several major modes, in files including @file{text-mode.el},
72 @file{texinfo.el}, @file{lisp-mode.el}, @file{c-mode.el}, and
73 @file{rmail.el}. You can look at these libraries to see how modes are
74 written. Text mode is perhaps the simplest major mode aside from
75 Fundamental mode. Rmail mode is a complicated and specialized mode.
78 * Major Mode Conventions:: Coding conventions for keymaps, etc.
79 * Example Major Modes:: Text mode and Lisp modes.
80 * Auto Major Mode:: How Emacs chooses the major mode automatically.
81 * Mode Help:: Finding out how to use a mode.
82 * Derived Modes:: Defining a new major mode based on another major
86 @node Major Mode Conventions
87 @subsection Major Mode Conventions
89 The code for existing major modes follows various coding conventions,
90 including conventions for local keymap and syntax table initialization,
91 global names, and hooks. Please follow these conventions when you
92 define a new major mode:
96 Define a command whose name ends in @samp{-mode}, with no arguments,
97 that switches to the new mode in the current buffer. This command
98 should set up the keymap, syntax table, and local variables in an
99 existing buffer without changing the buffer's text.
102 Write a documentation string for this command that describes the
103 special commands available in this mode. @kbd{C-h m}
104 (@code{describe-mode}) in your mode will display this string.
106 The documentation string may include the special documentation
107 substrings, @samp{\[@var{command}]}, @samp{\@{@var{keymap}@}}, and
108 @samp{\<@var{keymap}>}, that enable the documentation to adapt
109 automatically to the user's own key bindings. @xref{Keys in
113 The major mode command should start by calling
114 @code{kill-all-local-variables}. This is what gets rid of the local
115 variables of the major mode previously in effect.
118 The major mode command should set the variable @code{major-mode} to the
119 major mode command symbol. This is how @code{describe-mode} discovers
120 which documentation to print.
123 The major mode command should set the variable @code{mode-name} to the
124 ``pretty'' name of the mode, as a string. This appears in the mode
128 @cindex functions in modes
129 Since all global names are in the same name space, all the global
130 variables, constants, and functions that are part of the mode should
131 have names that start with the major mode name (or with an abbreviation
132 of it if the name is long). @xref{Style Tips}.
135 @cindex keymaps in modes
136 The major mode should usually have its own keymap, which is used as the
137 local keymap in all buffers in that mode. The major mode function
138 should call @code{use-local-map} to install this local map.
139 @xref{Active Keymaps}, for more information.
141 This keymap should be kept in a global variable named
142 @code{@var{modename}-mode-map}. Normally the library that defines the
143 mode sets this variable.
145 @xref{Tips for Defining}, for advice about how to write the code to set
146 up the mode's keymap variable.
149 @cindex syntax tables in modes
150 The mode may have its own syntax table or may share one with other
151 related modes. If it has its own syntax table, it should store this in
152 a variable named @code{@var{modename}-mode-syntax-table}. @xref{Syntax
156 @cindex abbrev tables in modes
157 The mode may have its own abbrev table or may share one with other
158 related modes. If it has its own abbrev table, it should store this in
159 a variable named @code{@var{modename}-mode-abbrev-table}. @xref{Abbrev
163 Use @code{defvar} to set mode-related variables, so that they are not
164 reinitialized if they already have a value. (Such reinitialization
165 could discard customizations made by the user.)
168 @cindex buffer-local variables in modes
169 To make a buffer-local binding for an Emacs customization variable, use
170 @code{make-local-variable} in the major mode command, not
171 @code{make-variable-buffer-local}. The latter function would make the
172 variable local to every buffer in which it is subsequently set, which
173 would affect buffers that do not use this mode. It is undesirable for a
174 mode to have such global effects. @xref{Buffer-Local Variables}.
176 It's ok to use @code{make-variable-buffer-local}, if you wish, for a
177 variable used only within a single Lisp package.
181 @cindex major mode hook
182 Each major mode should have a @dfn{mode hook} named
183 @code{@var{modename}-mode-hook}. The major mode command should run that
184 hook, with @code{run-hooks}, as the very last thing it
188 The major mode command may also run the hooks of some more basic modes.
189 For example, @code{indented-text-mode} runs @code{text-mode-hook} as
190 well as @code{indented-text-mode-hook}. It may run these other hooks
191 immediately before the mode's own hook (that is, after everything else),
192 or it may run them earlier.
195 If something special should be done if the user switches a buffer from
196 this mode to any other major mode, the mode can set a local value for
197 @code{change-major-mode-hook}.
200 If this mode is appropriate only for specially-prepared text, then the
201 major mode command symbol should have a property named @code{mode-class}
202 with value @code{special}, put on as follows:
204 @cindex @code{mode-class} property
205 @cindex @code{special}
207 (put 'funny-mode 'mode-class 'special)
211 This tells Emacs that new buffers created while the current buffer has
212 Funny mode should not inherit Funny mode. Modes such as Dired, Rmail,
213 and Buffer List use this feature.
216 If you want to make the new mode the default for files with certain
217 recognizable names, add an element to @code{auto-mode-alist} to select
218 the mode for those file names. If you define the mode command to
219 autoload, you should add this element in the same file that calls
220 @code{autoload}. Otherwise, it is sufficient to add the element in the
221 file that contains the mode definition. @xref{Auto Major Mode}.
224 @cindex @file{.emacs} customization
225 In the documentation, you should provide a sample @code{autoload} form
226 and an example of how to add to @code{auto-mode-alist}, that users can
227 include in their @file{.emacs} files.
231 The top-level forms in the file defining the mode should be written so
232 that they may be evaluated more than once without adverse consequences.
233 Even if you never load the file more than once, someone else will.
236 @defvar change-major-mode-hook
237 This normal hook is run by @code{kill-all-local-variables} before it
238 does anything else. This gives major modes a way to arrange for
239 something special to be done if the user switches to a different major
240 mode. For best results, make this variable buffer-local, so that it
241 will disappear after doing its job and will not interfere with the
242 subsequent major mode. @xref{Hooks}.
245 @node Example Major Modes
246 @subsection Major Mode Examples
248 Text mode is perhaps the simplest mode besides Fundamental mode.
249 Here are excerpts from @file{text-mode.el} that illustrate many of
250 the conventions listed above:
254 ;; @r{Create mode-specific tables.}
255 (defvar text-mode-syntax-table nil
256 "Syntax table used while in text mode.")
260 (if text-mode-syntax-table
261 () ; @r{Do not change the table if it is already set up.}
262 (setq text-mode-syntax-table (make-syntax-table))
263 (modify-syntax-entry ?\" ". " text-mode-syntax-table)
264 (modify-syntax-entry ?\\ ". " text-mode-syntax-table)
265 (modify-syntax-entry ?' "w " text-mode-syntax-table))
269 (defvar text-mode-abbrev-table nil
270 "Abbrev table used while in text mode.")
271 (define-abbrev-table 'text-mode-abbrev-table ())
275 (defvar text-mode-map nil) ; @r{Create a mode-specific keymap.}
278 () ; @r{Do not change the keymap if it is already set up.}
279 (setq text-mode-map (make-sparse-keymap))
280 (define-key text-mode-map "\t" 'tab-to-tab-stop)
281 (define-key text-mode-map "\es" 'center-line)
282 (define-key text-mode-map "\eS" 'center-paragraph))
286 Here is the complete major mode function definition for Text mode:
291 "Major mode for editing text intended for humans to read.
292 Special commands: \\@{text-mode-map@}
295 Turning on text-mode runs the hook `text-mode-hook'."
297 (kill-all-local-variables)
300 (use-local-map text-mode-map) ; @r{This provides the local keymap.}
301 (setq mode-name "Text") ; @r{This name goes into the mode line.}
302 (setq major-mode 'text-mode) ; @r{This is how @code{describe-mode}}
303 ; @r{finds the doc string to print.}
304 (setq local-abbrev-table text-mode-abbrev-table)
305 (set-syntax-table text-mode-syntax-table)
306 (run-hooks 'text-mode-hook)) ; @r{Finally, this permits the user to}
307 ; @r{customize the mode with a hook.}
311 @cindex @file{lisp-mode.el}
312 The three Lisp modes (Lisp mode, Emacs Lisp mode, and Lisp
313 Interaction mode) have more features than Text mode and the code is
314 correspondingly more complicated. Here are excerpts from
315 @file{lisp-mode.el} that illustrate how these modes are written.
317 @cindex syntax table example
320 ;; @r{Create mode-specific table variables.}
321 (defvar lisp-mode-syntax-table nil "")
322 (defvar emacs-lisp-mode-syntax-table nil "")
323 (defvar lisp-mode-abbrev-table nil "")
327 (if (not emacs-lisp-mode-syntax-table) ; @r{Do not change the table}
328 ; @r{if it is already set.}
330 (setq emacs-lisp-mode-syntax-table (make-syntax-table))
334 ;; @r{Set syntax of chars up to 0 to class of chars that are}
335 ;; @r{part of symbol names but not words.}
336 ;; @r{(The number 0 is @code{48} in the @sc{ASCII} character set.)}
338 (modify-syntax-entry i "_ " emacs-lisp-mode-syntax-table)
343 ;; @r{Set the syntax for other characters.}
344 (modify-syntax-entry ? " " emacs-lisp-mode-syntax-table)
345 (modify-syntax-entry ?\t " " emacs-lisp-mode-syntax-table)
349 (modify-syntax-entry ?\( "() " emacs-lisp-mode-syntax-table)
350 (modify-syntax-entry ?\) ")( " emacs-lisp-mode-syntax-table)
352 ;; @r{Create an abbrev table for lisp-mode.}
353 (define-abbrev-table 'lisp-mode-abbrev-table ())
357 Much code is shared among the three Lisp modes. The following
358 function sets various variables; it is called by each of the major Lisp
363 (defun lisp-mode-variables (lisp-syntax)
364 ;; @r{The @code{lisp-syntax} argument is @code{nil} in Emacs Lisp mode,}
365 ;; @r{and @code{t} in the other two Lisp modes.}
367 (if (not lisp-mode-syntax-table)
368 ;; @r{The Emacs Lisp mode syntax table always exists, but}
369 ;; @r{the Lisp Mode syntax table is created the first time a}
370 ;; @r{mode that needs it is called. This is to save space.}
373 (progn (setq lisp-mode-syntax-table
374 (copy-syntax-table emacs-lisp-mode-syntax-table))
375 ;; @r{Change some entries for Lisp mode.}
376 (modify-syntax-entry ?\| "\" "
377 lisp-mode-syntax-table)
378 (modify-syntax-entry ?\[ "_ "
379 lisp-mode-syntax-table)
380 (modify-syntax-entry ?\] "_ "
381 lisp-mode-syntax-table)))
384 (set-syntax-table lisp-mode-syntax-table)))
385 (setq local-abbrev-table lisp-mode-abbrev-table)
390 Functions such as @code{forward-paragraph} use the value of the
391 @code{paragraph-start} variable. Since Lisp code is different from
392 ordinary text, the @code{paragraph-start} variable needs to be set
393 specially to handle Lisp. Also, comments are indented in a special
394 fashion in Lisp and the Lisp modes need their own mode-specific
395 @code{comment-indent-function}. The code to set these variables is the
396 rest of @code{lisp-mode-variables}.
400 (make-local-variable 'paragraph-start)
401 ;; @r{Having @samp{^} is not clean, but @code{page-delimiter}}
402 ;; @r{has them too, and removing those is a pain.}
403 (setq paragraph-start (concat "^$\\|" page-delimiter))
407 (make-local-variable 'comment-indent-function)
408 (setq comment-indent-function 'lisp-comment-indent))
412 Each of the different Lisp modes has a slightly different keymap. For
413 example, Lisp mode binds @kbd{C-c C-l} to @code{run-lisp}, but the other
414 Lisp modes do not. However, all Lisp modes have some commands in
415 common. The following function adds these common commands to a given
420 (defun lisp-mode-commands (map)
421 (define-key map "\e\C-q" 'indent-sexp)
422 (define-key map "\177" 'backward-delete-char-untabify)
423 (define-key map "\t" 'lisp-indent-line))
427 Here is an example of using @code{lisp-mode-commands} to initialize a
428 keymap, as part of the code for Emacs Lisp mode. First we declare a
429 variable with @code{defvar} to hold the mode-specific keymap. When this
430 @code{defvar} executes, it sets the variable to @code{nil} if it was
431 void. Then we set up the keymap if the variable is @code{nil}.
433 This code avoids changing the keymap or the variable if it is already
434 set up. This lets the user customize the keymap.
438 (defvar emacs-lisp-mode-map () "")
439 (if emacs-lisp-mode-map
441 (setq emacs-lisp-mode-map (make-sparse-keymap))
442 (define-key emacs-lisp-mode-map "\e\C-x" 'eval-defun)
443 (lisp-mode-commands emacs-lisp-mode-map))
447 Finally, here is the complete major mode function definition for
452 (defun emacs-lisp-mode ()
453 "Major mode for editing Lisp code to run in Emacs.
455 Delete converts tabs to spaces as it moves back.
456 Blank lines separate paragraphs. Semicolons start comments.
457 \\@{emacs-lisp-mode-map@}
460 Entry to this mode runs the hook `emacs-lisp-mode-hook'."
462 (kill-all-local-variables)
463 (use-local-map emacs-lisp-mode-map) ; @r{This provides the local keymap.}
464 (set-syntax-table emacs-lisp-mode-syntax-table)
467 (setq major-mode 'emacs-lisp-mode) ; @r{This is how @code{describe-mode}}
468 ; @r{finds out what to describe.}
469 (setq mode-name "Emacs-Lisp") ; @r{This goes into the mode line.}
470 (lisp-mode-variables nil) ; @r{This defines various variables.}
471 (run-hooks 'emacs-lisp-mode-hook)) ; @r{This permits the user to use a}
472 ; @r{hook to customize the mode.}
476 @node Auto Major Mode
477 @subsection How Emacs Chooses a Major Mode
479 Based on information in the file name or in the file itself, Emacs
480 automatically selects a major mode for the new buffer when a file is
483 @deffn Command fundamental-mode
484 Fundamental mode is a major mode that is not specialized for anything
485 in particular. Other major modes are defined in effect by comparison
486 with this one---their definitions say what to change, starting from
487 Fundamental mode. The @code{fundamental-mode} function does @emph{not}
488 run any hooks; you're not supposed to customize it. (If you want Emacs
489 to behave differently in Fundamental mode, change the @emph{global}
493 @deffn Command normal-mode &optional find-file
494 This function establishes the proper major mode and local variable
495 bindings for the current buffer. First it calls @code{set-auto-mode},
496 then it runs @code{hack-local-variables} to parse, and bind or
497 evaluate as appropriate, any local variables.
499 If the @var{find-file} argument to @code{normal-mode} is
500 non-@code{nil}, @code{normal-mode} assumes that the @code{find-file}
501 function is calling it. In this case, it may process a local variables
502 list at the end of the file and in the @samp{-*-} line. The variable
503 @code{enable-local-variables} controls whether to do so.
505 If you run @code{normal-mode} interactively, the argument
506 @var{find-file} is normally @code{nil}. In this case,
507 @code{normal-mode} unconditionally processes any local variables list.
508 @xref{File variables, , Local Variables in Files, emacs, The GNU Emacs
509 Manual}, for the syntax of the local variables section of a file.
511 @cindex file mode specification error
512 @code{normal-mode} uses @code{condition-case} around the call to the
513 major mode function, so errors are caught and reported as a @samp{File
514 mode specification error}, followed by the original error message.
517 @defopt enable-local-variables
518 This variable controls processing of local variables lists in files
519 being visited. A value of @code{t} means process the local variables
520 lists unconditionally; @code{nil} means ignore them; anything else means
521 ask the user what to do for each file. The default value is @code{t}.
524 @defvar ignored-local-variables
525 This variable holds a list of variables that should not be
526 set by a local variables list. Any value specified
527 for one of these variables is ignored.
530 In addition to this list, any variable whose name has a non-@code{nil}
531 @code{risky-local-variable} property is also ignored.
533 @defopt enable-local-eval
534 This variable controls processing of @samp{Eval:} in local variables
535 lists in files being visited. A value of @code{t} means process them
536 unconditionally; @code{nil} means ignore them; anything else means ask
537 the user what to do for each file. The default value is @code{maybe}.
541 @cindex visited file mode
542 This function selects the major mode that is appropriate for the
543 current buffer. It may base its decision on the value of the @w{@samp{-*-}}
544 line, on the visited file name (using @code{auto-mode-alist}), on the
545 @w{@samp{#!}} line (using @code{interpreter-mode-alist}), or on the
546 value of a local variable. However, this function does not look for
547 the @samp{mode:} local variable near the end of a file; the
548 @code{hack-local-variables} function does that. @xref{Choosing Modes, ,
549 How Major Modes are Chosen, emacs, The GNU Emacs Manual}.
552 @defopt default-major-mode
553 This variable holds the default major mode for new buffers. The
554 standard value is @code{fundamental-mode}.
556 If the value of @code{default-major-mode} is @code{nil}, Emacs uses
557 the (previously) current buffer's major mode for the major mode of a new
558 buffer. However, if the major mode symbol has a @code{mode-class}
559 property with value @code{special}, then it is not used for new buffers;
560 Fundamental mode is used instead. The modes that have this property are
561 those such as Dired and Rmail that are useful only with text that has
562 been specially prepared.
565 @defun set-buffer-major-mode buffer
566 This function sets the major mode of @var{buffer} to the value of
567 @code{default-major-mode}. If that variable is @code{nil}, it uses
568 the current buffer's major mode (if that is suitable).
570 The low-level primitives for creating buffers do not use this function,
571 but medium-level commands such as @code{switch-to-buffer} and
572 @code{find-file-noselect} use it whenever they create buffers.
575 @defvar initial-major-mode
576 @cindex @samp{*scratch*}
577 The value of this variable determines the major mode of the initial
578 @samp{*scratch*} buffer. The value should be a symbol that is a major
579 mode command name. The default value is @code{lisp-interaction-mode}.
582 @defvar auto-mode-alist
583 This variable contains an association list of file name patterns
584 (regular expressions; @pxref{Regular Expressions}) and corresponding
585 major mode functions. Usually, the file name patterns test for
586 suffixes, such as @samp{.el} and @samp{.c}, but this need not be the
587 case. An ordinary element of the alist looks like @code{(@var{regexp} .
588 @var{mode-function})}.
594 (("^/tmp/fol/" . text-mode)
595 ("\\.texinfo\\'" . texinfo-mode)
596 ("\\.texi\\'" . texinfo-mode)
599 ("\\.el\\'" . emacs-lisp-mode)
606 When you visit a file whose expanded file name (@pxref{File Name
607 Expansion}) matches a @var{regexp}, @code{set-auto-mode} calls the
608 corresponding @var{mode-function}. This feature enables Emacs to select
609 the proper major mode for most files.
611 If an element of @code{auto-mode-alist} has the form @code{(@var{regexp}
612 @var{function} t)}, then after calling @var{function}, Emacs searches
613 @code{auto-mode-alist} again for a match against the portion of the file
614 name that did not match before.
616 This match-again feature is useful for uncompression packages: an entry
617 of the form @code{("\\.gz\\'" . @var{function})} can uncompress the file
618 and then put the uncompressed file in the proper mode according to the
619 name sans @samp{.gz}.
621 Here is an example of how to prepend several pattern pairs to
622 @code{auto-mode-alist}. (You might use this sort of expression in your
627 (setq auto-mode-alist
629 ;; @r{File name starts with a dot.}
630 '(("/\\.[^/]*\\'" . fundamental-mode)
631 ;; @r{File name has no dot.}
632 ("[^\\./]*\\'" . fundamental-mode)
633 ;; @r{File name ends in @samp{.C}.}
634 ("\\.C\\'" . c++-mode))
640 @defvar interpreter-mode-alist
641 This variable specifes major modes to use for scripts that specify a
642 command interpreter in an @samp{#!} line. Its value is a list of
643 elements of the form @code{(@var{interpreter} . @var{mode})}; for
644 example, @code{("perl" . perl-mode)} is one element present by default.
645 The element says to use mode @var{mode} if the file specifies
648 This variable is applicable only when the @code{auto-mode-alist} does
649 not indicate which major mode to use.
652 @defun hack-local-variables &optional force
653 This function parses, and binds or evaluates as appropriate, any local
654 variables for the current buffer.
656 The handling of @code{enable-local-variables} documented for
657 @code{normal-mode} actually takes place here. The argument @var{force}
658 usually comes from the argument @var{find-file} given to
663 @subsection Getting Help about a Major Mode
665 @cindex help for major mode
666 @cindex documentation for major mode
668 The @code{describe-mode} function is used to provide information
669 about major modes. It is normally called with @kbd{C-h m}. The
670 @code{describe-mode} function uses the value of @code{major-mode},
671 which is why every major mode function needs to set the
672 @code{major-mode} variable.
674 @deffn Command describe-mode
675 This function displays the documentation of the current major mode.
677 The @code{describe-mode} function calls the @code{documentation}
678 function using the value of @code{major-mode} as an argument. Thus, it
679 displays the documentation string of the major mode function.
680 (@xref{Accessing Documentation}.)
684 This variable holds the symbol for the current buffer's major mode.
685 This symbol should have a function definition that is the command to
686 switch to that major mode. The @code{describe-mode} function uses the
687 documentation string of the function as the documentation of the major
692 @subsection Defining Derived Modes
694 It's often useful to define a new major mode in terms of an existing
695 one. An easy way to do this is to use @code{define-derived-mode}.
697 @defmac define-derived-mode variant parent name docstring body@dots{}
698 This construct defines @var{variant} as a major mode command, using
699 @var{name} as the string form of the mode name.
701 The new command @var{variant} is defined to call the function
702 @var{parent}, then override certain aspects of that parent mode:
706 The new mode has its own keymap, named @code{@var{variant}-map}.
707 @code{define-derived-mode} initializes this map to inherit from
708 @code{@var{parent}-map}, if it is not already set.
711 The new mode has its own syntax table, kept in the variable
712 @code{@var{variant}-syntax-table}.
713 @code{define-derived-mode} initializes this variable by copying
714 @code{@var{parent}-syntax-table}, if it is not already set.
717 The new mode has its own abbrev table, kept in the variable
718 @code{@var{variant}-abbrev-table}.
719 @code{define-derived-mode} initializes this variable by copying
720 @code{@var{parent}-abbrev-table}, if it is not already set.
723 The new mode has its own mode hook, @code{@var{variant}-hook},
724 which it runs in standard fashion as the very last thing that it does.
725 (The new mode also runs the mode hook of @var{parent} as part
726 of calling @var{parent}.)
729 In addition, you can specify how to override other aspects of
730 @var{parent} with @var{body}. The command @var{variant}
731 evaluates the forms in @var{body} after setting up all its usual
732 overrides, just before running @code{@var{variant}-hook}.
734 The argument @var{docstring} specifies the documentation string for the
735 new mode. If you omit @var{docstring}, @code{define-derived-mode}
736 generates a documentation string.
738 Here is a hypothetical example:
741 (define-derived-mode hypertext-mode
742 text-mode "Hypertext"
743 "Major mode for hypertext.
744 \\@{hypertext-mode-map@}"
745 (setq case-fold-search nil))
747 (define-key hypertext-mode-map
748 [down-mouse-3] 'do-hyper-link)
756 A @dfn{minor mode} provides features that users may enable or disable
757 independently of the choice of major mode. Minor modes can be enabled
758 individually or in combination. Minor modes would be better named
759 ``Generally available, optional feature modes'' except that such a name is
762 A minor mode is not usually a modification of single major mode. For
763 example, Auto Fill mode may be used in any major mode that permits text
764 insertion. To be general, a minor mode must be effectively independent
765 of the things major modes do.
767 A minor mode is often much more difficult to implement than a major
768 mode. One reason is that you should be able to activate and deactivate
769 minor modes in any order. A minor mode should be able to have its
770 desired effect regardless of the major mode and regardless of the other
771 minor modes in effect.
773 Often the biggest problem in implementing a minor mode is finding a
774 way to insert the necessary hook into the rest of Emacs. Minor mode
775 keymaps make this easier than it used to be.
778 * Minor Mode Conventions:: Tips for writing a minor mode.
779 * Keymaps and Minor Modes:: How a minor mode can have its own keymap.
782 @node Minor Mode Conventions
783 @subsection Conventions for Writing Minor Modes
784 @cindex minor mode conventions
785 @cindex conventions for writing minor modes
787 There are conventions for writing minor modes just as there are for
788 major modes. Several of the major mode conventions apply to minor
789 modes as well: those regarding the name of the mode initialization
790 function, the names of global symbols, and the use of keymaps and
793 In addition, there are several conventions that are specific to
798 @cindex mode variable
799 Make a variable whose name ends in @samp{-mode} to represent the minor
800 mode. Its value should enable or disable the mode (@code{nil} to
801 disable; anything else to enable.) We call this the @dfn{mode
804 This variable is used in conjunction with the @code{minor-mode-alist} to
805 display the minor mode name in the mode line. It can also enable
806 or disable a minor mode keymap. Individual commands or hooks can also
807 check the variable's value.
809 If you want the minor mode to be enabled separately in each buffer,
810 make the variable buffer-local.
813 Define a command whose name is the same as the mode variable.
814 Its job is to enable and disable the mode by setting the variable.
816 The command should accept one optional argument. If the argument is
817 @code{nil}, it should toggle the mode (turn it on if it is off, and off
818 if it is on). Otherwise, it should turn the mode on if the argument is
819 a positive integer, a symbol other than @code{nil} or @code{-}, or a
820 list whose @sc{car} is such an integer or symbol; it should turn the
823 Here is an example taken from the definition of @code{transient-mark-mode}.
824 It shows the use of @code{transient-mark-mode} as a variable that enables or
825 disables the mode's behavior, and also shows the proper way to toggle,
826 enable or disable the minor mode based on the raw prefix argument value.
830 (setq transient-mark-mode
831 (if (null arg) (not transient-mark-mode)
832 (> (prefix-numeric-value arg) 0)))
837 Add an element to @code{minor-mode-alist} for each minor mode
838 (@pxref{Mode Line Variables}). This element should be a list of the
842 (@var{mode-variable} @var{string})
845 Here @var{mode-variable} is the variable that controls enabling of the
846 minor mode, and @var{string} is a short string, starting with a space,
847 to represent the mode in the mode line. These strings must be short so
848 that there is room for several of them at once.
850 When you add an element to @code{minor-mode-alist}, use @code{assq} to
851 check for an existing element, to avoid duplication. For example:
855 (or (assq 'leif-mode minor-mode-alist)
856 (setq minor-mode-alist
857 (cons '(leif-mode " Leif") minor-mode-alist)))
862 @node Keymaps and Minor Modes
863 @subsection Keymaps and Minor Modes
865 Each minor mode can have its own keymap, which is active when the mode
866 is enabled. To set up a keymap for a minor mode, add an element to the
867 alist @code{minor-mode-map-alist}. @xref{Active Keymaps}.
869 @cindex @code{self-insert-command}, minor modes
870 One use of minor mode keymaps is to modify the behavior of certain
871 self-inserting characters so that they do something else as well as
872 self-insert. In general, this is the only way to do that, since the
873 facilities for customizing @code{self-insert-command} are limited to
874 special cases (designed for abbrevs and Auto Fill mode). (Do not try
875 substituting your own definition of @code{self-insert-command} for the
876 standard one. The editor command loop handles this function specially.)
878 @node Mode Line Format
879 @section Mode Line Format
882 Each Emacs window (aside from minibuffer windows) includes a mode line,
883 which displays status information about the buffer displayed in the
884 window. The mode line contains information about the buffer, such as its
885 name, associated file, depth of recursive editing, and the major and
888 This section describes how the contents of the mode line are
889 controlled. It is in the chapter on modes because much of the
890 information displayed in the mode line relates to the enabled major and
893 @code{mode-line-format} is a buffer-local variable that holds a
894 template used to display the mode line of the current buffer. All
895 windows for the same buffer use the same @code{mode-line-format} and
896 their mode lines appear the same (except for scrolling percentages and
899 The mode line of a window is normally updated whenever a different
900 buffer is shown in the window, or when the buffer's modified-status
901 changes from @code{nil} to @code{t} or vice-versa. If you modify any of
902 the variables referenced by @code{mode-line-format} (@pxref{Mode Line
903 Variables}), you may want to force an update of the mode line so as to
904 display the new information.
907 @defun force-mode-line-update
908 Force redisplay of the current buffer's mode line.
911 The mode line is usually displayed in inverse video; see
912 @code{mode-line-inverse-video} in @ref{Inverse Video}.
915 * Mode Line Data:: The data structure that controls the mode line.
916 * Mode Line Variables:: Variables used in that data structure.
917 * %-Constructs:: Putting information into a mode line.
921 @subsection The Data Structure of the Mode Line
922 @cindex mode line construct
924 The mode line contents are controlled by a data structure of lists,
925 strings, symbols, and numbers kept in the buffer-local variable
926 @code{mode-line-format}. The data structure is called a @dfn{mode line
927 construct}, and it is built in recursive fashion out of simpler mode line
928 constructs. The same data structure is used for constructing
929 frame titles (@pxref{Frame Titles}).
931 @defvar mode-line-format
932 The value of this variable is a mode line construct with overall
933 responsibility for the mode line format. The value of this variable
934 controls which other variables are used to form the mode line text, and
938 A mode line construct may be as simple as a fixed string of text, but
939 it usually specifies how to use other variables to construct the text.
940 Many of these variables are themselves defined to have mode line
941 constructs as their values.
943 The default value of @code{mode-line-format} incorporates the values
944 of variables such as @code{mode-name} and @code{minor-mode-alist}.
945 Because of this, very few modes need to alter @code{mode-line-format}.
946 For most purposes, it is sufficient to alter the variables referenced by
947 @code{mode-line-format}.
949 A mode line construct may be a list, a symbol, or a string. If the
950 value is a list, each element may be a list, a symbol, or a string.
953 @cindex percent symbol in mode line
955 A string as a mode line construct is displayed verbatim in the mode line
956 except for @dfn{@code{%}-constructs}. Decimal digits after the @samp{%}
957 specify the field width for space filling on the right (i.e., the data
958 is left justified). @xref{%-Constructs}.
961 A symbol as a mode line construct stands for its value. The value of
962 @var{symbol} is used as a mode line construct, in place of @var{symbol}.
963 However, the symbols @code{t} and @code{nil} are ignored; so is any
964 symbol whose value is void.
966 There is one exception: if the value of @var{symbol} is a string, it is
967 displayed verbatim: the @code{%}-constructs are not recognized.
969 @item (@var{string} @var{rest}@dots{}) @r{or} (@var{list} @var{rest}@dots{})
970 A list whose first element is a string or list means to process all the
971 elements recursively and concatenate the results. This is the most
972 common form of mode line construct.
974 @item (@var{symbol} @var{then} @var{else})
975 A list whose first element is a symbol is a conditional. Its meaning
976 depends on the value of @var{symbol}. If the value is non-@code{nil},
977 the second element, @var{then}, is processed recursively as a mode line
978 element. But if the value of @var{symbol} is @code{nil}, the third
979 element, @var{else}, is processed recursively. You may omit @var{else};
980 then the mode line element displays nothing if the value of @var{symbol}
983 @item (@var{width} @var{rest}@dots{})
984 A list whose first element is an integer specifies truncation or
985 padding of the results of @var{rest}. The remaining elements
986 @var{rest} are processed recursively as mode line constructs and
987 concatenated together. Then the result is space filled (if
988 @var{width} is positive) or truncated (to @minus{}@var{width} columns,
989 if @var{width} is negative) on the right.
991 For example, the usual way to show what percentage of a buffer is above
992 the top of the window is to use a list like this: @code{(-3 "%p")}.
995 If you do alter @code{mode-line-format} itself, the new value should
996 use the same variables that appear in the default value (@pxref{Mode
997 Line Variables}), rather than duplicating their contents or displaying
998 the information in another fashion. This way, customizations made by
999 the user or by Lisp programs (such as @code{display-time} and major
1000 modes) via changes to those variables remain effective.
1002 @cindex Shell mode @code{mode-line-format}
1003 Here is an example of a @code{mode-line-format} that might be
1004 useful for @code{shell-mode}, since it contains the hostname and default
1009 (setq mode-line-format
1014 (getenv "HOST") ; @r{One element is not constant.}
1026 '(line-number-mode "L%l--")
1032 @node Mode Line Variables
1033 @subsection Variables Used in the Mode Line
1035 This section describes variables incorporated by the
1036 standard value of @code{mode-line-format} into the text of the mode
1037 line. There is nothing inherently special about these variables; any
1038 other variables could have the same effects on the mode line if
1039 @code{mode-line-format} were changed to use them.
1041 @defvar mode-line-modified
1042 This variable holds the value of the mode-line construct that displays
1043 whether the current buffer is modified.
1045 The default value of @code{mode-line-modified} is @code{("--%1*%1+-")}.
1046 This means that the mode line displays @samp{--**-} if the buffer is
1047 modified, @samp{-----} if the buffer is not modified, @samp{--%%-} if
1048 the buffer is read only, and @samp{--%*--} if the buffer is read only
1051 Changing this variable does not force an update of the mode line.
1054 @defvar mode-line-buffer-identification
1055 This variable identifies the buffer being displayed in the window. Its
1056 default value is @code{("%F: %17b")}, which means that it usually
1057 displays @samp{Emacs:} followed by seventeen characters of the buffer
1058 name. (In a terminal frame, it displays the frame name instead of
1059 @samp{Emacs}; this has the effect of showing the frame number.) You may
1060 want to change this in modes such as Rmail that do not behave like a
1064 @defvar global-mode-string
1065 This variable holds a mode line spec that appears in the mode line by
1066 default, just after the buffer name. The command @code{display-time}
1067 sets @code{global-mode-string} to refer to the variable
1068 @code{display-time-string}, which holds a string containing the time and
1071 The @samp{%M} construct substitutes the value of
1072 @code{global-mode-string}, but this is obsolete, since the variable is
1073 included directly in the mode line.
1077 This buffer-local variable holds the ``pretty'' name of the current
1078 buffer's major mode. Each major mode should set this variable so that the
1079 mode name will appear in the mode line.
1082 @defvar minor-mode-alist
1083 This variable holds an association list whose elements specify how the
1084 mode line should indicate that a minor mode is active. Each element of
1085 the @code{minor-mode-alist} should be a two-element list:
1088 (@var{minor-mode-variable} @var{mode-line-string})
1091 More generally, @var{mode-line-string} can be any mode line spec. It
1092 appears in the mode line when the value of @var{minor-mode-variable} is
1093 non-@code{nil}, and not otherwise. These strings should begin with
1094 spaces so that they don't run together. Conventionally, the
1095 @var{minor-mode-variable} for a specific mode is set to a non-@code{nil}
1096 value when that minor mode is activated.
1098 The default value of @code{minor-mode-alist} is:
1103 @result{} ((vc-mode vc-mode)
1104 (abbrev-mode " Abbrev")
1105 (overwrite-mode overwrite-mode)
1106 (auto-fill-function " Fill")
1107 (defining-kbd-macro " Def")
1108 (isearch-mode isearch-mode))
1112 @code{minor-mode-alist} is not buffer-local. The variables mentioned
1113 in the alist should be buffer-local if the minor mode can be enabled
1114 separately in each buffer.
1117 @defvar mode-line-process
1118 This buffer-local variable contains the mode line information on process
1119 status in modes used for communicating with subprocesses. It is
1120 displayed immediately following the major mode name, with no intervening
1121 space. For example, its value in the @samp{*shell*} buffer is
1122 @code{(":@: %s")}, which allows the shell to display its status along
1123 with the major mode as: @samp{(Shell:@: run)}. Normally this variable
1127 @defvar default-mode-line-format
1128 This variable holds the default @code{mode-line-format} for buffers
1129 that do not override it. This is the same as @code{(default-value
1130 'mode-line-format)}.
1132 The default value of @code{default-mode-line-format} is:
1138 mode-line-buffer-identification
1149 (line-number-mode "L%l--")
1157 The variable @code{vc-mode}, local in each buffer, records whether the
1158 buffer's visited file is maintained with version control, and, if so,
1159 which kind. Its value is @code{nil} for no version control, or a string
1160 that appears in the mode line.
1164 @subsection @code{%}-Constructs in the Mode Line
1166 The following table lists the recognized @code{%}-constructs and what
1167 they mean. In any construct except @samp{%%}, you can add a decimal
1168 integer after the @samp{%} to specify how many characters to display.
1172 The current buffer name, obtained with the @code{buffer-name} function.
1173 @xref{Buffer Names}.
1176 The visited file name, obtained with the @code{buffer-file-name}
1177 function. @xref{Buffer File Name}.
1180 The name of the selected frame.
1183 The current column number of point.
1186 The current line number of point.
1189 @samp{%} if the buffer is read only (see @code{buffer-read-only}); @*
1190 @samp{*} if the buffer is modified (see @code{buffer-modified-p}); @*
1191 @samp{-} otherwise. @xref{Buffer Modification}.
1194 @samp{*} if the buffer is modified (see @code{buffer-modified-p}); @*
1195 @samp{%} if the buffer is read only (see @code{buffer-read-only}); @*
1196 @samp{-} otherwise. This differs from @samp{%*} only for a modified
1197 read-only buffer. @xref{Buffer Modification}.
1200 @samp{*} if the buffer is modified, and @samp{-} otherwise.
1203 The status of the subprocess belonging to the current buffer, obtained with
1204 @code{process-status}. @xref{Process Information}.
1207 Whether the visited file is a text file or a binary file. (This is a
1208 meaningful distinction only on certain operating systems.)
1211 The percentage of the buffer text above the @strong{top} of window, or
1212 @samp{Top}, @samp{Bottom} or @samp{All}.
1215 The percentage of the buffer text that is above the @strong{bottom} of
1216 the window (which includes the text visible in the window, as well as
1217 the text above the top), plus @samp{Top} if the top of the buffer is
1218 visible on screen; or @samp{Bottom} or @samp{All}.
1221 @samp{Narrow} when narrowing is in effect; nothing otherwise (see
1222 @code{narrow-to-region} in @ref{Narrowing}).
1225 An indication of the depth of recursive editing levels (not counting
1226 minibuffer levels): one @samp{[} for each editing level.
1227 @xref{Recursive Editing}.
1230 One @samp{]} for each recursive editing level (not counting minibuffer
1234 The character @samp{%}---this is how to include a literal @samp{%} in a
1235 string in which @code{%}-constructs are allowed.
1238 Dashes sufficient to fill the remainder of the mode line.
1241 The following two @code{%}-constructs are still supported, but they are
1242 obsolete, since you can get the same results with the variables
1243 @code{mode-name} and @code{global-mode-string}.
1247 The value of @code{mode-name}.
1250 The value of @code{global-mode-string}. Currently, only
1251 @code{display-time} modifies the value of @code{global-mode-string}.
1258 A @dfn{hook} is a variable where you can store a function or functions
1259 to be called on a particular occasion by an existing program. Emacs
1260 provides hooks for the sake of customization. Most often, hooks are set
1261 up in the @file{.emacs} file, but Lisp programs can set them also.
1262 @xref{Standard Hooks}, for a list of standard hook variables.
1264 Most of the hooks in Emacs are @dfn{normal hooks}. These variables
1265 contain lists of functions to be called with no arguments. The reason
1266 most hooks are normal hooks is so that you can use them in a uniform
1267 way. You can always tell when a hook is a normal hook, because its
1268 name ends in @samp{-hook}.
1270 The recommended way to add a hook function to a normal hook is by
1271 calling @code{add-hook} (see below). The hook functions may be any of
1272 the valid kinds of functions that @code{funcall} accepts (@pxref{What Is
1273 a Function}). Most normal hook variables are initially void;
1274 @code{add-hook} knows how to deal with this.
1276 As for abnormal hooks, those whose names end in @samp{-function} have
1277 a value that is a single function. Those whose names end in
1278 @samp{-hooks} have a value that is a list of functions. Any hook that
1279 is abnormal is abnormal because a normal hook won't do the job; either
1280 the functions are called with arguments, or their values are meaningful.
1281 The name shows you that the hook is abnormal and that you should look at
1282 its documentation string to see how to use it properly.
1284 Major mode functions are supposed to run a hook called the @dfn{mode
1285 hook} as the last step of initialization. This makes it easy for a user
1286 to customize the behavior of the mode, by overriding the local variable
1287 assignments already made by the mode. But hooks are used in other
1288 contexts too. For example, the hook @code{suspend-hook} runs just
1289 before Emacs suspends itself (@pxref{Suspending Emacs}).
1291 Here's an expression that uses a mode hook to turn on Auto Fill mode
1292 when in Lisp Interaction mode:
1295 (add-hook 'lisp-interaction-mode-hook 'turn-on-auto-fill)
1298 The next example shows how to use a hook to customize the way Emacs
1299 formats C code. (People often have strong personal preferences for one
1300 format or another.) Here the hook function is an anonymous lambda
1303 @cindex lambda expression in hook
1306 (add-hook 'c-mode-hook
1307 (function (lambda ()
1308 (setq c-indent-level 4
1313 c-continued-statement-indent 0
1315 comment-column 40))))
1317 (setq c++-mode-hook c-mode-hook)
1321 At the appropriate time, Emacs uses the @code{run-hooks} function to
1322 run particular hooks. This function calls the hook functions that have
1323 been added with @code{add-hook}.
1325 @defun run-hooks &rest hookvar
1326 This function takes one or more hook variable names as arguments, and
1327 runs each hook in turn. Each @var{hookvar} argument should be a symbol
1328 that is a hook variable. These arguments are processed in the order
1331 If a hook variable has a non-@code{nil} value, that value may be a
1332 function or a list of functions. If the value is a function (either a
1333 lambda expression or a symbol with a function definition), it is
1334 called. If it is a list, the elements are called, in order.
1335 The hook functions are called with no arguments.
1337 For example, here's how @code{emacs-lisp-mode} runs its mode hook:
1340 (run-hooks 'emacs-lisp-mode-hook)
1344 @defun add-hook hook function &optional append local
1345 This function is the handy way to add function @var{function} to hook
1346 variable @var{hook}. The argument @var{function} may be any valid Lisp
1347 function with the proper number of arguments. For example,
1350 (add-hook 'text-mode-hook 'my-text-hook-function)
1354 adds @code{my-text-hook-function} to the hook called @code{text-mode-hook}.
1356 You can use @code{add-hook} for abnormal hooks as well as for normal
1359 It is best to design your hook functions so that the order in which they
1360 are executed does not matter. Any dependence on the order is ``asking
1361 for trouble.'' However, the order is predictable: normally,
1362 @var{function} goes at the front of the hook list, so it will be
1363 executed first (barring another @code{add-hook} call).
1365 If the optional argument @var{append} is non-@code{nil}, the new hook
1366 function goes at the end of the hook list and will be executed last.
1368 If @var{local} is non-@code{nil}, that says to make the new hook
1369 function local to the current buffer. Before you can do this, you must
1370 make the hook itself buffer-local by calling @code{make-local-hook}
1371 (@strong{not} @code{make-local-variable}). If the hook itself is not
1372 buffer-local, then the value of @var{local} makes no difference---the
1373 hook function is always global.
1376 @defun remove-hook hook function &optional local
1377 This function removes @var{function} from the hook variable @var{hook}.
1379 If @var{local} is non-@code{nil}, that says to remove @var{function}
1380 from the local hook list instead of from the global hook list. If the
1381 hook itself is not buffer-local, then the value of @var{local} makes no
1385 @defun make-local-hook hook
1386 This function makes the hook variable @code{hook} local to the current
1387 buffer. When a hook variable is local, it can have local and global
1388 hook functions, and @code{run-hooks} runs all of them.
1390 This function works by making @code{t} an element of the buffer-local
1391 value. That serves as a flag to use the hook functions in the default
1392 value of the hook variable as well as those in the local value. Since
1393 @code{run-hooks} understands this flag, @code{make-local-hook} works
1394 with all normal hooks. It works for only some non-normal hooks---those
1395 whose callers have been updated to understand this meaning of @code{t}.
1397 Do not use @code{make-local-variable} directly for hook variables; it is