Mercurial > emacs
annotate doc/lispref/modes.texi @ 107521:54f3a4d055ee
Document font-use-system-font.
* cmdargs.texi (Font X): Move most content to Fonts.
* frames.texi (Fonts): New node. Document font-use-system-font.
* emacs.texi (Top):
* xresources.texi (Table of Resources):
* mule.texi (Defining Fontsets, Charsets): Update xrefs.
| author | Chong Yidong <cyd@stupidchicken.com> |
|---|---|
| date | Sat, 20 Mar 2010 13:24:06 -0400 |
| parents | 1d1d5d9bd884 |
| children | d3b4a3311253 |
| rev | line source |
|---|---|
| 84089 | 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, 2001, | |
| 106815 | 4 @c 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc. |
| 84089 | 5 @c See the file elisp.texi for copying conditions. |
|
84116
0ba80d073e27
(setfilename): Go up one more level to ../../info.
Glenn Morris <rgm@gnu.org>
parents:
84089
diff
changeset
|
6 @setfilename ../../info/modes |
| 84089 | 7 @node Modes, Documentation, Keymaps, Top |
| 8 @chapter Major and Minor Modes | |
| 9 @cindex mode | |
| 10 | |
| 11 A @dfn{mode} is a set of definitions that customize Emacs and can be | |
| 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. | |
| 16 | |
| 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}. | |
| 21 | |
| 22 @menu | |
| 23 * Hooks:: How to use hooks; how to write code that provides hooks. | |
| 24 * Major Modes:: Defining major modes. | |
| 25 * Minor Modes:: Defining minor modes. | |
| 26 * Mode Line Format:: Customizing the text that appears in the mode line. | |
| 27 * Imenu:: How a mode can provide a menu | |
| 28 of definitions in the buffer. | |
| 29 * Font Lock Mode:: How modes can highlight text according to syntax. | |
| 30 * Desktop Save Mode:: How modes can have buffer state saved between | |
| 31 Emacs sessions. | |
| 32 @end menu | |
| 33 | |
| 34 @node Hooks | |
| 35 @section Hooks | |
| 36 @cindex hooks | |
| 37 | |
| 38 A @dfn{hook} is a variable where you can store a function or functions | |
| 39 to be called on a particular occasion by an existing program. Emacs | |
| 40 provides hooks for the sake of customization. Most often, hooks are set | |
| 41 up in the init file (@pxref{Init File}), but Lisp programs can set them also. | |
| 42 @xref{Standard Hooks}, for a list of standard hook variables. | |
| 43 | |
| 44 @cindex normal hook | |
| 45 Most of the hooks in Emacs are @dfn{normal hooks}. These variables | |
| 46 contain lists of functions to be called with no arguments. By | |
| 47 convention, whenever the hook name ends in @samp{-hook}, that tells | |
| 48 you it is normal. We try to make all hooks normal, as much as | |
| 49 possible, so that you can use them in a uniform way. | |
| 50 | |
| 51 Every major mode function is supposed to run a normal hook called | |
| 52 the @dfn{mode hook} as the one of the last steps of initialization. | |
| 53 This makes it easy for a user to customize the behavior of the mode, | |
| 54 by overriding the buffer-local variable assignments already made by | |
| 55 the mode. Most minor mode functions also run a mode hook at the end. | |
| 56 But hooks are used in other contexts too. For example, the hook | |
| 57 @code{suspend-hook} runs just before Emacs suspends itself | |
| 58 (@pxref{Suspending Emacs}). | |
| 59 | |
| 60 The recommended way to add a hook function to a normal hook is by | |
| 61 calling @code{add-hook} (see below). The hook functions may be any of | |
| 62 the valid kinds of functions that @code{funcall} accepts (@pxref{What | |
| 63 Is a Function}). Most normal hook variables are initially void; | |
| 64 @code{add-hook} knows how to deal with this. You can add hooks either | |
| 65 globally or buffer-locally with @code{add-hook}. | |
| 66 | |
| 67 @cindex abnormal hook | |
| 68 If the hook variable's name does not end with @samp{-hook}, that | |
| 69 indicates it is probably an @dfn{abnormal hook}. That means the hook | |
| 70 functions are called with arguments, or their return values are used | |
| 71 in some way. The hook's documentation says how the functions are | |
| 72 called. You can use @code{add-hook} to add a function to an abnormal | |
| 73 hook, but you must write the function to follow the hook's calling | |
| 74 convention. | |
| 75 | |
| 76 By convention, abnormal hook names end in @samp{-functions} or | |
| 77 @samp{-hooks}. If the variable's name ends in @samp{-function}, then | |
| 78 its value is just a single function, not a list of functions. | |
| 79 | |
|
87981
8eba27dae69a
(Running Hooks, Setting Hooks): New nodes.
Richard M. Stallman <rms@gnu.org>
parents:
87649
diff
changeset
|
80 @menu |
|
8eba27dae69a
(Running Hooks, Setting Hooks): New nodes.
Richard M. Stallman <rms@gnu.org>
parents:
87649
diff
changeset
|
81 * Running Hooks:: How to run a hook. |
|
8eba27dae69a
(Running Hooks, Setting Hooks): New nodes.
Richard M. Stallman <rms@gnu.org>
parents:
87649
diff
changeset
|
82 * Setting Hooks:: How to put functions on a hook, or remove them. |
|
8eba27dae69a
(Running Hooks, Setting Hooks): New nodes.
Richard M. Stallman <rms@gnu.org>
parents:
87649
diff
changeset
|
83 @end menu |
|
8eba27dae69a
(Running Hooks, Setting Hooks): New nodes.
Richard M. Stallman <rms@gnu.org>
parents:
87649
diff
changeset
|
84 |
|
8eba27dae69a
(Running Hooks, Setting Hooks): New nodes.
Richard M. Stallman <rms@gnu.org>
parents:
87649
diff
changeset
|
85 @node Running Hooks |
|
8eba27dae69a
(Running Hooks, Setting Hooks): New nodes.
Richard M. Stallman <rms@gnu.org>
parents:
87649
diff
changeset
|
86 @subsection Running Hooks |
|
8eba27dae69a
(Running Hooks, Setting Hooks): New nodes.
Richard M. Stallman <rms@gnu.org>
parents:
87649
diff
changeset
|
87 |
|
8eba27dae69a
(Running Hooks, Setting Hooks): New nodes.
Richard M. Stallman <rms@gnu.org>
parents:
87649
diff
changeset
|
88 At the appropriate times, Emacs uses the @code{run-hooks} function |
|
8eba27dae69a
(Running Hooks, Setting Hooks): New nodes.
Richard M. Stallman <rms@gnu.org>
parents:
87649
diff
changeset
|
89 and the other functions below to run particular hooks. |
| 84089 | 90 |
| 91 @defun run-hooks &rest hookvars | |
| 92 This function takes one or more normal hook variable names as | |
| 93 arguments, and runs each hook in turn. Each argument should be a | |
| 94 symbol that is a normal hook variable. These arguments are processed | |
| 95 in the order specified. | |
| 96 | |
| 97 If a hook variable has a non-@code{nil} value, that value should be a | |
| 98 list of functions. @code{run-hooks} calls all the functions, one by | |
| 99 one, with no arguments. | |
| 100 | |
| 101 The hook variable's value can also be a single function---either a | |
| 102 lambda expression or a symbol with a function definition---which | |
| 103 @code{run-hooks} calls. But this usage is obsolete. | |
| 104 @end defun | |
| 105 | |
| 106 @defun run-hook-with-args hook &rest args | |
| 107 This function is the way to run an abnormal hook and always call all | |
| 108 of the hook functions. It calls each of the hook functions one by | |
| 109 one, passing each of them the arguments @var{args}. | |
| 110 @end defun | |
| 111 | |
| 112 @defun run-hook-with-args-until-failure hook &rest args | |
| 113 This function is the way to run an abnormal hook until one of the hook | |
| 114 functions fails. It calls each of the hook functions, passing each of | |
| 115 them the arguments @var{args}, until some hook function returns | |
| 116 @code{nil}. It then stops and returns @code{nil}. If none of the | |
| 117 hook functions return @code{nil}, it returns a non-@code{nil} value. | |
| 118 @end defun | |
| 119 | |
| 120 @defun run-hook-with-args-until-success hook &rest args | |
| 121 This function is the way to run an abnormal hook until a hook function | |
| 122 succeeds. It calls each of the hook functions, passing each of them | |
| 123 the arguments @var{args}, until some hook function returns | |
| 124 non-@code{nil}. Then it stops, and returns whatever was returned by | |
| 125 the last hook function that was called. If all hook functions return | |
| 126 @code{nil}, it returns @code{nil} as well. | |
| 127 @end defun | |
| 128 | |
|
87981
8eba27dae69a
(Running Hooks, Setting Hooks): New nodes.
Richard M. Stallman <rms@gnu.org>
parents:
87649
diff
changeset
|
129 @node Setting Hooks |
|
8eba27dae69a
(Running Hooks, Setting Hooks): New nodes.
Richard M. Stallman <rms@gnu.org>
parents:
87649
diff
changeset
|
130 @subsection Setting Hooks |
|
8eba27dae69a
(Running Hooks, Setting Hooks): New nodes.
Richard M. Stallman <rms@gnu.org>
parents:
87649
diff
changeset
|
131 |
|
8eba27dae69a
(Running Hooks, Setting Hooks): New nodes.
Richard M. Stallman <rms@gnu.org>
parents:
87649
diff
changeset
|
132 Here's an example that uses a mode hook to turn on Auto Fill mode when |
|
8eba27dae69a
(Running Hooks, Setting Hooks): New nodes.
Richard M. Stallman <rms@gnu.org>
parents:
87649
diff
changeset
|
133 in Lisp Interaction mode: |
|
8eba27dae69a
(Running Hooks, Setting Hooks): New nodes.
Richard M. Stallman <rms@gnu.org>
parents:
87649
diff
changeset
|
134 |
|
8eba27dae69a
(Running Hooks, Setting Hooks): New nodes.
Richard M. Stallman <rms@gnu.org>
parents:
87649
diff
changeset
|
135 @example |
|
8eba27dae69a
(Running Hooks, Setting Hooks): New nodes.
Richard M. Stallman <rms@gnu.org>
parents:
87649
diff
changeset
|
136 (add-hook 'lisp-interaction-mode-hook 'turn-on-auto-fill) |
|
8eba27dae69a
(Running Hooks, Setting Hooks): New nodes.
Richard M. Stallman <rms@gnu.org>
parents:
87649
diff
changeset
|
137 @end example |
|
8eba27dae69a
(Running Hooks, Setting Hooks): New nodes.
Richard M. Stallman <rms@gnu.org>
parents:
87649
diff
changeset
|
138 |
| 84089 | 139 @defun add-hook hook function &optional append local |
| 140 This function is the handy way to add function @var{function} to hook | |
| 141 variable @var{hook}. You can use it for abnormal hooks as well as for | |
| 142 normal hooks. @var{function} can be any Lisp function that can accept | |
| 143 the proper number of arguments for @var{hook}. For example, | |
| 144 | |
| 145 @example | |
| 146 (add-hook 'text-mode-hook 'my-text-hook-function) | |
| 147 @end example | |
| 148 | |
| 149 @noindent | |
| 150 adds @code{my-text-hook-function} to the hook called @code{text-mode-hook}. | |
| 151 | |
| 152 If @var{function} is already present in @var{hook} (comparing using | |
| 153 @code{equal}), then @code{add-hook} does not add it a second time. | |
| 154 | |
|
87981
8eba27dae69a
(Running Hooks, Setting Hooks): New nodes.
Richard M. Stallman <rms@gnu.org>
parents:
87649
diff
changeset
|
155 If @var{function} has a non-@code{nil} property |
|
8eba27dae69a
(Running Hooks, Setting Hooks): New nodes.
Richard M. Stallman <rms@gnu.org>
parents:
87649
diff
changeset
|
156 @code{permanent-local-hook}, then @code{kill-all-local-variables} (or |
|
8eba27dae69a
(Running Hooks, Setting Hooks): New nodes.
Richard M. Stallman <rms@gnu.org>
parents:
87649
diff
changeset
|
157 changing major modes) won't delete it from the hook variable's local |
|
8eba27dae69a
(Running Hooks, Setting Hooks): New nodes.
Richard M. Stallman <rms@gnu.org>
parents:
87649
diff
changeset
|
158 value. |
|
8eba27dae69a
(Running Hooks, Setting Hooks): New nodes.
Richard M. Stallman <rms@gnu.org>
parents:
87649
diff
changeset
|
159 |
|
102763
e81a0c5f14b1
(Major Mode Conventions): Note that specialness is inherited.
Chong Yidong <cyd@stupidchicken.com>
parents:
102151
diff
changeset
|
160 It is best to design your hook functions so that the order in which |
|
e81a0c5f14b1
(Major Mode Conventions): Note that specialness is inherited.
Chong Yidong <cyd@stupidchicken.com>
parents:
102151
diff
changeset
|
161 they are executed does not matter. Any dependence on the order is |
|
e81a0c5f14b1
(Major Mode Conventions): Note that specialness is inherited.
Chong Yidong <cyd@stupidchicken.com>
parents:
102151
diff
changeset
|
162 asking for trouble. However, the order is predictable: normally, |
| 84089 | 163 @var{function} goes at the front of the hook list, so it will be |
|
102763
e81a0c5f14b1
(Major Mode Conventions): Note that specialness is inherited.
Chong Yidong <cyd@stupidchicken.com>
parents:
102151
diff
changeset
|
164 executed first (barring another @code{add-hook} call). If the |
|
e81a0c5f14b1
(Major Mode Conventions): Note that specialness is inherited.
Chong Yidong <cyd@stupidchicken.com>
parents:
102151
diff
changeset
|
165 optional argument @var{append} is non-@code{nil}, the new hook |
|
e81a0c5f14b1
(Major Mode Conventions): Note that specialness is inherited.
Chong Yidong <cyd@stupidchicken.com>
parents:
102151
diff
changeset
|
166 function goes at the end of the hook list and will be executed last. |
| 84089 | 167 |
| 168 @code{add-hook} can handle the cases where @var{hook} is void or its | |
| 169 value is a single function; it sets or changes the value to a list of | |
| 170 functions. | |
| 171 | |
| 172 If @var{local} is non-@code{nil}, that says to add @var{function} to | |
| 173 the buffer-local hook list instead of to the global hook list. If | |
| 174 needed, this makes the hook buffer-local and adds @code{t} to the | |
| 175 buffer-local value. The latter acts as a flag to run the hook | |
| 176 functions in the default value as well as in the local value. | |
| 177 @end defun | |
| 178 | |
| 179 @defun remove-hook hook function &optional local | |
| 180 This function removes @var{function} from the hook variable | |
| 181 @var{hook}. It compares @var{function} with elements of @var{hook} | |
| 182 using @code{equal}, so it works for both symbols and lambda | |
| 183 expressions. | |
| 184 | |
| 185 If @var{local} is non-@code{nil}, that says to remove @var{function} | |
| 186 from the buffer-local hook list instead of from the global hook list. | |
| 187 @end defun | |
| 188 | |
| 189 @node Major Modes | |
| 190 @section Major Modes | |
| 191 @cindex major mode | |
| 192 | |
| 193 Major modes specialize Emacs for editing particular kinds of text. | |
| 194 Each buffer has only one major mode at a time. For each major mode | |
| 195 there is a function to switch to that mode in the current buffer; its | |
| 196 name should end in @samp{-mode}. These functions work by setting | |
| 197 buffer-local variable bindings and other data associated with the | |
| 198 buffer, such as a local keymap. The effect lasts until you switch | |
| 199 to another major mode in the same buffer. | |
| 200 | |
| 201 @menu | |
| 202 * Major Mode Basics:: | |
| 203 * Major Mode Conventions:: Coding conventions for keymaps, etc. | |
| 204 * Auto Major Mode:: How Emacs chooses the major mode automatically. | |
| 205 * Mode Help:: Finding out how to use a mode. | |
| 206 * Derived Modes:: Defining a new major mode based on another major | |
| 207 mode. | |
| 208 * Generic Modes:: Defining a simple major mode that supports | |
| 209 comment syntax and Font Lock mode. | |
| 210 * Mode Hooks:: Hooks run at the end of major mode functions. | |
| 211 * Example Major Modes:: Text mode and Lisp modes. | |
| 212 @end menu | |
| 213 | |
| 214 @node Major Mode Basics | |
| 215 @subsection Major Mode Basics | |
| 216 @cindex Fundamental mode | |
| 217 | |
| 218 The least specialized major mode is called @dfn{Fundamental mode}. | |
| 219 This mode has no mode-specific definitions or variable settings, so each | |
| 220 Emacs command behaves in its default manner, and each option is in its | |
| 221 default state. All other major modes redefine various keys and options. | |
| 222 For example, Lisp Interaction mode provides special key bindings for | |
| 223 @kbd{C-j} (@code{eval-print-last-sexp}), @key{TAB} | |
| 224 (@code{lisp-indent-line}), and other keys. | |
| 225 | |
| 226 When you need to write several editing commands to help you perform a | |
| 227 specialized editing task, creating a new major mode is usually a good | |
| 228 idea. In practice, writing a major mode is easy (in contrast to | |
| 229 writing a minor mode, which is often difficult). | |
| 230 | |
| 231 If the new mode is similar to an old one, it is often unwise to | |
| 232 modify the old one to serve two purposes, since it may become harder | |
| 233 to use and maintain. Instead, copy and rename an existing major mode | |
|
102763
e81a0c5f14b1
(Major Mode Conventions): Note that specialness is inherited.
Chong Yidong <cyd@stupidchicken.com>
parents:
102151
diff
changeset
|
234 definition and alter the copy---or use the @code{define-derived-mode} |
|
e81a0c5f14b1
(Major Mode Conventions): Note that specialness is inherited.
Chong Yidong <cyd@stupidchicken.com>
parents:
102151
diff
changeset
|
235 macro to define a @dfn{derived mode} (@pxref{Derived Modes}). For |
|
e81a0c5f14b1
(Major Mode Conventions): Note that specialness is inherited.
Chong Yidong <cyd@stupidchicken.com>
parents:
102151
diff
changeset
|
236 example, Rmail Edit mode is a major mode that is very similar to Text |
|
e81a0c5f14b1
(Major Mode Conventions): Note that specialness is inherited.
Chong Yidong <cyd@stupidchicken.com>
parents:
102151
diff
changeset
|
237 mode except that it provides two additional commands. Its definition |
|
e81a0c5f14b1
(Major Mode Conventions): Note that specialness is inherited.
Chong Yidong <cyd@stupidchicken.com>
parents:
102151
diff
changeset
|
238 is distinct from that of Text mode, but uses that of Text mode. |
| 84089 | 239 |
| 240 Even if the new mode is not an obvious derivative of any other mode, | |
| 241 it is convenient to use @code{define-derived-mode} with a @code{nil} | |
| 242 parent argument, since it automatically enforces the most important | |
| 243 coding conventions for you. | |
| 244 | |
| 245 For a very simple programming language major mode that handles | |
| 246 comments and fontification, you can use @code{define-generic-mode}. | |
| 247 @xref{Generic Modes}. | |
| 248 | |
| 249 Rmail Edit mode offers an example of changing the major mode | |
| 250 temporarily for a buffer, so it can be edited in a different way (with | |
| 251 ordinary Emacs commands rather than Rmail commands). In such cases, the | |
| 252 temporary major mode usually provides a command to switch back to the | |
| 253 buffer's usual mode (Rmail mode, in this case). You might be tempted to | |
| 254 present the temporary redefinitions inside a recursive edit and restore | |
| 255 the usual ones when the user exits; but this is a bad idea because it | |
| 256 constrains the user's options when it is done in more than one buffer: | |
| 257 recursive edits must be exited most-recently-entered first. Using an | |
| 258 alternative major mode avoids this limitation. @xref{Recursive | |
| 259 Editing}. | |
| 260 | |
| 261 The standard GNU Emacs Lisp library directory tree contains the code | |
| 262 for several major modes, in files such as @file{text-mode.el}, | |
| 263 @file{texinfo.el}, @file{lisp-mode.el}, @file{c-mode.el}, and | |
| 264 @file{rmail.el}. They are found in various subdirectories of the | |
| 265 @file{lisp} directory. You can study these libraries to see how modes | |
| 266 are written. Text mode is perhaps the simplest major mode aside from | |
| 267 Fundamental mode. Rmail mode is a complicated and specialized mode. | |
| 268 | |
| 269 @node Major Mode Conventions | |
| 270 @subsection Major Mode Conventions | |
| 271 @cindex major mode conventions | |
| 272 @cindex conventions for writing major modes | |
| 273 | |
| 274 The code for existing major modes follows various coding conventions, | |
| 275 including conventions for local keymap and syntax table initialization, | |
| 276 global names, and hooks. Please follow these conventions when you | |
| 277 define a new major mode. (Fundamental mode is an exception to many | |
| 278 of these conventions, because its definition is to present the global | |
| 279 state of Emacs.) | |
| 280 | |
| 281 This list of conventions is only partial, because each major mode | |
| 282 should aim for consistency in general with other Emacs major modes. | |
| 283 This makes Emacs as a whole more coherent. It is impossible to list | |
| 284 here all the possible points where this issue might come up; if the | |
| 285 Emacs developers point out an area where your major mode deviates from | |
| 286 the usual conventions, please make it compatible. | |
| 287 | |
| 288 @itemize @bullet | |
| 289 @item | |
| 290 Define a command whose name ends in @samp{-mode}, with no arguments, | |
| 291 that switches to the new mode in the current buffer. This command | |
| 292 should set up the keymap, syntax table, and buffer-local variables in an | |
| 293 existing buffer, without changing the buffer's contents. | |
| 294 | |
| 295 @item | |
| 296 Write a documentation string for this command that describes the | |
| 297 special commands available in this mode. @kbd{C-h m} | |
| 298 (@code{describe-mode}) in your mode will display this string. | |
| 299 | |
| 300 The documentation string may include the special documentation | |
| 301 substrings, @samp{\[@var{command}]}, @samp{\@{@var{keymap}@}}, and | |
| 302 @samp{\<@var{keymap}>}, which enable the documentation to adapt | |
| 303 automatically to the user's own key bindings. @xref{Keys in | |
| 304 Documentation}. | |
| 305 | |
| 306 @item | |
| 307 The major mode command should start by calling | |
| 308 @code{kill-all-local-variables}. This runs the normal hook | |
| 309 @code{change-major-mode-hook}, then gets rid of the buffer-local | |
| 310 variables of the major mode previously in effect. @xref{Creating | |
| 311 Buffer-Local}. | |
| 312 | |
| 313 @item | |
| 314 The major mode command should set the variable @code{major-mode} to the | |
| 315 major mode command symbol. This is how @code{describe-mode} discovers | |
| 316 which documentation to print. | |
| 317 | |
| 318 @item | |
| 319 The major mode command should set the variable @code{mode-name} to the | |
|
98729
a0397c75f952
(Major Mode Conventions, Mode Line Variables): `mode-name' need not be a
Eli Zaretskii <eliz@gnu.org>
parents:
87981
diff
changeset
|
320 ``pretty'' name of the mode, usually a string (but see @ref{Mode Line |
|
a0397c75f952
(Major Mode Conventions, Mode Line Variables): `mode-name' need not be a
Eli Zaretskii <eliz@gnu.org>
parents:
87981
diff
changeset
|
321 Data}, for other possible forms). The name of the mode appears |
|
a0397c75f952
(Major Mode Conventions, Mode Line Variables): `mode-name' need not be a
Eli Zaretskii <eliz@gnu.org>
parents:
87981
diff
changeset
|
322 in the mode line. |
| 84089 | 323 |
| 324 @item | |
| 325 @cindex functions in modes | |
| 326 Since all global names are in the same name space, all the global | |
| 327 variables, constants, and functions that are part of the mode should | |
| 328 have names that start with the major mode name (or with an abbreviation | |
| 329 of it if the name is long). @xref{Coding Conventions}. | |
| 330 | |
| 331 @item | |
| 332 In a major mode for editing some kind of structured text, such as a | |
| 333 programming language, indentation of text according to structure is | |
| 334 probably useful. So the mode should set @code{indent-line-function} | |
| 335 to a suitable function, and probably customize other variables | |
| 336 for indentation. | |
| 337 | |
| 338 @item | |
| 339 @cindex keymaps in modes | |
| 340 The major mode should usually have its own keymap, which is used as the | |
| 341 local keymap in all buffers in that mode. The major mode command should | |
| 342 call @code{use-local-map} to install this local map. @xref{Active | |
| 343 Keymaps}, for more information. | |
| 344 | |
| 345 This keymap should be stored permanently in a global variable named | |
| 346 @code{@var{modename}-mode-map}. Normally the library that defines the | |
| 347 mode sets this variable. | |
| 348 | |
| 349 @xref{Tips for Defining}, for advice about how to write the code to set | |
| 350 up the mode's keymap variable. | |
| 351 | |
| 352 @item | |
| 353 The key sequences bound in a major mode keymap should usually start with | |
| 354 @kbd{C-c}, followed by a control character, a digit, or @kbd{@{}, | |
| 355 @kbd{@}}, @kbd{<}, @kbd{>}, @kbd{:} or @kbd{;}. The other punctuation | |
| 356 characters are reserved for minor modes, and ordinary letters are | |
| 357 reserved for users. | |
| 358 | |
| 359 A major mode can also rebind the keys @kbd{M-n}, @kbd{M-p} and | |
| 360 @kbd{M-s}. The bindings for @kbd{M-n} and @kbd{M-p} should normally | |
| 361 be some kind of ``moving forward and backward,'' but this does not | |
| 362 necessarily mean cursor motion. | |
| 363 | |
| 364 It is legitimate for a major mode to rebind a standard key sequence if | |
| 365 it provides a command that does ``the same job'' in a way better | |
| 366 suited to the text this mode is used for. For example, a major mode | |
| 367 for editing a programming language might redefine @kbd{C-M-a} to | |
| 368 ``move to the beginning of a function'' in a way that works better for | |
| 369 that language. | |
| 370 | |
| 371 It is also legitimate for a major mode to rebind a standard key | |
| 372 sequence whose standard meaning is rarely useful in that mode. For | |
| 373 instance, minibuffer modes rebind @kbd{M-r}, whose standard meaning is | |
| 374 rarely of any use in the minibuffer. Major modes such as Dired or | |
| 375 Rmail that do not allow self-insertion of text can reasonably redefine | |
| 376 letters and other printing characters as special commands. | |
| 377 | |
| 378 @item | |
|
102151
328f4b370b74
Remove duplicate words.
Juanma Barranquero <lekktu@gmail.com>
parents:
101567
diff
changeset
|
379 Major modes for editing text should not define @key{RET} to do |
| 84089 | 380 anything other than insert a newline. However, it is ok for |
| 381 specialized modes for text that users don't directly edit, such as | |
| 382 Dired and Info modes, to redefine @key{RET} to do something entirely | |
| 383 different. | |
| 384 | |
| 385 @item | |
| 386 Major modes should not alter options that are primarily a matter of user | |
| 387 preference, such as whether Auto-Fill mode is enabled. Leave this to | |
| 388 each user to decide. However, a major mode should customize other | |
| 389 variables so that Auto-Fill mode will work usefully @emph{if} the user | |
| 390 decides to use it. | |
| 391 | |
| 392 @item | |
| 393 @cindex syntax tables in modes | |
| 394 The mode may have its own syntax table or may share one with other | |
| 395 related modes. If it has its own syntax table, it should store this in | |
| 396 a variable named @code{@var{modename}-mode-syntax-table}. @xref{Syntax | |
| 397 Tables}. | |
| 398 | |
| 399 @item | |
| 400 If the mode handles a language that has a syntax for comments, it should | |
| 401 set the variables that define the comment syntax. @xref{Options for | |
| 402 Comments,, Options Controlling Comments, emacs, The GNU Emacs Manual}. | |
| 403 | |
| 404 @item | |
| 405 @cindex abbrev tables in modes | |
| 406 The mode may have its own abbrev table or may share one with other | |
| 407 related modes. If it has its own abbrev table, it should store this | |
| 408 in a variable named @code{@var{modename}-mode-abbrev-table}. If the | |
| 409 major mode command defines any abbrevs itself, it should pass @code{t} | |
| 410 for the @var{system-flag} argument to @code{define-abbrev}. | |
| 411 @xref{Defining Abbrevs}. | |
| 412 | |
| 413 @item | |
| 414 The mode should specify how to do highlighting for Font Lock mode, by | |
| 415 setting up a buffer-local value for the variable | |
| 416 @code{font-lock-defaults} (@pxref{Font Lock Mode}). | |
| 417 | |
| 418 @item | |
| 419 The mode should specify how Imenu should find the definitions or | |
| 420 sections of a buffer, by setting up a buffer-local value for the | |
| 421 variable @code{imenu-generic-expression}, for the two variables | |
| 422 @code{imenu-prev-index-position-function} and | |
| 423 @code{imenu-extract-index-name-function}, or for the variable | |
| 424 @code{imenu-create-index-function} (@pxref{Imenu}). | |
| 425 | |
| 426 @item | |
| 427 The mode can specify a local value for | |
| 428 @code{eldoc-documentation-function} to tell ElDoc mode how to handle | |
| 429 this mode. | |
| 430 | |
| 431 @item | |
| 432 Use @code{defvar} or @code{defcustom} to set mode-related variables, so | |
| 433 that they are not reinitialized if they already have a value. (Such | |
| 434 reinitialization could discard customizations made by the user.) | |
| 435 | |
| 436 @item | |
| 437 @cindex buffer-local variables in modes | |
| 438 To make a buffer-local binding for an Emacs customization variable, use | |
| 439 @code{make-local-variable} in the major mode command, not | |
| 440 @code{make-variable-buffer-local}. The latter function would make the | |
| 441 variable local to every buffer in which it is subsequently set, which | |
| 442 would affect buffers that do not use this mode. It is undesirable for a | |
| 443 mode to have such global effects. @xref{Buffer-Local Variables}. | |
| 444 | |
| 445 With rare exceptions, the only reasonable way to use | |
| 446 @code{make-variable-buffer-local} in a Lisp package is for a variable | |
| 447 which is used only within that package. Using it on a variable used by | |
| 448 other packages would interfere with them. | |
| 449 | |
| 450 @item | |
| 451 @cindex mode hook | |
| 452 @cindex major mode hook | |
| 453 Each major mode should have a normal @dfn{mode hook} named | |
| 454 @code{@var{modename}-mode-hook}. The very last thing the major mode command | |
| 455 should do is to call @code{run-mode-hooks}. This runs the mode hook, | |
| 456 and then runs the normal hook @code{after-change-major-mode-hook}. | |
| 457 @xref{Mode Hooks}. | |
| 458 | |
| 459 @item | |
| 460 The major mode command may start by calling some other major mode | |
| 461 command (called the @dfn{parent mode}) and then alter some of its | |
| 462 settings. A mode that does this is called a @dfn{derived mode}. The | |
|
102763
e81a0c5f14b1
(Major Mode Conventions): Note that specialness is inherited.
Chong Yidong <cyd@stupidchicken.com>
parents:
102151
diff
changeset
|
463 recommended way to define one is to use the @code{define-derived-mode} |
|
e81a0c5f14b1
(Major Mode Conventions): Note that specialness is inherited.
Chong Yidong <cyd@stupidchicken.com>
parents:
102151
diff
changeset
|
464 macro, but this is not required. Such a mode should call the parent |
|
e81a0c5f14b1
(Major Mode Conventions): Note that specialness is inherited.
Chong Yidong <cyd@stupidchicken.com>
parents:
102151
diff
changeset
|
465 mode command inside a @code{delay-mode-hooks} form. (Using |
| 84089 | 466 @code{define-derived-mode} does this automatically.) @xref{Derived |
| 467 Modes}, and @ref{Mode Hooks}. | |
| 468 | |
| 469 @item | |
| 470 If something special should be done if the user switches a buffer from | |
| 471 this mode to any other major mode, this mode can set up a buffer-local | |
| 472 value for @code{change-major-mode-hook} (@pxref{Creating Buffer-Local}). | |
| 473 | |
| 474 @item | |
| 475 If this mode is appropriate only for specially-prepared text, then the | |
| 476 major mode command symbol should have a property named @code{mode-class} | |
| 477 with value @code{special}, put on as follows: | |
| 478 | |
| 479 @kindex mode-class @r{(property)} | |
| 480 @cindex @code{special} | |
| 481 @example | |
| 482 (put 'funny-mode 'mode-class 'special) | |
| 483 @end example | |
| 484 | |
| 485 @noindent | |
| 486 This tells Emacs that new buffers created while the current buffer is | |
|
104626
caa79498564a
* subr.el (default-mode-line-format, default-header-line-format)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
103821
diff
changeset
|
487 in Funny mode should not inherit Funny mode, in case the default value |
|
caa79498564a
* subr.el (default-mode-line-format, default-header-line-format)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
103821
diff
changeset
|
488 of @code{major-mode} is @code{nil}. Modes such as Dired, Rmail, |
| 84089 | 489 and Buffer List use this feature. |
| 490 | |
|
102763
e81a0c5f14b1
(Major Mode Conventions): Note that specialness is inherited.
Chong Yidong <cyd@stupidchicken.com>
parents:
102151
diff
changeset
|
491 The @code{define-derived-mode} macro automatically marks the derived |
|
e81a0c5f14b1
(Major Mode Conventions): Note that specialness is inherited.
Chong Yidong <cyd@stupidchicken.com>
parents:
102151
diff
changeset
|
492 mode as special if the parent mode is special. The special mode |
|
e81a0c5f14b1
(Major Mode Conventions): Note that specialness is inherited.
Chong Yidong <cyd@stupidchicken.com>
parents:
102151
diff
changeset
|
493 @code{special-mode} provides a convenient parent for other special |
|
e81a0c5f14b1
(Major Mode Conventions): Note that specialness is inherited.
Chong Yidong <cyd@stupidchicken.com>
parents:
102151
diff
changeset
|
494 modes to inherit from; it sets @code{buffer-read-only} to @code{t}, |
|
e81a0c5f14b1
(Major Mode Conventions): Note that specialness is inherited.
Chong Yidong <cyd@stupidchicken.com>
parents:
102151
diff
changeset
|
495 and does nothing else. |
|
e81a0c5f14b1
(Major Mode Conventions): Note that specialness is inherited.
Chong Yidong <cyd@stupidchicken.com>
parents:
102151
diff
changeset
|
496 |
| 84089 | 497 @item |
| 498 If you want to make the new mode the default for files with certain | |
| 499 recognizable names, add an element to @code{auto-mode-alist} to select | |
| 500 the mode for those file names (@pxref{Auto Major Mode}). If you | |
| 501 define the mode command to autoload, you should add this element in | |
| 502 the same file that calls @code{autoload}. If you use an autoload | |
| 503 cookie for the mode command, you can also use an autoload cookie for | |
| 504 the form that adds the element (@pxref{autoload cookie}). If you do | |
| 505 not autoload the mode command, it is sufficient to add the element in | |
| 506 the file that contains the mode definition. | |
| 507 | |
| 508 @item | |
| 509 In the comments that document the file, you should provide a sample | |
| 510 @code{autoload} form and an example of how to add to | |
| 511 @code{auto-mode-alist}, that users can include in their init files | |
| 512 (@pxref{Init File}). | |
| 513 | |
| 514 @item | |
| 515 @cindex mode loading | |
| 516 The top-level forms in the file defining the mode should be written so | |
| 517 that they may be evaluated more than once without adverse consequences. | |
| 518 Even if you never load the file more than once, someone else will. | |
| 519 @end itemize | |
| 520 | |
| 521 @node Auto Major Mode | |
| 522 @subsection How Emacs Chooses a Major Mode | |
| 523 @cindex major mode, automatic selection | |
| 524 | |
| 525 Based on information in the file name or in the file itself, Emacs | |
| 526 automatically selects a major mode for the new buffer when a file is | |
| 527 visited. It also processes local variables specified in the file text. | |
| 528 | |
| 529 @deffn Command fundamental-mode | |
| 530 Fundamental mode is a major mode that is not specialized for anything | |
| 531 in particular. Other major modes are defined in effect by comparison | |
| 532 with this one---their definitions say what to change, starting from | |
| 533 Fundamental mode. The @code{fundamental-mode} function does @emph{not} | |
| 534 run any mode hooks; you're not supposed to customize it. (If you want Emacs | |
| 535 to behave differently in Fundamental mode, change the @emph{global} | |
| 536 state of Emacs.) | |
| 537 @end deffn | |
| 538 | |
| 539 @deffn Command normal-mode &optional find-file | |
| 540 This function establishes the proper major mode and buffer-local variable | |
| 541 bindings for the current buffer. First it calls @code{set-auto-mode} | |
| 542 (see below), then it runs @code{hack-local-variables} to parse, and | |
| 543 bind or evaluate as appropriate, the file's local variables | |
| 544 (@pxref{File Local Variables}). | |
| 545 | |
| 546 If the @var{find-file} argument to @code{normal-mode} is non-@code{nil}, | |
| 547 @code{normal-mode} assumes that the @code{find-file} function is calling | |
| 548 it. In this case, it may process local variables in the @samp{-*-} | |
| 549 line or at the end of the file. The variable | |
| 550 @code{enable-local-variables} controls whether to do so. @xref{File | |
| 551 Variables, , Local Variables in Files, emacs, The GNU Emacs Manual}, | |
| 552 for the syntax of the local variables section of a file. | |
| 553 | |
| 554 If you run @code{normal-mode} interactively, the argument | |
| 555 @var{find-file} is normally @code{nil}. In this case, | |
| 556 @code{normal-mode} unconditionally processes any file local variables. | |
| 557 | |
| 558 If @code{normal-mode} processes the local variables list and this list | |
| 559 specifies a major mode, that mode overrides any mode chosen by | |
| 560 @code{set-auto-mode}. If neither @code{set-auto-mode} nor | |
| 561 @code{hack-local-variables} specify a major mode, the buffer stays in | |
|
104626
caa79498564a
* subr.el (default-mode-line-format, default-header-line-format)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
103821
diff
changeset
|
562 the major mode determined by the default value of @code{major-mode} |
|
caa79498564a
* subr.el (default-mode-line-format, default-header-line-format)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
103821
diff
changeset
|
563 (see below). |
| 84089 | 564 |
| 565 @cindex file mode specification error | |
| 566 @code{normal-mode} uses @code{condition-case} around the call to the | |
| 567 major mode function, so errors are caught and reported as a @samp{File | |
| 568 mode specification error}, followed by the original error message. | |
| 569 @end deffn | |
| 570 | |
| 571 @defun set-auto-mode &optional keep-mode-if-same | |
| 572 @cindex visited file mode | |
| 573 This function selects the major mode that is appropriate for the | |
| 574 current buffer. It bases its decision (in order of precedence) on | |
| 575 the @w{@samp{-*-}} line, on the @w{@samp{#!}} line (using | |
| 576 @code{interpreter-mode-alist}), on the text at the beginning of the | |
| 577 buffer (using @code{magic-mode-alist}), and finally on the visited | |
| 578 file name (using @code{auto-mode-alist}). @xref{Choosing Modes, , How | |
| 579 Major Modes are Chosen, emacs, The GNU Emacs Manual}. However, this | |
| 580 function does not look for the @samp{mode:} local variable near the | |
| 581 end of a file; the @code{hack-local-variables} function does that. | |
| 582 If @code{enable-local-variables} is @code{nil}, @code{set-auto-mode} | |
| 583 does not check the @w{@samp{-*-}} line for a mode tag either. | |
| 584 | |
| 585 If @var{keep-mode-if-same} is non-@code{nil}, this function does not | |
| 586 call the mode command if the buffer is already in the proper major | |
| 587 mode. For instance, @code{set-visited-file-name} sets this to | |
| 588 @code{t} to avoid killing buffer local variables that the user may | |
| 589 have set. | |
| 590 @end defun | |
| 591 | |
|
104626
caa79498564a
* subr.el (default-mode-line-format, default-header-line-format)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
103821
diff
changeset
|
592 @defopt major-mode |
|
caa79498564a
* subr.el (default-mode-line-format, default-header-line-format)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
103821
diff
changeset
|
593 The buffer-local value of this variable holds the major mode |
|
caa79498564a
* subr.el (default-mode-line-format, default-header-line-format)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
103821
diff
changeset
|
594 currently active. The default value of this variable holds the |
|
caa79498564a
* subr.el (default-mode-line-format, default-header-line-format)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
103821
diff
changeset
|
595 default major mode for new buffers. The standard default value is |
|
caa79498564a
* subr.el (default-mode-line-format, default-header-line-format)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
103821
diff
changeset
|
596 @code{fundamental-mode}. |
|
caa79498564a
* subr.el (default-mode-line-format, default-header-line-format)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
103821
diff
changeset
|
597 |
|
caa79498564a
* subr.el (default-mode-line-format, default-header-line-format)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
103821
diff
changeset
|
598 If the default value of @code{major-mode} is @code{nil}, Emacs uses |
| 84089 | 599 the (previously) current buffer's major mode as the default major mode |
| 600 of a new buffer. However, if that major mode symbol has a @code{mode-class} | |
| 601 property with value @code{special}, then it is not used for new buffers; | |
| 602 Fundamental mode is used instead. The modes that have this property are | |
| 603 those such as Dired and Rmail that are useful only with text that has | |
| 604 been specially prepared. | |
| 605 @end defopt | |
| 606 | |
| 607 @defun set-buffer-major-mode buffer | |
|
104626
caa79498564a
* subr.el (default-mode-line-format, default-header-line-format)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
103821
diff
changeset
|
608 This function sets the major mode of @var{buffer} to the default value of |
|
caa79498564a
* subr.el (default-mode-line-format, default-header-line-format)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
103821
diff
changeset
|
609 @code{major-mode}; if that is @code{nil}, it uses the |
| 84089 | 610 current buffer's major mode (if that is suitable). As an exception, |
| 611 if @var{buffer}'s name is @samp{*scratch*}, it sets the mode to | |
| 612 @code{initial-major-mode}. | |
| 613 | |
| 614 The low-level primitives for creating buffers do not use this function, | |
| 615 but medium-level commands such as @code{switch-to-buffer} and | |
| 616 @code{find-file-noselect} use it whenever they create buffers. | |
| 617 @end defun | |
| 618 | |
| 619 @defopt initial-major-mode | |
| 620 @cindex @samp{*scratch*} | |
| 621 The value of this variable determines the major mode of the initial | |
| 622 @samp{*scratch*} buffer. The value should be a symbol that is a major | |
| 623 mode command. The default value is @code{lisp-interaction-mode}. | |
| 624 @end defopt | |
| 625 | |
| 626 @defvar interpreter-mode-alist | |
| 627 This variable specifies major modes to use for scripts that specify a | |
| 628 command interpreter in a @samp{#!} line. Its value is an alist with | |
| 629 elements of the form @code{(@var{interpreter} . @var{mode})}; for | |
| 630 example, @code{("perl" . perl-mode)} is one element present by | |
| 631 default. The element says to use mode @var{mode} if the file | |
| 632 specifies an interpreter which matches @var{interpreter}. | |
| 633 @end defvar | |
| 634 | |
| 635 @defvar magic-mode-alist | |
| 636 This variable's value is an alist with elements of the form | |
| 637 @code{(@var{regexp} . @var{function})}, where @var{regexp} is a | |
| 638 regular expression and @var{function} is a function or @code{nil}. | |
| 639 After visiting a file, @code{set-auto-mode} calls @var{function} if | |
| 640 the text at the beginning of the buffer matches @var{regexp} and | |
| 641 @var{function} is non-@code{nil}; if @var{function} is @code{nil}, | |
| 642 @code{auto-mode-alist} gets to decide the mode. | |
| 643 @end defvar | |
| 644 | |
| 645 @defvar magic-fallback-mode-alist | |
| 646 This works like @code{magic-mode-alist}, except that it is handled | |
| 647 only if @code{auto-mode-alist} does not specify a mode for this file. | |
| 648 @end defvar | |
| 649 | |
| 650 @defvar auto-mode-alist | |
| 651 This variable contains an association list of file name patterns | |
| 652 (regular expressions) and corresponding major mode commands. Usually, | |
| 653 the file name patterns test for suffixes, such as @samp{.el} and | |
| 654 @samp{.c}, but this need not be the case. An ordinary element of the | |
| 655 alist looks like @code{(@var{regexp} . @var{mode-function})}. | |
| 656 | |
| 657 For example, | |
| 658 | |
| 659 @smallexample | |
| 660 @group | |
| 661 (("\\`/tmp/fol/" . text-mode) | |
| 662 ("\\.texinfo\\'" . texinfo-mode) | |
| 663 ("\\.texi\\'" . texinfo-mode) | |
| 664 @end group | |
| 665 @group | |
| 666 ("\\.el\\'" . emacs-lisp-mode) | |
| 667 ("\\.c\\'" . c-mode) | |
| 668 ("\\.h\\'" . c-mode) | |
| 669 @dots{}) | |
| 670 @end group | |
| 671 @end smallexample | |
| 672 | |
| 673 When you visit a file whose expanded file name (@pxref{File Name | |
| 674 Expansion}), with version numbers and backup suffixes removed using | |
| 675 @code{file-name-sans-versions} (@pxref{File Name Components}), matches | |
| 676 a @var{regexp}, @code{set-auto-mode} calls the corresponding | |
| 677 @var{mode-function}. This feature enables Emacs to select the proper | |
| 678 major mode for most files. | |
| 679 | |
| 680 If an element of @code{auto-mode-alist} has the form @code{(@var{regexp} | |
| 681 @var{function} t)}, then after calling @var{function}, Emacs searches | |
| 682 @code{auto-mode-alist} again for a match against the portion of the file | |
| 683 name that did not match before. This feature is useful for | |
| 684 uncompression packages: an entry of the form @code{("\\.gz\\'" | |
| 685 @var{function} t)} can uncompress the file and then put the uncompressed | |
| 686 file in the proper mode according to the name sans @samp{.gz}. | |
| 687 | |
| 688 Here is an example of how to prepend several pattern pairs to | |
| 689 @code{auto-mode-alist}. (You might use this sort of expression in your | |
| 690 init file.) | |
| 691 | |
| 692 @smallexample | |
| 693 @group | |
| 694 (setq auto-mode-alist | |
| 695 (append | |
| 696 ;; @r{File name (within directory) starts with a dot.} | |
| 697 '(("/\\.[^/]*\\'" . fundamental-mode) | |
| 698 ;; @r{File name has no dot.} | |
|
99965
df75ffc11cac
(Auto Major Mode): Fix example.
Chong Yidong <cyd@stupidchicken.com>
parents:
99694
diff
changeset
|
699 ("/[^\\./]*\\'" . fundamental-mode) |
| 84089 | 700 ;; @r{File name ends in @samp{.C}.} |
| 701 ("\\.C\\'" . c++-mode)) | |
| 702 auto-mode-alist)) | |
| 703 @end group | |
| 704 @end smallexample | |
| 705 @end defvar | |
| 706 | |
| 707 @node Mode Help | |
| 708 @subsection Getting Help about a Major Mode | |
| 709 @cindex mode help | |
| 710 @cindex help for major mode | |
| 711 @cindex documentation for major mode | |
| 712 | |
| 713 The @code{describe-mode} function is used to provide information | |
| 714 about major modes. It is normally called with @kbd{C-h m}. The | |
| 715 @code{describe-mode} function uses the value of @code{major-mode}, | |
| 716 which is why every major mode function needs to set the | |
| 717 @code{major-mode} variable. | |
| 718 | |
| 719 @deffn Command describe-mode | |
| 720 This function displays the documentation of the current major mode. | |
| 721 | |
| 722 The @code{describe-mode} function calls the @code{documentation} | |
| 723 function using the value of @code{major-mode} as an argument. Thus, it | |
| 724 displays the documentation string of the major mode function. | |
| 725 (@xref{Accessing Documentation}.) | |
| 726 @end deffn | |
| 727 | |
| 728 @defvar major-mode | |
| 729 This buffer-local variable holds the symbol for the current buffer's | |
| 730 major mode. This symbol should have a function definition that is the | |
| 731 command to switch to that major mode. The @code{describe-mode} | |
| 732 function uses the documentation string of the function as the | |
| 733 documentation of the major mode. | |
| 734 @end defvar | |
| 735 | |
| 736 @node Derived Modes | |
| 737 @subsection Defining Derived Modes | |
| 738 @cindex derived mode | |
| 739 | |
| 740 It's often useful to define a new major mode in terms of an existing | |
| 741 one. An easy way to do this is to use @code{define-derived-mode}. | |
| 742 | |
| 743 @defmac define-derived-mode variant parent name docstring keyword-args@dots{} body@dots{} | |
|
102766
0862f6b10c6b
(Derived Modes): Note that define-derive-mode sets the mode-class
Chong Yidong <cyd@stupidchicken.com>
parents:
102763
diff
changeset
|
744 This macro defines @var{variant} as a major mode command, using |
| 84089 | 745 @var{name} as the string form of the mode name. @var{variant} and |
| 746 @var{parent} should be unquoted symbols. | |
| 747 | |
| 748 The new command @var{variant} is defined to call the function | |
| 749 @var{parent}, then override certain aspects of that parent mode: | |
| 750 | |
| 751 @itemize @bullet | |
| 752 @item | |
| 753 The new mode has its own sparse keymap, named | |
| 754 @code{@var{variant}-map}. @code{define-derived-mode} | |
| 755 makes the parent mode's keymap the parent of the new map, unless | |
| 756 @code{@var{variant}-map} is already set and already has a parent. | |
| 757 | |
| 758 @item | |
| 759 The new mode has its own syntax table, kept in the variable | |
| 760 @code{@var{variant}-syntax-table}, unless you override this using the | |
| 761 @code{:syntax-table} keyword (see below). @code{define-derived-mode} | |
| 762 makes the parent mode's syntax-table the parent of | |
| 763 @code{@var{variant}-syntax-table}, unless the latter is already set | |
| 764 and already has a parent different from the standard syntax table. | |
| 765 | |
| 766 @item | |
| 767 The new mode has its own abbrev table, kept in the variable | |
| 768 @code{@var{variant}-abbrev-table}, unless you override this using the | |
| 769 @code{:abbrev-table} keyword (see below). | |
| 770 | |
| 771 @item | |
| 772 The new mode has its own mode hook, @code{@var{variant}-hook}. It | |
| 773 runs this hook, after running the hooks of its ancestor modes, with | |
| 774 @code{run-mode-hooks}, as the last thing it does. @xref{Mode Hooks}. | |
| 775 @end itemize | |
| 776 | |
| 777 In addition, you can specify how to override other aspects of | |
| 778 @var{parent} with @var{body}. The command @var{variant} | |
| 779 evaluates the forms in @var{body} after setting up all its usual | |
| 780 overrides, just before running the mode hooks. | |
| 781 | |
|
102766
0862f6b10c6b
(Derived Modes): Note that define-derive-mode sets the mode-class
Chong Yidong <cyd@stupidchicken.com>
parents:
102763
diff
changeset
|
782 If @var{parent} has a non-@code{nil} @code{mode-class} symbol |
|
0862f6b10c6b
(Derived Modes): Note that define-derive-mode sets the mode-class
Chong Yidong <cyd@stupidchicken.com>
parents:
102763
diff
changeset
|
783 property, then @code{define-derived-mode} sets the @code{mode-class} |
|
0862f6b10c6b
(Derived Modes): Note that define-derive-mode sets the mode-class
Chong Yidong <cyd@stupidchicken.com>
parents:
102763
diff
changeset
|
784 property of @var{variant} to the same value. This ensures, for |
|
0862f6b10c6b
(Derived Modes): Note that define-derive-mode sets the mode-class
Chong Yidong <cyd@stupidchicken.com>
parents:
102763
diff
changeset
|
785 example, that if @var{parent} is a special mode, then @var{variant} is |
|
0862f6b10c6b
(Derived Modes): Note that define-derive-mode sets the mode-class
Chong Yidong <cyd@stupidchicken.com>
parents:
102763
diff
changeset
|
786 also a special mode (@pxref{Major Mode Conventions}). |
|
0862f6b10c6b
(Derived Modes): Note that define-derive-mode sets the mode-class
Chong Yidong <cyd@stupidchicken.com>
parents:
102763
diff
changeset
|
787 |
| 84089 | 788 You can also specify @code{nil} for @var{parent}. This gives the new |
| 789 mode no parent. Then @code{define-derived-mode} behaves as described | |
| 790 above, but, of course, omits all actions connected with @var{parent}. | |
| 791 | |
| 792 The argument @var{docstring} specifies the documentation string for | |
| 793 the new mode. @code{define-derived-mode} adds some general | |
| 794 information about the mode's hook, followed by the mode's keymap, at | |
| 795 the end of this docstring. If you omit @var{docstring}, | |
| 796 @code{define-derived-mode} generates a documentation string. | |
| 797 | |
| 798 The @var{keyword-args} are pairs of keywords and values. The values | |
| 799 are evaluated. The following keywords are currently supported: | |
| 800 | |
| 801 @table @code | |
| 802 @item :syntax-table | |
| 803 You can use this to explicitly specify a syntax table for the new | |
| 804 mode. If you specify a @code{nil} value, the new mode uses the same | |
| 805 syntax table as @var{parent}, or the standard syntax table if | |
| 806 @var{parent} is @code{nil}. (Note that this does @emph{not} follow | |
| 807 the convention used for non-keyword arguments that a @code{nil} value | |
| 808 is equivalent with not specifying the argument.) | |
| 809 | |
| 810 @item :abbrev-table | |
| 811 You can use this to explicitly specify an abbrev table for the new | |
| 812 mode. If you specify a @code{nil} value, the new mode uses the same | |
| 813 abbrev table as @var{parent}, or @code{fundamental-mode-abbrev-table} | |
| 814 if @var{parent} is @code{nil}. (Again, a @code{nil} value is | |
| 815 @emph{not} equivalent to not specifying this keyword.) | |
| 816 | |
| 817 @item :group | |
| 818 If this is specified, the value should be the customization group for | |
| 819 this mode. (Not all major modes have one.) Only the (still | |
| 820 experimental and unadvertised) command @code{customize-mode} currently | |
| 821 uses this. @code{define-derived-mode} does @emph{not} automatically | |
| 822 define the specified customization group. | |
| 823 @end table | |
| 824 | |
| 825 Here is a hypothetical example: | |
| 826 | |
| 827 @example | |
| 828 (define-derived-mode hypertext-mode | |
| 829 text-mode "Hypertext" | |
| 830 "Major mode for hypertext. | |
| 831 \\@{hypertext-mode-map@}" | |
| 832 (setq case-fold-search nil)) | |
| 833 | |
| 834 (define-key hypertext-mode-map | |
| 835 [down-mouse-3] 'do-hyper-link) | |
| 836 @end example | |
| 837 | |
| 838 Do not write an @code{interactive} spec in the definition; | |
| 839 @code{define-derived-mode} does that automatically. | |
| 840 @end defmac | |
| 841 | |
| 842 @node Generic Modes | |
| 843 @subsection Generic Modes | |
| 844 @cindex generic mode | |
| 845 | |
| 846 @dfn{Generic modes} are simple major modes with basic support for | |
| 847 comment syntax and Font Lock mode. To define a generic mode, use the | |
| 848 macro @code{define-generic-mode}. See the file @file{generic-x.el} | |
| 849 for some examples of the use of @code{define-generic-mode}. | |
| 850 | |
| 851 @defmac define-generic-mode mode comment-list keyword-list font-lock-list auto-mode-list function-list &optional docstring | |
| 852 This macro defines a generic mode command named @var{mode} (a symbol, | |
| 853 not quoted). The optional argument @var{docstring} is the | |
| 854 documentation for the mode command. If you do not supply it, | |
| 855 @code{define-generic-mode} generates one by default. | |
| 856 | |
| 857 The argument @var{comment-list} is a list in which each element is | |
| 858 either a character, a string of one or two characters, or a cons cell. | |
| 859 A character or a string is set up in the mode's syntax table as a | |
| 860 ``comment starter.'' If the entry is a cons cell, the @sc{car} is set | |
| 861 up as a ``comment starter'' and the @sc{cdr} as a ``comment ender.'' | |
| 862 (Use @code{nil} for the latter if you want comments to end at the end | |
| 863 of the line.) Note that the syntax table mechanism has limitations | |
| 864 about what comment starters and enders are actually possible. | |
| 865 @xref{Syntax Tables}. | |
| 866 | |
| 867 The argument @var{keyword-list} is a list of keywords to highlight | |
| 868 with @code{font-lock-keyword-face}. Each keyword should be a string. | |
| 869 Meanwhile, @var{font-lock-list} is a list of additional expressions to | |
| 870 highlight. Each element of this list should have the same form as an | |
| 871 element of @code{font-lock-keywords}. @xref{Search-based | |
| 872 Fontification}. | |
| 873 | |
| 874 The argument @var{auto-mode-list} is a list of regular expressions to | |
| 875 add to the variable @code{auto-mode-alist}. They are added by the execution | |
| 876 of the @code{define-generic-mode} form, not by expanding the macro call. | |
| 877 | |
| 878 Finally, @var{function-list} is a list of functions for the mode | |
| 879 command to call for additional setup. It calls these functions just | |
| 880 before it runs the mode hook variable @code{@var{mode}-hook}. | |
| 881 @end defmac | |
| 882 | |
| 883 @node Mode Hooks | |
| 884 @subsection Mode Hooks | |
| 885 | |
| 886 Every major mode function should finish by running its mode hook and | |
| 887 the mode-independent normal hook @code{after-change-major-mode-hook}. | |
| 888 It does this by calling @code{run-mode-hooks}. If the major mode is a | |
| 889 derived mode, that is if it calls another major mode (the parent mode) | |
| 890 in its body, it should do this inside @code{delay-mode-hooks} so that | |
| 891 the parent won't run these hooks itself. Instead, the derived mode's | |
| 892 call to @code{run-mode-hooks} runs the parent's mode hook too. | |
| 893 @xref{Major Mode Conventions}. | |
| 894 | |
| 895 Emacs versions before Emacs 22 did not have @code{delay-mode-hooks}. | |
| 896 When user-implemented major modes have not been updated to use it, | |
| 897 they won't entirely follow these conventions: they may run the | |
| 898 parent's mode hook too early, or fail to run | |
| 899 @code{after-change-major-mode-hook}. If you encounter such a major | |
| 900 mode, please correct it to follow these conventions. | |
| 901 | |
| 902 When you defined a major mode using @code{define-derived-mode}, it | |
| 903 automatically makes sure these conventions are followed. If you | |
| 904 define a major mode ``by hand,'' not using @code{define-derived-mode}, | |
| 905 use the following functions to handle these conventions automatically. | |
| 906 | |
| 907 @defun run-mode-hooks &rest hookvars | |
| 908 Major modes should run their mode hook using this function. It is | |
| 909 similar to @code{run-hooks} (@pxref{Hooks}), but it also runs | |
| 910 @code{after-change-major-mode-hook}. | |
| 911 | |
| 912 When this function is called during the execution of a | |
| 913 @code{delay-mode-hooks} form, it does not run the hooks immediately. | |
| 914 Instead, it arranges for the next call to @code{run-mode-hooks} to run | |
| 915 them. | |
| 916 @end defun | |
| 917 | |
| 918 @defmac delay-mode-hooks body@dots{} | |
| 919 When one major mode command calls another, it should do so inside of | |
| 920 @code{delay-mode-hooks}. | |
| 921 | |
| 922 This macro executes @var{body}, but tells all @code{run-mode-hooks} | |
| 923 calls during the execution of @var{body} to delay running their hooks. | |
| 924 The hooks will actually run during the next call to | |
| 925 @code{run-mode-hooks} after the end of the @code{delay-mode-hooks} | |
| 926 construct. | |
| 927 @end defmac | |
| 928 | |
| 929 @defvar after-change-major-mode-hook | |
| 930 This is a normal hook run by @code{run-mode-hooks}. It is run at the | |
| 931 very end of every properly-written major mode function. | |
| 932 @end defvar | |
| 933 | |
| 934 @node Example Major Modes | |
| 935 @subsection Major Mode Examples | |
| 936 | |
| 937 Text mode is perhaps the simplest mode besides Fundamental mode. | |
| 938 Here are excerpts from @file{text-mode.el} that illustrate many of | |
| 939 the conventions listed above: | |
| 940 | |
| 941 @smallexample | |
| 942 @group | |
| 943 ;; @r{Create the syntax table for this mode.} | |
| 944 (defvar text-mode-syntax-table | |
| 945 (let ((st (make-syntax-table))) | |
| 946 (modify-syntax-entry ?\" ". " st) | |
| 947 (modify-syntax-entry ?\\ ". " st) | |
| 948 ;; Add `p' so M-c on `hello' leads to `Hello', not `hello'. | |
| 949 (modify-syntax-entry ?' "w p" st) | |
| 950 st) | |
| 951 "Syntax table used while in `text-mode'.") | |
| 952 @end group | |
| 953 | |
| 954 ;; @r{Create the keymap for this mode.} | |
| 955 @group | |
| 956 (defvar text-mode-map | |
| 957 (let ((map (make-sparse-keymap))) | |
| 958 (define-key map "\e\t" 'ispell-complete-word) | |
| 959 (define-key map "\es" 'center-line) | |
| 960 (define-key map "\eS" 'center-paragraph) | |
| 961 map) | |
| 962 "Keymap for `text-mode'. | |
| 963 Many other modes, such as Mail mode, Outline mode | |
| 964 and Indented Text mode, inherit all the commands | |
| 965 defined in this map.") | |
| 966 @end group | |
| 967 @end smallexample | |
| 968 | |
| 969 Here is how the actual mode command is defined now: | |
| 970 | |
| 971 @smallexample | |
| 972 @group | |
| 973 (define-derived-mode text-mode nil "Text" | |
| 974 "Major mode for editing text written for humans to read. | |
| 975 In this mode, paragraphs are delimited only by blank or white lines. | |
| 976 You can thus get the full benefit of adaptive filling | |
| 977 (see the variable `adaptive-fill-mode'). | |
| 978 \\@{text-mode-map@} | |
| 979 Turning on Text mode runs the normal hook `text-mode-hook'." | |
| 980 @end group | |
| 981 @group | |
| 982 (make-local-variable 'text-mode-variant) | |
| 983 (setq text-mode-variant t) | |
| 984 ;; @r{These two lines are a feature added recently.} | |
| 985 (set (make-local-variable 'require-final-newline) | |
| 986 mode-require-final-newline) | |
| 987 (set (make-local-variable 'indent-line-function) 'indent-relative)) | |
| 988 @end group | |
| 989 @end smallexample | |
| 990 | |
| 991 @noindent | |
| 992 (The last line is redundant nowadays, since @code{indent-relative} is | |
| 993 the default value, and we'll delete it in a future version.) | |
| 994 | |
| 995 Here is how it was defined formerly, before | |
| 996 @code{define-derived-mode} existed: | |
| 997 | |
| 998 @smallexample | |
| 999 @group | |
| 1000 ;; @r{This isn't needed nowadays, since @code{define-derived-mode} does it.} | |
| 1001 (defvar text-mode-abbrev-table nil | |
| 1002 "Abbrev table used while in text mode.") | |
| 1003 (define-abbrev-table 'text-mode-abbrev-table ()) | |
| 1004 @end group | |
| 1005 | |
| 1006 @group | |
| 1007 (defun text-mode () | |
| 1008 "Major mode for editing text intended for humans to read... | |
| 1009 Special commands: \\@{text-mode-map@} | |
| 1010 @end group | |
| 1011 @group | |
| 1012 Turning on text-mode runs the hook `text-mode-hook'." | |
| 1013 (interactive) | |
| 1014 (kill-all-local-variables) | |
| 1015 (use-local-map text-mode-map) | |
| 1016 @end group | |
| 1017 @group | |
| 1018 (setq local-abbrev-table text-mode-abbrev-table) | |
| 1019 (set-syntax-table text-mode-syntax-table) | |
| 1020 @end group | |
| 1021 @group | |
| 1022 ;; @r{These four lines are absent from the current version} | |
| 1023 ;; @r{not because this is done some other way, but rather} | |
| 1024 ;; @r{because nowadays Text mode uses the normal definition of paragraphs.} | |
| 1025 (make-local-variable 'paragraph-start) | |
| 1026 (setq paragraph-start (concat "[ \t]*$\\|" page-delimiter)) | |
| 1027 (make-local-variable 'paragraph-separate) | |
| 1028 (setq paragraph-separate paragraph-start) | |
| 1029 (make-local-variable 'indent-line-function) | |
| 1030 (setq indent-line-function 'indent-relative-maybe) | |
| 1031 @end group | |
| 1032 @group | |
| 1033 (setq mode-name "Text") | |
| 1034 (setq major-mode 'text-mode) | |
| 1035 (run-mode-hooks 'text-mode-hook)) ; @r{Finally, this permits the user to} | |
| 1036 ; @r{customize the mode with a hook.} | |
| 1037 @end group | |
| 1038 @end smallexample | |
| 1039 | |
| 1040 @cindex @file{lisp-mode.el} | |
| 1041 The three Lisp modes (Lisp mode, Emacs Lisp mode, and Lisp | |
| 1042 Interaction mode) have more features than Text mode and the code is | |
| 1043 correspondingly more complicated. Here are excerpts from | |
| 1044 @file{lisp-mode.el} that illustrate how these modes are written. | |
| 1045 | |
| 1046 @cindex syntax table example | |
| 1047 @smallexample | |
| 1048 @group | |
| 1049 ;; @r{Create mode-specific table variables.} | |
| 1050 (defvar lisp-mode-syntax-table nil "") | |
| 1051 (defvar lisp-mode-abbrev-table nil "") | |
| 1052 @end group | |
| 1053 | |
| 1054 @group | |
| 1055 (defvar emacs-lisp-mode-syntax-table | |
| 1056 (let ((table (make-syntax-table))) | |
| 1057 (let ((i 0)) | |
| 1058 @end group | |
| 1059 | |
| 1060 @group | |
| 1061 ;; @r{Set syntax of chars up to @samp{0} to say they are} | |
| 1062 ;; @r{part of symbol names but not words.} | |
| 1063 ;; @r{(The digit @samp{0} is @code{48} in the @acronym{ASCII} character set.)} | |
| 1064 (while (< i ?0) | |
|
106718
afc2be124e6e
modes.texi (Example Major Modes): Fix indentation. (Bug#5195)
Eli Zaretskii <eliz@gnu.org>
parents:
104652
diff
changeset
|
1065 (modify-syntax-entry i "_ " table) |
|
afc2be124e6e
modes.texi (Example Major Modes): Fix indentation. (Bug#5195)
Eli Zaretskii <eliz@gnu.org>
parents:
104652
diff
changeset
|
1066 (setq i (1+ i))) |
| 84089 | 1067 ;; @r{@dots{} similar code follows for other character ranges.} |
| 1068 @end group | |
| 1069 @group | |
| 1070 ;; @r{Then set the syntax codes for characters that are special in Lisp.} | |
| 1071 (modify-syntax-entry ? " " table) | |
| 1072 (modify-syntax-entry ?\t " " table) | |
| 1073 (modify-syntax-entry ?\f " " table) | |
| 1074 (modify-syntax-entry ?\n "> " table) | |
| 1075 @end group | |
| 1076 @group | |
| 1077 ;; @r{Give CR the same syntax as newline, for selective-display.} | |
| 1078 (modify-syntax-entry ?\^m "> " table) | |
| 1079 (modify-syntax-entry ?\; "< " table) | |
| 1080 (modify-syntax-entry ?` "' " table) | |
| 1081 (modify-syntax-entry ?' "' " table) | |
| 1082 (modify-syntax-entry ?, "' " table) | |
| 1083 @end group | |
| 1084 @group | |
| 1085 ;; @r{@dots{}likewise for many other characters@dots{}} | |
| 1086 (modify-syntax-entry ?\( "() " table) | |
| 1087 (modify-syntax-entry ?\) ")( " table) | |
| 1088 (modify-syntax-entry ?\[ "(] " table) | |
| 1089 (modify-syntax-entry ?\] ")[ " table)) | |
| 1090 table)) | |
| 1091 @end group | |
| 1092 @group | |
| 1093 ;; @r{Create an abbrev table for lisp-mode.} | |
| 1094 (define-abbrev-table 'lisp-mode-abbrev-table ()) | |
| 1095 @end group | |
| 1096 @end smallexample | |
| 1097 | |
| 1098 The three modes for Lisp share much of their code. For instance, | |
| 1099 each calls the following function to set various variables: | |
| 1100 | |
| 1101 @smallexample | |
| 1102 @group | |
| 1103 (defun lisp-mode-variables (lisp-syntax) | |
| 1104 (when lisp-syntax | |
| 1105 (set-syntax-table lisp-mode-syntax-table)) | |
| 1106 (setq local-abbrev-table lisp-mode-abbrev-table) | |
| 1107 @dots{} | |
| 1108 @end group | |
| 1109 @end smallexample | |
| 1110 | |
| 1111 In Lisp and most programming languages, we want the paragraph | |
| 1112 commands to treat only blank lines as paragraph separators. And the | |
| 1113 modes should understand the Lisp conventions for comments. The rest of | |
| 1114 @code{lisp-mode-variables} sets this up: | |
| 1115 | |
| 1116 @smallexample | |
| 1117 @group | |
| 1118 (make-local-variable 'paragraph-start) | |
| 1119 (setq paragraph-start (concat page-delimiter "\\|$" )) | |
| 1120 (make-local-variable 'paragraph-separate) | |
| 1121 (setq paragraph-separate paragraph-start) | |
| 1122 @dots{} | |
| 1123 @end group | |
| 1124 @group | |
| 1125 (make-local-variable 'comment-indent-function) | |
| 1126 (setq comment-indent-function 'lisp-comment-indent)) | |
| 1127 @dots{} | |
| 1128 @end group | |
| 1129 @end smallexample | |
| 1130 | |
| 1131 Each of the different Lisp modes has a slightly different keymap. For | |
| 1132 example, Lisp mode binds @kbd{C-c C-z} to @code{run-lisp}, but the other | |
| 1133 Lisp modes do not. However, all Lisp modes have some commands in | |
| 1134 common. The following code sets up the common commands: | |
| 1135 | |
| 1136 @smallexample | |
| 1137 @group | |
| 1138 (defvar shared-lisp-mode-map () | |
| 1139 "Keymap for commands shared by all sorts of Lisp modes.") | |
| 1140 | |
| 1141 ;; @r{Putting this @code{if} after the @code{defvar} is an older style.} | |
| 1142 (if shared-lisp-mode-map | |
| 1143 () | |
| 1144 (setq shared-lisp-mode-map (make-sparse-keymap)) | |
| 1145 (define-key shared-lisp-mode-map "\e\C-q" 'indent-sexp) | |
| 1146 (define-key shared-lisp-mode-map "\177" | |
| 1147 'backward-delete-char-untabify)) | |
| 1148 @end group | |
| 1149 @end smallexample | |
| 1150 | |
| 1151 @noindent | |
| 1152 And here is the code to set up the keymap for Lisp mode: | |
| 1153 | |
| 1154 @smallexample | |
| 1155 @group | |
| 1156 (defvar lisp-mode-map () | |
| 1157 "Keymap for ordinary Lisp mode...") | |
| 1158 | |
| 1159 (if lisp-mode-map | |
| 1160 () | |
| 1161 (setq lisp-mode-map (make-sparse-keymap)) | |
| 1162 (set-keymap-parent lisp-mode-map shared-lisp-mode-map) | |
| 1163 (define-key lisp-mode-map "\e\C-x" 'lisp-eval-defun) | |
| 1164 (define-key lisp-mode-map "\C-c\C-z" 'run-lisp)) | |
| 1165 @end group | |
| 1166 @end smallexample | |
| 1167 | |
| 1168 Finally, here is the complete major mode function definition for | |
| 1169 Lisp mode. | |
| 1170 | |
| 1171 @smallexample | |
| 1172 @group | |
| 1173 (defun lisp-mode () | |
| 1174 "Major mode for editing Lisp code for Lisps other than GNU Emacs Lisp. | |
| 1175 Commands: | |
| 1176 Delete converts tabs to spaces as it moves back. | |
| 1177 Blank lines separate paragraphs. Semicolons start comments. | |
| 1178 \\@{lisp-mode-map@} | |
| 1179 Note that `run-lisp' may be used either to start an inferior Lisp job | |
| 1180 or to switch back to an existing one. | |
| 1181 @end group | |
| 1182 | |
| 1183 @group | |
| 1184 Entry to this mode calls the value of `lisp-mode-hook' | |
| 1185 if that value is non-nil." | |
| 1186 (interactive) | |
| 1187 (kill-all-local-variables) | |
| 1188 @end group | |
| 1189 @group | |
| 1190 (use-local-map lisp-mode-map) ; @r{Select the mode's keymap.} | |
| 1191 (setq major-mode 'lisp-mode) ; @r{This is how @code{describe-mode}} | |
| 1192 ; @r{finds out what to describe.} | |
| 1193 (setq mode-name "Lisp") ; @r{This goes into the mode line.} | |
| 1194 (lisp-mode-variables t) ; @r{This defines various variables.} | |
| 1195 (make-local-variable 'comment-start-skip) | |
| 1196 (setq comment-start-skip | |
| 1197 "\\(\\(^\\|[^\\\\\n]\\)\\(\\\\\\\\\\)*\\)\\(;+\\|#|\\) *") | |
| 1198 (make-local-variable 'font-lock-keywords-case-fold-search) | |
| 1199 (setq font-lock-keywords-case-fold-search t) | |
| 1200 @end group | |
| 1201 @group | |
| 1202 (setq imenu-case-fold-search t) | |
| 1203 (set-syntax-table lisp-mode-syntax-table) | |
| 1204 (run-mode-hooks 'lisp-mode-hook)) ; @r{This permits the user to use a} | |
| 1205 ; @r{hook to customize the mode.} | |
| 1206 @end group | |
| 1207 @end smallexample | |
| 1208 | |
| 1209 @node Minor Modes | |
| 1210 @section Minor Modes | |
| 1211 @cindex minor mode | |
| 1212 | |
| 1213 A @dfn{minor mode} provides features that users may enable or disable | |
| 1214 independently of the choice of major mode. Minor modes can be enabled | |
| 1215 individually or in combination. Minor modes would be better named | |
| 1216 ``generally available, optional feature modes,'' except that such a name | |
| 1217 would be unwieldy. | |
| 1218 | |
| 1219 A minor mode is not usually meant as a variation of a single major mode. | |
| 1220 Usually they are general and can apply to many major modes. For | |
| 1221 example, Auto Fill mode works with any major mode that permits text | |
| 1222 insertion. To be general, a minor mode must be effectively independent | |
| 1223 of the things major modes do. | |
| 1224 | |
| 1225 A minor mode is often much more difficult to implement than a major | |
| 1226 mode. One reason is that you should be able to activate and deactivate | |
| 1227 minor modes in any order. A minor mode should be able to have its | |
| 1228 desired effect regardless of the major mode and regardless of the other | |
| 1229 minor modes in effect. | |
| 1230 | |
| 1231 Often the biggest problem in implementing a minor mode is finding a | |
| 1232 way to insert the necessary hook into the rest of Emacs. Minor mode | |
| 1233 keymaps make this easier than it used to be. | |
| 1234 | |
| 1235 @defvar minor-mode-list | |
| 1236 The value of this variable is a list of all minor mode commands. | |
| 1237 @end defvar | |
| 1238 | |
| 1239 @menu | |
| 1240 * Minor Mode Conventions:: Tips for writing a minor mode. | |
| 1241 * Keymaps and Minor Modes:: How a minor mode can have its own keymap. | |
| 1242 * Defining Minor Modes:: A convenient facility for defining minor modes. | |
| 1243 @end menu | |
| 1244 | |
| 1245 @node Minor Mode Conventions | |
| 1246 @subsection Conventions for Writing Minor Modes | |
| 1247 @cindex minor mode conventions | |
| 1248 @cindex conventions for writing minor modes | |
| 1249 | |
| 1250 There are conventions for writing minor modes just as there are for | |
| 1251 major modes. Several of the major mode conventions apply to minor | |
| 1252 modes as well: those regarding the name of the mode initialization | |
| 1253 function, the names of global symbols, the use of a hook at the end of | |
| 1254 the initialization function, and the use of keymaps and other tables. | |
| 1255 | |
| 1256 In addition, there are several conventions that are specific to | |
| 1257 minor modes. (The easiest way to follow all the conventions is to use | |
| 1258 the macro @code{define-minor-mode}; @ref{Defining Minor Modes}.) | |
| 1259 | |
| 1260 @itemize @bullet | |
| 1261 @item | |
| 1262 @cindex mode variable | |
| 1263 Make a variable whose name ends in @samp{-mode} to control the minor | |
| 1264 mode. We call this the @dfn{mode variable}. The minor mode command | |
| 1265 should set this variable (@code{nil} to disable; anything else to | |
| 1266 enable). | |
| 1267 | |
| 1268 If possible, implement the mode so that setting the variable | |
| 1269 automatically enables or disables the mode. Then the minor mode command | |
| 1270 does not need to do anything except set the variable. | |
| 1271 | |
| 1272 This variable is used in conjunction with the @code{minor-mode-alist} to | |
| 1273 display the minor mode name in the mode line. It can also enable | |
| 1274 or disable a minor mode keymap. Individual commands or hooks can also | |
| 1275 check the variable's value. | |
| 1276 | |
| 1277 If you want the minor mode to be enabled separately in each buffer, | |
| 1278 make the variable buffer-local. | |
| 1279 | |
| 1280 @item | |
| 1281 Define a command whose name is the same as the mode variable. | |
| 1282 Its job is to enable and disable the mode by setting the variable. | |
| 1283 | |
| 1284 The command should accept one optional argument. If the argument is | |
| 1285 @code{nil}, it should toggle the mode (turn it on if it is off, and | |
| 1286 off if it is on). It should turn the mode on if the argument is a | |
| 1287 positive integer, the symbol @code{t}, or a list whose @sc{car} is one | |
| 1288 of those. It should turn the mode off if the argument is a negative | |
| 1289 integer or zero, the symbol @code{-}, or a list whose @sc{car} is a | |
| 1290 negative integer or zero. The meaning of other arguments is not | |
| 1291 specified. | |
| 1292 | |
| 1293 Here is an example taken from the definition of @code{transient-mark-mode}. | |
| 1294 It shows the use of @code{transient-mark-mode} as a variable that enables or | |
| 1295 disables the mode's behavior, and also shows the proper way to toggle, | |
| 1296 enable or disable the minor mode based on the raw prefix argument value. | |
| 1297 | |
| 1298 @smallexample | |
| 1299 @group | |
| 1300 (setq transient-mark-mode | |
| 1301 (if (null arg) (not transient-mark-mode) | |
| 1302 (> (prefix-numeric-value arg) 0))) | |
| 1303 @end group | |
| 1304 @end smallexample | |
| 1305 | |
| 1306 @item | |
| 1307 Add an element to @code{minor-mode-alist} for each minor mode | |
| 1308 (@pxref{Definition of minor-mode-alist}), if you want to indicate the | |
| 1309 minor mode in the mode line. This element should be a list of the | |
| 1310 following form: | |
| 1311 | |
| 1312 @smallexample | |
| 1313 (@var{mode-variable} @var{string}) | |
| 1314 @end smallexample | |
| 1315 | |
| 1316 Here @var{mode-variable} is the variable that controls enabling of the | |
| 1317 minor mode, and @var{string} is a short string, starting with a space, | |
| 1318 to represent the mode in the mode line. These strings must be short so | |
| 1319 that there is room for several of them at once. | |
| 1320 | |
| 1321 When you add an element to @code{minor-mode-alist}, use @code{assq} to | |
| 1322 check for an existing element, to avoid duplication. For example: | |
| 1323 | |
| 1324 @smallexample | |
| 1325 @group | |
| 1326 (unless (assq 'leif-mode minor-mode-alist) | |
| 1327 (setq minor-mode-alist | |
| 1328 (cons '(leif-mode " Leif") minor-mode-alist))) | |
| 1329 @end group | |
| 1330 @end smallexample | |
| 1331 | |
| 1332 @noindent | |
| 1333 or like this, using @code{add-to-list} (@pxref{List Variables}): | |
| 1334 | |
| 1335 @smallexample | |
| 1336 @group | |
| 1337 (add-to-list 'minor-mode-alist '(leif-mode " Leif")) | |
| 1338 @end group | |
| 1339 @end smallexample | |
| 1340 @end itemize | |
| 1341 | |
| 1342 Global minor modes distributed with Emacs should if possible support | |
| 1343 enabling and disabling via Custom (@pxref{Customization}). To do this, | |
| 1344 the first step is to define the mode variable with @code{defcustom}, and | |
| 1345 specify @code{:type boolean}. | |
| 1346 | |
| 1347 If just setting the variable is not sufficient to enable the mode, you | |
| 1348 should also specify a @code{:set} method which enables the mode by | |
| 1349 invoking the mode command. Note in the variable's documentation string that | |
| 1350 setting the variable other than via Custom may not take effect. | |
| 1351 | |
| 1352 Also mark the definition with an autoload cookie (@pxref{autoload cookie}), | |
| 1353 and specify a @code{:require} so that customizing the variable will load | |
| 1354 the library that defines the mode. This will copy suitable definitions | |
| 1355 into @file{loaddefs.el} so that users can use @code{customize-option} to | |
| 1356 enable the mode. For example: | |
| 1357 | |
| 1358 @smallexample | |
| 1359 @group | |
| 1360 | |
| 1361 ;;;###autoload | |
| 1362 (defcustom msb-mode nil | |
| 1363 "Toggle msb-mode. | |
| 1364 Setting this variable directly does not take effect; | |
| 1365 use either \\[customize] or the function `msb-mode'." | |
| 1366 :set 'custom-set-minor-mode | |
| 1367 :initialize 'custom-initialize-default | |
| 1368 :version "20.4" | |
| 1369 :type 'boolean | |
| 1370 :group 'msb | |
| 1371 :require 'msb) | |
| 1372 @end group | |
| 1373 @end smallexample | |
| 1374 | |
| 1375 @node Keymaps and Minor Modes | |
| 1376 @subsection Keymaps and Minor Modes | |
| 1377 | |
| 1378 Each minor mode can have its own keymap, which is active when the mode | |
| 1379 is enabled. To set up a keymap for a minor mode, add an element to the | |
| 1380 alist @code{minor-mode-map-alist}. @xref{Definition of minor-mode-map-alist}. | |
| 1381 | |
| 1382 @cindex @code{self-insert-command}, minor modes | |
| 1383 One use of minor mode keymaps is to modify the behavior of certain | |
| 1384 self-inserting characters so that they do something else as well as | |
| 1385 self-insert. In general, this is the only way to do that, since the | |
| 1386 facilities for customizing @code{self-insert-command} are limited to | |
| 1387 special cases (designed for abbrevs and Auto Fill mode). (Do not try | |
| 1388 substituting your own definition of @code{self-insert-command} for the | |
| 1389 standard one. The editor command loop handles this function specially.) | |
| 1390 | |
| 1391 The key sequences bound in a minor mode should consist of @kbd{C-c} | |
| 1392 followed by one of @kbd{.,/?`'"[]\|~!#$%^&*()-_+=}. (The other | |
| 1393 punctuation characters are reserved for major modes.) | |
| 1394 | |
| 1395 @node Defining Minor Modes | |
| 1396 @subsection Defining Minor Modes | |
| 1397 | |
| 1398 The macro @code{define-minor-mode} offers a convenient way of | |
| 1399 implementing a mode in one self-contained definition. | |
| 1400 | |
| 1401 @defmac define-minor-mode mode doc [init-value [lighter [keymap]]] keyword-args@dots{} body@dots{} | |
| 1402 This macro defines a new minor mode whose name is @var{mode} (a | |
| 1403 symbol). It defines a command named @var{mode} to toggle the minor | |
| 1404 mode, with @var{doc} as its documentation string. It also defines a | |
| 1405 variable named @var{mode}, which is set to @code{t} or @code{nil} by | |
| 1406 enabling or disabling the mode. The variable is initialized to | |
| 1407 @var{init-value}. Except in unusual circumstances (see below), this | |
| 1408 value must be @code{nil}. | |
| 1409 | |
| 1410 The string @var{lighter} says what to display in the mode line | |
| 1411 when the mode is enabled; if it is @code{nil}, the mode is not displayed | |
| 1412 in the mode line. | |
| 1413 | |
| 1414 The optional argument @var{keymap} specifies the keymap for the minor mode. | |
| 1415 It can be a variable name, whose value is the keymap, or it can be an alist | |
| 1416 specifying bindings in this form: | |
| 1417 | |
| 1418 @example | |
| 1419 (@var{key-sequence} . @var{definition}) | |
| 1420 @end example | |
| 1421 | |
| 1422 The above three arguments @var{init-value}, @var{lighter}, and | |
| 1423 @var{keymap} can be (partially) omitted when @var{keyword-args} are | |
| 1424 used. The @var{keyword-args} consist of keywords followed by | |
| 1425 corresponding values. A few keywords have special meanings: | |
| 1426 | |
| 1427 @table @code | |
| 1428 @item :group @var{group} | |
| 1429 Custom group name to use in all generated @code{defcustom} forms. | |
| 1430 Defaults to @var{mode} without the possible trailing @samp{-mode}. | |
| 1431 @strong{Warning:} don't use this default group name unless you have | |
| 1432 written a @code{defgroup} to define that group properly. @xref{Group | |
| 1433 Definitions}. | |
| 1434 | |
| 1435 @item :global @var{global} | |
| 1436 If non-@code{nil}, this specifies that the minor mode should be global | |
| 1437 rather than buffer-local. It defaults to @code{nil}. | |
| 1438 | |
| 1439 One of the effects of making a minor mode global is that the | |
| 1440 @var{mode} variable becomes a customization variable. Toggling it | |
| 1441 through the Custom interface turns the mode on and off, and its value | |
| 1442 can be saved for future Emacs sessions (@pxref{Saving | |
| 1443 Customizations,,, emacs, The GNU Emacs Manual}. For the saved | |
| 1444 variable to work, you should ensure that the @code{define-minor-mode} | |
| 1445 form is evaluated each time Emacs starts; for packages that are not | |
| 1446 part of Emacs, the easiest way to do this is to specify a | |
| 1447 @code{:require} keyword. | |
| 1448 | |
| 1449 @item :init-value @var{init-value} | |
| 1450 This is equivalent to specifying @var{init-value} positionally. | |
| 1451 | |
| 1452 @item :lighter @var{lighter} | |
| 1453 This is equivalent to specifying @var{lighter} positionally. | |
| 1454 | |
| 1455 @item :keymap @var{keymap} | |
| 1456 This is equivalent to specifying @var{keymap} positionally. | |
| 1457 @end table | |
| 1458 | |
| 1459 Any other keyword arguments are passed directly to the | |
| 1460 @code{defcustom} generated for the variable @var{mode}. | |
| 1461 | |
| 1462 The command named @var{mode} first performs the standard actions such | |
| 1463 as setting the variable named @var{mode} and then executes the | |
| 1464 @var{body} forms, if any. It finishes by running the mode hook | |
| 1465 variable @code{@var{mode}-hook}. | |
| 1466 @end defmac | |
| 1467 | |
| 1468 The initial value must be @code{nil} except in cases where (1) the | |
| 1469 mode is preloaded in Emacs, or (2) it is painless for loading to | |
| 1470 enable the mode even though the user did not request it. For | |
| 1471 instance, if the mode has no effect unless something else is enabled, | |
| 1472 and will always be loaded by that time, enabling it by default is | |
| 1473 harmless. But these are unusual circumstances. Normally, the | |
| 1474 initial value must be @code{nil}. | |
| 1475 | |
| 1476 @findex easy-mmode-define-minor-mode | |
| 1477 The name @code{easy-mmode-define-minor-mode} is an alias | |
| 1478 for this macro. | |
| 1479 | |
| 1480 Here is an example of using @code{define-minor-mode}: | |
| 1481 | |
| 1482 @smallexample | |
| 1483 (define-minor-mode hungry-mode | |
| 1484 "Toggle Hungry mode. | |
| 1485 With no argument, this command toggles the mode. | |
| 1486 Non-null prefix argument turns on the mode. | |
| 1487 Null prefix argument turns off the mode. | |
| 1488 | |
| 1489 When Hungry mode is enabled, the control delete key | |
| 1490 gobbles all preceding whitespace except the last. | |
| 1491 See the command \\[hungry-electric-delete]." | |
| 1492 ;; The initial value. | |
| 1493 nil | |
| 1494 ;; The indicator for the mode line. | |
| 1495 " Hungry" | |
| 1496 ;; The minor mode bindings. | |
| 1497 '(("\C-\^?" . hungry-electric-delete)) | |
| 1498 :group 'hunger) | |
| 1499 @end smallexample | |
| 1500 | |
| 1501 @noindent | |
| 1502 This defines a minor mode named ``Hungry mode,'' a command named | |
| 1503 @code{hungry-mode} to toggle it, a variable named @code{hungry-mode} | |
| 1504 which indicates whether the mode is enabled, and a variable named | |
| 1505 @code{hungry-mode-map} which holds the keymap that is active when the | |
| 1506 mode is enabled. It initializes the keymap with a key binding for | |
| 1507 @kbd{C-@key{DEL}}. It puts the variable @code{hungry-mode} into | |
| 1508 custom group @code{hunger}. There are no @var{body} forms---many | |
| 1509 minor modes don't need any. | |
| 1510 | |
| 1511 Here's an equivalent way to write it: | |
| 1512 | |
| 1513 @smallexample | |
| 1514 (define-minor-mode hungry-mode | |
| 1515 "Toggle Hungry mode. | |
| 1516 With no argument, this command toggles the mode. | |
| 1517 Non-null prefix argument turns on the mode. | |
| 1518 Null prefix argument turns off the mode. | |
| 1519 | |
| 1520 When Hungry mode is enabled, the control delete key | |
| 1521 gobbles all preceding whitespace except the last. | |
| 1522 See the command \\[hungry-electric-delete]." | |
| 1523 ;; The initial value. | |
| 1524 :init-value nil | |
| 1525 ;; The indicator for the mode line. | |
| 1526 :lighter " Hungry" | |
| 1527 ;; The minor mode bindings. | |
| 1528 :keymap | |
| 1529 '(("\C-\^?" . hungry-electric-delete) | |
| 1530 ("\C-\M-\^?" | |
| 1531 . (lambda () | |
| 1532 (interactive) | |
| 1533 (hungry-electric-delete t)))) | |
| 1534 :group 'hunger) | |
| 1535 @end smallexample | |
| 1536 | |
| 1537 @defmac define-globalized-minor-mode global-mode mode turn-on keyword-args@dots{} | |
| 1538 This defines a global toggle named @var{global-mode} whose meaning is | |
| 1539 to enable or disable the buffer-local minor mode @var{mode} in all | |
| 1540 buffers. To turn on the minor mode in a buffer, it uses the function | |
| 1541 @var{turn-on}; to turn off the minor mode, it calls @code{mode} with | |
| 1542 @minus{}1 as argument. | |
| 1543 | |
| 1544 Globally enabling the mode also affects buffers subsequently created | |
| 1545 by visiting files, and buffers that use a major mode other than | |
| 1546 Fundamental mode; but it does not detect the creation of a new buffer | |
| 1547 in Fundamental mode. | |
| 1548 | |
| 1549 This defines the customization option @var{global-mode} (@pxref{Customization}), | |
| 1550 which can be toggled in the Custom interface to turn the minor mode on | |
| 1551 and off. As with @code{define-minor-mode}, you should ensure that the | |
| 1552 @code{define-globalized-minor-mode} form is evaluated each time Emacs | |
| 1553 starts, for example by providing a @code{:require} keyword. | |
| 1554 | |
| 1555 Use @code{:group @var{group}} in @var{keyword-args} to specify the | |
| 1556 custom group for the mode variable of the global minor mode. | |
| 1557 @end defmac | |
| 1558 | |
| 1559 @node Mode Line Format | |
| 1560 @section Mode-Line Format | |
| 1561 @cindex mode line | |
| 1562 | |
| 1563 Each Emacs window (aside from minibuffer windows) typically has a mode | |
| 1564 line at the bottom, which displays status information about the buffer | |
| 1565 displayed in the window. The mode line contains information about the | |
| 1566 buffer, such as its name, associated file, depth of recursive editing, | |
| 1567 and major and minor modes. A window can also have a @dfn{header | |
| 1568 line}, which is much like the mode line but appears at the top of the | |
| 1569 window. | |
| 1570 | |
| 1571 This section describes how to control the contents of the mode line | |
| 1572 and header line. We include it in this chapter because much of the | |
| 1573 information displayed in the mode line relates to the enabled major and | |
| 1574 minor modes. | |
| 1575 | |
| 1576 @menu | |
| 1577 * Base: Mode Line Basics. Basic ideas of mode line control. | |
| 1578 * Data: Mode Line Data. The data structure that controls the mode line. | |
| 1579 * Top: Mode Line Top. The top level variable, mode-line-format. | |
| 1580 * Mode Line Variables:: Variables used in that data structure. | |
| 1581 * %-Constructs:: Putting information into a mode line. | |
| 1582 * Properties in Mode:: Using text properties in the mode line. | |
| 1583 * Header Lines:: Like a mode line, but at the top. | |
| 1584 * Emulating Mode Line:: Formatting text as the mode line would. | |
| 1585 @end menu | |
| 1586 | |
| 1587 @node Mode Line Basics | |
| 1588 @subsection Mode Line Basics | |
| 1589 | |
| 1590 @code{mode-line-format} is a buffer-local variable that holds a | |
| 1591 @dfn{mode line construct}, a kind of template, which controls what is | |
| 1592 displayed on the mode line of the current buffer. The value of | |
| 1593 @code{header-line-format} specifies the buffer's header line in the | |
| 1594 same way. All windows for the same buffer use the same | |
| 1595 @code{mode-line-format} and @code{header-line-format}. | |
| 1596 | |
| 1597 For efficiency, Emacs does not continuously recompute the mode | |
| 1598 line and header line of a window. It does so when circumstances | |
| 1599 appear to call for it---for instance, if you change the window | |
| 1600 configuration, switch buffers, narrow or widen the buffer, scroll, or | |
| 1601 change the buffer's modification status. If you modify any of the | |
| 1602 variables referenced by @code{mode-line-format} (@pxref{Mode Line | |
| 1603 Variables}), or any other variables and data structures that affect | |
| 1604 how text is displayed (@pxref{Display}), you may want to force an | |
| 1605 update of the mode line so as to display the new information or | |
| 1606 display it in the new way. | |
| 1607 | |
| 1608 @defun force-mode-line-update &optional all | |
| 1609 Force redisplay of the current buffer's mode line and header line. | |
| 1610 The next redisplay will update the mode line and header line based on | |
| 1611 the latest values of all relevant variables. With optional | |
| 1612 non-@code{nil} @var{all}, force redisplay of all mode lines and header | |
| 1613 lines. | |
| 1614 | |
| 1615 This function also forces recomputation of the menu bar menus | |
| 1616 and the frame title. | |
| 1617 @end defun | |
| 1618 | |
| 1619 The selected window's mode line is usually displayed in a different | |
| 1620 color using the face @code{mode-line}. Other windows' mode lines | |
| 1621 appear in the face @code{mode-line-inactive} instead. @xref{Faces}. | |
| 1622 | |
| 1623 @node Mode Line Data | |
| 1624 @subsection The Data Structure of the Mode Line | |
| 1625 @cindex mode-line construct | |
| 1626 | |
| 1627 The mode-line contents are controlled by a data structure called a | |
| 1628 @dfn{mode-line construct}, made up of lists, strings, symbols, and | |
| 1629 numbers kept in buffer-local variables. Each data type has a specific | |
| 1630 meaning for the mode-line appearance, as described below. The same | |
| 1631 data structure is used for constructing frame titles (@pxref{Frame | |
| 1632 Titles}) and header lines (@pxref{Header Lines}). | |
| 1633 | |
| 1634 A mode-line construct may be as simple as a fixed string of text, | |
| 1635 but it usually specifies how to combine fixed strings with variables' | |
| 1636 values to construct the text. Many of these variables are themselves | |
| 1637 defined to have mode-line constructs as their values. | |
| 1638 | |
| 1639 Here are the meanings of various data types as mode-line constructs: | |
| 1640 | |
| 1641 @table @code | |
| 1642 @cindex percent symbol in mode line | |
| 1643 @item @var{string} | |
| 1644 A string as a mode-line construct appears verbatim except for | |
| 1645 @dfn{@code{%}-constructs} in it. These stand for substitution of | |
| 1646 other data; see @ref{%-Constructs}. | |
| 1647 | |
| 1648 If parts of the string have @code{face} properties, they control | |
| 1649 display of the text just as they would text in the buffer. Any | |
| 1650 characters which have no @code{face} properties are displayed, by | |
| 1651 default, in the face @code{mode-line} or @code{mode-line-inactive} | |
| 1652 (@pxref{Standard Faces,,, emacs, The GNU Emacs Manual}). The | |
| 1653 @code{help-echo} and @code{local-map} properties in @var{string} have | |
| 1654 special meanings. @xref{Properties in Mode}. | |
| 1655 | |
| 1656 @item @var{symbol} | |
| 1657 A symbol as a mode-line construct stands for its value. The value of | |
| 1658 @var{symbol} is used as a mode-line construct, in place of @var{symbol}. | |
| 1659 However, the symbols @code{t} and @code{nil} are ignored, as is any | |
| 1660 symbol whose value is void. | |
| 1661 | |
| 1662 There is one exception: if the value of @var{symbol} is a string, it is | |
| 1663 displayed verbatim: the @code{%}-constructs are not recognized. | |
| 1664 | |
| 1665 Unless @var{symbol} is marked as ``risky'' (i.e., it has a | |
| 1666 non-@code{nil} @code{risky-local-variable} property), all text | |
| 1667 properties specified in @var{symbol}'s value are ignored. This | |
| 1668 includes the text properties of strings in @var{symbol}'s value, as | |
| 1669 well as all @code{:eval} and @code{:propertize} forms in it. (The | |
| 1670 reason for this is security: non-risky variables could be set | |
| 1671 automatically from file variables without prompting the user.) | |
| 1672 | |
| 1673 @item (@var{string} @var{rest}@dots{}) | |
| 1674 @itemx (@var{list} @var{rest}@dots{}) | |
| 1675 A list whose first element is a string or list means to process all the | |
| 1676 elements recursively and concatenate the results. This is the most | |
| 1677 common form of mode-line construct. | |
| 1678 | |
| 1679 @item (:eval @var{form}) | |
| 1680 A list whose first element is the symbol @code{:eval} says to evaluate | |
| 1681 @var{form}, and use the result as a string to display. Make sure this | |
| 1682 evaluation cannot load any files, as doing so could cause infinite | |
| 1683 recursion. | |
| 1684 | |
| 1685 @item (:propertize @var{elt} @var{props}@dots{}) | |
| 1686 A list whose first element is the symbol @code{:propertize} says to | |
| 1687 process the mode-line construct @var{elt} recursively, then add the text | |
| 1688 properties specified by @var{props} to the result. The argument | |
| 1689 @var{props} should consist of zero or more pairs @var{text-property} | |
| 1690 @var{value}. (This feature is new as of Emacs 22.1.) | |
| 1691 | |
| 1692 @item (@var{symbol} @var{then} @var{else}) | |
| 1693 A list whose first element is a symbol that is not a keyword specifies | |
| 1694 a conditional. Its meaning depends on the value of @var{symbol}. If | |
| 1695 @var{symbol} has a non-@code{nil} value, the second element, | |
| 1696 @var{then}, is processed recursively as a mode-line element. | |
| 1697 Otherwise, the third element, @var{else}, is processed recursively. | |
| 1698 You may omit @var{else}; then the mode-line element displays nothing | |
| 1699 if the value of @var{symbol} is @code{nil} or void. | |
| 1700 | |
| 1701 @item (@var{width} @var{rest}@dots{}) | |
| 1702 A list whose first element is an integer specifies truncation or | |
| 1703 padding of the results of @var{rest}. The remaining elements | |
| 1704 @var{rest} are processed recursively as mode-line constructs and | |
| 1705 concatenated together. When @var{width} is positive, the result is | |
| 1706 space filled on the right if its width is less than @var{width}. When | |
| 1707 @var{width} is negative, the result is truncated on the right to | |
| 1708 @minus{}@var{width} columns if its width exceeds @minus{}@var{width}. | |
| 1709 | |
| 1710 For example, the usual way to show what percentage of a buffer is above | |
| 1711 the top of the window is to use a list like this: @code{(-3 "%p")}. | |
| 1712 @end table | |
| 1713 | |
| 1714 @node Mode Line Top | |
| 1715 @subsection The Top Level of Mode Line Control | |
| 1716 | |
| 1717 The variable in overall control of the mode line is | |
| 1718 @code{mode-line-format}. | |
| 1719 | |
|
103273
c32ec20d0ab5
* abbrevs.texi (Abbrev Mode): abbrev-mode is an option.
Martin Rudalics <rudalics@gmx.at>
parents:
103238
diff
changeset
|
1720 @defopt mode-line-format |
| 84089 | 1721 The value of this variable is a mode-line construct that controls the |
| 1722 contents of the mode-line. It is always buffer-local in all buffers. | |
| 1723 | |
| 1724 If you set this variable to @code{nil} in a buffer, that buffer does | |
| 1725 not have a mode line. (A window that is just one line tall never | |
| 1726 displays a mode line.) | |
|
103273
c32ec20d0ab5
* abbrevs.texi (Abbrev Mode): abbrev-mode is an option.
Martin Rudalics <rudalics@gmx.at>
parents:
103238
diff
changeset
|
1727 @end defopt |
| 84089 | 1728 |
| 1729 The default value of @code{mode-line-format} is designed to use the | |
| 1730 values of other variables such as @code{mode-line-position} and | |
| 1731 @code{mode-line-modes} (which in turn incorporates the values of the | |
| 1732 variables @code{mode-name} and @code{minor-mode-alist}). Very few | |
| 1733 modes need to alter @code{mode-line-format} itself. For most | |
| 1734 purposes, it is sufficient to alter some of the variables that | |
| 1735 @code{mode-line-format} either directly or indirectly refers to. | |
| 1736 | |
| 1737 If you do alter @code{mode-line-format} itself, the new value should | |
| 1738 use the same variables that appear in the default value (@pxref{Mode | |
| 1739 Line Variables}), rather than duplicating their contents or displaying | |
| 1740 the information in another fashion. This way, customizations made by | |
| 1741 the user or by Lisp programs (such as @code{display-time} and major | |
| 1742 modes) via changes to those variables remain effective. | |
| 1743 | |
| 1744 Here is an example of a @code{mode-line-format} that might be | |
| 1745 useful for @code{shell-mode}, since it contains the host name and default | |
| 1746 directory. | |
| 1747 | |
| 1748 @example | |
| 1749 @group | |
| 1750 (setq mode-line-format | |
| 1751 (list "-" | |
| 1752 'mode-line-mule-info | |
| 1753 'mode-line-modified | |
| 1754 'mode-line-frame-identification | |
| 1755 "%b--" | |
| 1756 @end group | |
| 1757 @group | |
| 1758 ;; @r{Note that this is evaluated while making the list.} | |
| 1759 ;; @r{It makes a mode-line construct which is just a string.} | |
| 1760 (getenv "HOST") | |
| 1761 @end group | |
| 1762 ":" | |
| 1763 'default-directory | |
| 1764 " " | |
| 1765 'global-mode-string | |
| 1766 " %[(" | |
| 1767 '(:eval (mode-line-mode-name)) | |
| 1768 'mode-line-process | |
| 1769 'minor-mode-alist | |
| 1770 "%n" | |
| 1771 ")%]--" | |
| 1772 @group | |
| 1773 '(which-func-mode ("" which-func-format "--")) | |
| 1774 '(line-number-mode "L%l--") | |
| 1775 '(column-number-mode "C%c--") | |
| 1776 '(-3 "%p") | |
| 1777 "-%-")) | |
| 1778 @end group | |
| 1779 @end example | |
| 1780 | |
| 1781 @noindent | |
| 1782 (The variables @code{line-number-mode}, @code{column-number-mode} | |
| 1783 and @code{which-func-mode} enable particular minor modes; as usual, | |
| 1784 these variable names are also the minor mode command names.) | |
| 1785 | |
| 1786 @node Mode Line Variables | |
| 1787 @subsection Variables Used in the Mode Line | |
| 1788 | |
| 1789 This section describes variables incorporated by the standard value | |
| 1790 of @code{mode-line-format} into the text of the mode line. There is | |
| 1791 nothing inherently special about these variables; any other variables | |
| 1792 could have the same effects on the mode line if | |
| 1793 @code{mode-line-format}'s value were changed to use them. However, | |
| 1794 various parts of Emacs set these variables on the understanding that | |
| 1795 they will control parts of the mode line; therefore, practically | |
| 1796 speaking, it is essential for the mode line to use them. | |
| 1797 | |
| 1798 @defvar mode-line-mule-info | |
| 1799 This variable holds the value of the mode-line construct that displays | |
| 1800 information about the language environment, buffer coding system, and | |
| 1801 current input method. @xref{Non-ASCII Characters}. | |
| 1802 @end defvar | |
| 1803 | |
| 1804 @defvar mode-line-modified | |
| 1805 This variable holds the value of the mode-line construct that displays | |
|
102775
58dbb2780124
(Mode Line Variables): The default values of the mode
Chong Yidong <cyd@stupidchicken.com>
parents:
102766
diff
changeset
|
1806 whether the current buffer is modified. Its default value displays |
|
58dbb2780124
(Mode Line Variables): The default values of the mode
Chong Yidong <cyd@stupidchicken.com>
parents:
102766
diff
changeset
|
1807 @samp{**} if the buffer is modified, @samp{--} if the buffer is not |
|
58dbb2780124
(Mode Line Variables): The default values of the mode
Chong Yidong <cyd@stupidchicken.com>
parents:
102766
diff
changeset
|
1808 modified, @samp{%%} if the buffer is read only, and @samp{%*} if the |
|
58dbb2780124
(Mode Line Variables): The default values of the mode
Chong Yidong <cyd@stupidchicken.com>
parents:
102766
diff
changeset
|
1809 buffer is read only and modified. |
| 84089 | 1810 |
| 1811 Changing this variable does not force an update of the mode line. | |
| 1812 @end defvar | |
| 1813 | |
| 1814 @defvar mode-line-frame-identification | |
|
102775
58dbb2780124
(Mode Line Variables): The default values of the mode
Chong Yidong <cyd@stupidchicken.com>
parents:
102766
diff
changeset
|
1815 This variable identifies the current frame. Its default value |
|
58dbb2780124
(Mode Line Variables): The default values of the mode
Chong Yidong <cyd@stupidchicken.com>
parents:
102766
diff
changeset
|
1816 displays @code{" "} if you are using a window system which can show |
|
58dbb2780124
(Mode Line Variables): The default values of the mode
Chong Yidong <cyd@stupidchicken.com>
parents:
102766
diff
changeset
|
1817 multiple frames, or @code{"-%F "} on an ordinary terminal which shows |
|
58dbb2780124
(Mode Line Variables): The default values of the mode
Chong Yidong <cyd@stupidchicken.com>
parents:
102766
diff
changeset
|
1818 only one frame at a time. |
| 84089 | 1819 @end defvar |
| 1820 | |
| 1821 @defvar mode-line-buffer-identification | |
|
102775
58dbb2780124
(Mode Line Variables): The default values of the mode
Chong Yidong <cyd@stupidchicken.com>
parents:
102766
diff
changeset
|
1822 This variable identifies the buffer being displayed in the window. |
|
58dbb2780124
(Mode Line Variables): The default values of the mode
Chong Yidong <cyd@stupidchicken.com>
parents:
102766
diff
changeset
|
1823 Its default value displays the buffer name, padded with spaces to at |
|
58dbb2780124
(Mode Line Variables): The default values of the mode
Chong Yidong <cyd@stupidchicken.com>
parents:
102766
diff
changeset
|
1824 least 12 columns. |
| 84089 | 1825 @end defvar |
| 1826 | |
|
103273
c32ec20d0ab5
* abbrevs.texi (Abbrev Mode): abbrev-mode is an option.
Martin Rudalics <rudalics@gmx.at>
parents:
103238
diff
changeset
|
1827 @defopt mode-line-position |
|
102775
58dbb2780124
(Mode Line Variables): The default values of the mode
Chong Yidong <cyd@stupidchicken.com>
parents:
102766
diff
changeset
|
1828 This variable indicates the position in the buffer. Its default value |
|
58dbb2780124
(Mode Line Variables): The default values of the mode
Chong Yidong <cyd@stupidchicken.com>
parents:
102766
diff
changeset
|
1829 displays the buffer percentage and, optionally, the buffer size, the |
|
58dbb2780124
(Mode Line Variables): The default values of the mode
Chong Yidong <cyd@stupidchicken.com>
parents:
102766
diff
changeset
|
1830 line number and the column number. |
|
103273
c32ec20d0ab5
* abbrevs.texi (Abbrev Mode): abbrev-mode is an option.
Martin Rudalics <rudalics@gmx.at>
parents:
103238
diff
changeset
|
1831 @end defopt |
| 84089 | 1832 |
| 1833 @defvar vc-mode | |
| 1834 The variable @code{vc-mode}, buffer-local in each buffer, records | |
| 1835 whether the buffer's visited file is maintained with version control, | |
| 1836 and, if so, which kind. Its value is a string that appears in the mode | |
| 1837 line, or @code{nil} for no version control. | |
| 1838 @end defvar | |
| 1839 | |
|
103273
c32ec20d0ab5
* abbrevs.texi (Abbrev Mode): abbrev-mode is an option.
Martin Rudalics <rudalics@gmx.at>
parents:
103238
diff
changeset
|
1840 @defopt mode-line-modes |
|
102775
58dbb2780124
(Mode Line Variables): The default values of the mode
Chong Yidong <cyd@stupidchicken.com>
parents:
102766
diff
changeset
|
1841 This variable displays the buffer's major and minor modes. Its |
|
58dbb2780124
(Mode Line Variables): The default values of the mode
Chong Yidong <cyd@stupidchicken.com>
parents:
102766
diff
changeset
|
1842 default value also displays the recursive editing level, information |
|
58dbb2780124
(Mode Line Variables): The default values of the mode
Chong Yidong <cyd@stupidchicken.com>
parents:
102766
diff
changeset
|
1843 on the process status, and whether narrowing is in effect. |
|
103273
c32ec20d0ab5
* abbrevs.texi (Abbrev Mode): abbrev-mode is an option.
Martin Rudalics <rudalics@gmx.at>
parents:
103238
diff
changeset
|
1844 @end defopt |
| 84089 | 1845 |
| 1846 The following three variables are used in @code{mode-line-modes}: | |
| 1847 | |
| 1848 @defvar mode-name | |
| 1849 This buffer-local variable holds the ``pretty'' name of the current | |
|
98729
a0397c75f952
(Major Mode Conventions, Mode Line Variables): `mode-name' need not be a
Eli Zaretskii <eliz@gnu.org>
parents:
87981
diff
changeset
|
1850 buffer's major mode. Each major mode should set this variable so that |
|
a0397c75f952
(Major Mode Conventions, Mode Line Variables): `mode-name' need not be a
Eli Zaretskii <eliz@gnu.org>
parents:
87981
diff
changeset
|
1851 the mode name will appear in the mode line. The value does not have |
|
a0397c75f952
(Major Mode Conventions, Mode Line Variables): `mode-name' need not be a
Eli Zaretskii <eliz@gnu.org>
parents:
87981
diff
changeset
|
1852 to be a string, but can use any of the data types valid in a mode-line |
|
a0397c75f952
(Major Mode Conventions, Mode Line Variables): `mode-name' need not be a
Eli Zaretskii <eliz@gnu.org>
parents:
87981
diff
changeset
|
1853 construct (@pxref{Mode Line Data}). To compute the string that will |
|
a0397c75f952
(Major Mode Conventions, Mode Line Variables): `mode-name' need not be a
Eli Zaretskii <eliz@gnu.org>
parents:
87981
diff
changeset
|
1854 identify the mode name in the mode line, use @code{format-mode-line} |
|
a0397c75f952
(Major Mode Conventions, Mode Line Variables): `mode-name' need not be a
Eli Zaretskii <eliz@gnu.org>
parents:
87981
diff
changeset
|
1855 (@pxref{Emulating Mode Line}). |
| 84089 | 1856 @end defvar |
| 1857 | |
| 1858 @defvar mode-line-process | |
| 1859 This buffer-local variable contains the mode-line information on process | |
| 1860 status in modes used for communicating with subprocesses. It is | |
| 1861 displayed immediately following the major mode name, with no intervening | |
| 1862 space. For example, its value in the @samp{*shell*} buffer is | |
| 1863 @code{(":%s")}, which allows the shell to display its status along | |
| 1864 with the major mode as: @samp{(Shell:run)}. Normally this variable | |
| 1865 is @code{nil}. | |
| 1866 @end defvar | |
| 1867 | |
| 1868 @defvar minor-mode-alist | |
| 1869 @anchor{Definition of minor-mode-alist} | |
| 1870 This variable holds an association list whose elements specify how the | |
| 1871 mode line should indicate that a minor mode is active. Each element of | |
| 1872 the @code{minor-mode-alist} should be a two-element list: | |
| 1873 | |
| 1874 @example | |
| 1875 (@var{minor-mode-variable} @var{mode-line-string}) | |
| 1876 @end example | |
| 1877 | |
| 1878 More generally, @var{mode-line-string} can be any mode-line spec. It | |
| 1879 appears in the mode line when the value of @var{minor-mode-variable} | |
| 1880 is non-@code{nil}, and not otherwise. These strings should begin with | |
| 1881 spaces so that they don't run together. Conventionally, the | |
| 1882 @var{minor-mode-variable} for a specific mode is set to a | |
| 1883 non-@code{nil} value when that minor mode is activated. | |
| 1884 | |
| 1885 @code{minor-mode-alist} itself is not buffer-local. Each variable | |
| 1886 mentioned in the alist should be buffer-local if its minor mode can be | |
| 1887 enabled separately in each buffer. | |
| 1888 @end defvar | |
| 1889 | |
| 1890 @defvar global-mode-string | |
| 1891 This variable holds a mode-line spec that, by default, appears in the | |
| 1892 mode line just after the @code{which-func-mode} minor mode if set, | |
| 1893 else after @code{mode-line-modes}. The command @code{display-time} | |
| 1894 sets @code{global-mode-string} to refer to the variable | |
| 1895 @code{display-time-string}, which holds a string containing the time | |
| 1896 and load information. | |
| 1897 | |
| 1898 The @samp{%M} construct substitutes the value of | |
| 1899 @code{global-mode-string}, but that is obsolete, since the variable is | |
| 1900 included in the mode line from @code{mode-line-format}. | |
| 1901 @end defvar | |
| 1902 | |
| 1903 Here is a simplified version of the default value of | |
|
104626
caa79498564a
* subr.el (default-mode-line-format, default-header-line-format)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
103821
diff
changeset
|
1904 @code{mode-line-format}. The real default value also |
| 84089 | 1905 specifies addition of text properties. |
| 1906 | |
| 1907 @example | |
| 1908 @group | |
| 1909 ("-" | |
| 1910 mode-line-mule-info | |
| 1911 mode-line-modified | |
| 1912 mode-line-frame-identification | |
| 1913 mode-line-buffer-identification | |
| 1914 @end group | |
| 1915 " " | |
| 1916 mode-line-position | |
| 1917 (vc-mode vc-mode) | |
| 1918 " " | |
| 1919 @group | |
| 1920 mode-line-modes | |
| 1921 (which-func-mode ("" which-func-format "--")) | |
| 1922 (global-mode-string ("--" global-mode-string)) | |
| 1923 "-%-") | |
| 1924 @end group | |
| 1925 @end example | |
| 1926 | |
| 1927 @node %-Constructs | |
| 1928 @subsection @code{%}-Constructs in the Mode Line | |
| 1929 | |
| 1930 Strings used as mode-line constructs can use certain | |
| 1931 @code{%}-constructs to substitute various kinds of data. Here is a | |
| 1932 list of the defined @code{%}-constructs, and what they mean. In any | |
| 1933 construct except @samp{%%}, you can add a decimal integer after the | |
| 1934 @samp{%} to specify a minimum field width. If the width is less, the | |
| 1935 field is padded with spaces to the right. | |
| 1936 | |
| 1937 @table @code | |
| 1938 @item %b | |
| 1939 The current buffer name, obtained with the @code{buffer-name} function. | |
| 1940 @xref{Buffer Names}. | |
| 1941 | |
| 1942 @item %c | |
| 1943 The current column number of point. | |
| 1944 | |
| 1945 @item %e | |
| 1946 When Emacs is nearly out of memory for Lisp objects, a brief message | |
| 1947 saying so. Otherwise, this is empty. | |
| 1948 | |
| 1949 @item %f | |
| 1950 The visited file name, obtained with the @code{buffer-file-name} | |
| 1951 function. @xref{Buffer File Name}. | |
| 1952 | |
| 1953 @item %F | |
| 1954 The title (only on a window system) or the name of the selected frame. | |
| 1955 @xref{Basic Parameters}. | |
| 1956 | |
| 1957 @item %i | |
| 1958 The size of the accessible part of the current buffer; basically | |
| 1959 @code{(- (point-max) (point-min))}. | |
| 1960 | |
| 1961 @item %I | |
| 1962 Like @samp{%i}, but the size is printed in a more readable way by using | |
| 1963 @samp{k} for 10^3, @samp{M} for 10^6, @samp{G} for 10^9, etc., to | |
| 1964 abbreviate. | |
| 1965 | |
| 1966 @item %l | |
| 1967 The current line number of point, counting within the accessible portion | |
| 1968 of the buffer. | |
| 1969 | |
| 1970 @item %n | |
| 1971 @samp{Narrow} when narrowing is in effect; nothing otherwise (see | |
| 1972 @code{narrow-to-region} in @ref{Narrowing}). | |
| 1973 | |
| 1974 @item %p | |
| 1975 The percentage of the buffer text above the @strong{top} of window, or | |
| 1976 @samp{Top}, @samp{Bottom} or @samp{All}. Note that the default | |
| 1977 mode-line specification truncates this to three characters. | |
| 1978 | |
| 1979 @item %P | |
| 1980 The percentage of the buffer text that is above the @strong{bottom} of | |
| 1981 the window (which includes the text visible in the window, as well as | |
| 1982 the text above the top), plus @samp{Top} if the top of the buffer is | |
| 1983 visible on screen; or @samp{Bottom} or @samp{All}. | |
| 1984 | |
| 1985 @item %s | |
| 1986 The status of the subprocess belonging to the current buffer, obtained with | |
| 1987 @code{process-status}. @xref{Process Information}. | |
| 1988 | |
| 1989 @item %t | |
| 1990 Whether the visited file is a text file or a binary file. This is a | |
| 1991 meaningful distinction only on certain operating systems (@pxref{MS-DOS | |
| 1992 File Types}). | |
| 1993 | |
| 1994 @item %z | |
| 1995 The mnemonics of keyboard, terminal, and buffer coding systems. | |
| 1996 | |
| 1997 @item %Z | |
| 1998 Like @samp{%z}, but including the end-of-line format. | |
| 1999 | |
| 2000 @item %* | |
| 2001 @samp{%} if the buffer is read only (see @code{buffer-read-only}); @* | |
| 2002 @samp{*} if the buffer is modified (see @code{buffer-modified-p}); @* | |
| 2003 @samp{-} otherwise. @xref{Buffer Modification}. | |
| 2004 | |
| 2005 @item %+ | |
| 2006 @samp{*} if the buffer is modified (see @code{buffer-modified-p}); @* | |
| 2007 @samp{%} if the buffer is read only (see @code{buffer-read-only}); @* | |
| 2008 @samp{-} otherwise. This differs from @samp{%*} only for a modified | |
| 2009 read-only buffer. @xref{Buffer Modification}. | |
| 2010 | |
| 2011 @item %& | |
| 2012 @samp{*} if the buffer is modified, and @samp{-} otherwise. | |
| 2013 | |
| 2014 @item %[ | |
| 2015 An indication of the depth of recursive editing levels (not counting | |
| 2016 minibuffer levels): one @samp{[} for each editing level. | |
| 2017 @xref{Recursive Editing}. | |
| 2018 | |
| 2019 @item %] | |
| 2020 One @samp{]} for each recursive editing level (not counting minibuffer | |
| 2021 levels). | |
| 2022 | |
| 2023 @item %- | |
| 2024 Dashes sufficient to fill the remainder of the mode line. | |
| 2025 | |
| 2026 @item %% | |
| 2027 The character @samp{%}---this is how to include a literal @samp{%} in a | |
| 2028 string in which @code{%}-constructs are allowed. | |
| 2029 @end table | |
| 2030 | |
| 2031 The following two @code{%}-constructs are still supported, but they are | |
| 2032 obsolete, since you can get the same results with the variables | |
| 2033 @code{mode-name} and @code{global-mode-string}. | |
| 2034 | |
| 2035 @table @code | |
| 2036 @item %m | |
| 2037 The value of @code{mode-name}. | |
| 2038 | |
| 2039 @item %M | |
| 2040 The value of @code{global-mode-string}. | |
| 2041 @end table | |
| 2042 | |
| 2043 @node Properties in Mode | |
| 2044 @subsection Properties in the Mode Line | |
| 2045 @cindex text properties in the mode line | |
| 2046 | |
| 2047 Certain text properties are meaningful in the | |
| 2048 mode line. The @code{face} property affects the appearance of text; the | |
| 2049 @code{help-echo} property associates help strings with the text, and | |
| 2050 @code{local-map} can make the text mouse-sensitive. | |
| 2051 | |
| 2052 There are four ways to specify text properties for text in the mode | |
| 2053 line: | |
| 2054 | |
| 2055 @enumerate | |
| 2056 @item | |
| 2057 Put a string with a text property directly into the mode-line data | |
| 2058 structure. | |
| 2059 | |
| 2060 @item | |
| 2061 Put a text property on a mode-line %-construct such as @samp{%12b}; then | |
| 2062 the expansion of the %-construct will have that same text property. | |
| 2063 | |
| 2064 @item | |
| 2065 Use a @code{(:propertize @var{elt} @var{props}@dots{})} construct to | |
| 2066 give @var{elt} a text property specified by @var{props}. | |
| 2067 | |
| 2068 @item | |
| 2069 Use a list containing @code{:eval @var{form}} in the mode-line data | |
| 2070 structure, and make @var{form} evaluate to a string that has a text | |
| 2071 property. | |
| 2072 @end enumerate | |
| 2073 | |
| 2074 You can use the @code{local-map} property to specify a keymap. This | |
| 2075 keymap only takes real effect for mouse clicks; binding character keys | |
| 2076 and function keys to it has no effect, since it is impossible to move | |
| 2077 point into the mode line. | |
| 2078 | |
| 2079 When the mode line refers to a variable which does not have a | |
| 2080 non-@code{nil} @code{risky-local-variable} property, any text | |
| 2081 properties given or specified within that variable's values are | |
| 2082 ignored. This is because such properties could otherwise specify | |
| 2083 functions to be called, and those functions could come from file | |
| 2084 local variables. | |
| 2085 | |
| 2086 @node Header Lines | |
| 2087 @subsection Window Header Lines | |
| 2088 @cindex header line (of a window) | |
| 2089 @cindex window header line | |
| 2090 | |
| 2091 A window can have a @dfn{header line} at the | |
| 2092 top, just as it can have a mode line at the bottom. The header line | |
| 2093 feature works just like the mode-line feature, except that it's | |
| 2094 controlled by different variables. | |
| 2095 | |
| 2096 @defvar header-line-format | |
| 2097 This variable, local in every buffer, specifies how to display the | |
| 2098 header line, for windows displaying the buffer. The format of the value | |
| 2099 is the same as for @code{mode-line-format} (@pxref{Mode Line Data}). | |
| 2100 It is normally @code{nil}, so that ordinary buffers have no header line. | |
| 2101 @end defvar | |
| 2102 | |
| 2103 A window that is just one line tall never displays a header line. A | |
| 2104 window that is two lines tall cannot display both a mode line and a | |
| 2105 header line at once; if it has a mode line, then it does not display a | |
| 2106 header line. | |
| 2107 | |
| 2108 @node Emulating Mode Line | |
| 2109 @subsection Emulating Mode-Line Formatting | |
| 2110 | |
| 2111 You can use the function @code{format-mode-line} to compute | |
| 2112 the text that would appear in a mode line or header line | |
| 2113 based on a certain mode-line specification. | |
| 2114 | |
| 2115 @defun format-mode-line format &optional face window buffer | |
| 2116 This function formats a line of text according to @var{format} as if | |
| 2117 it were generating the mode line for @var{window}, but instead of | |
| 2118 displaying the text in the mode line or the header line, it returns | |
| 2119 the text as a string. The argument @var{window} defaults to the | |
| 2120 selected window. If @var{buffer} is non-@code{nil}, all the | |
| 2121 information used is taken from @var{buffer}; by default, it comes from | |
| 2122 @var{window}'s buffer. | |
| 2123 | |
| 2124 The value string normally has text properties that correspond to the | |
| 2125 faces, keymaps, etc., that the mode line would have. And any character | |
| 2126 for which no @code{face} property is specified gets a default | |
| 2127 value which is usually @var{face}. (If @var{face} is @code{t}, | |
| 2128 that stands for either @code{mode-line} if @var{window} is selected, | |
| 2129 otherwise @code{mode-line-inactive}. If @var{face} is @code{nil} or | |
| 2130 omitted, that stands for no face property.) | |
| 2131 | |
| 2132 However, if @var{face} is an integer, the value has no text properties. | |
| 2133 | |
| 2134 For example, @code{(format-mode-line header-line-format)} returns the | |
| 2135 text that would appear in the selected window's header line (@code{""} | |
| 2136 if it has no header line). @code{(format-mode-line header-line-format | |
| 2137 'header-line)} returns the same text, with each character | |
| 2138 carrying the face that it will have in the header line itself. | |
| 2139 @end defun | |
| 2140 | |
| 2141 @node Imenu | |
| 2142 @section Imenu | |
| 2143 | |
| 2144 @cindex Imenu | |
| 2145 @dfn{Imenu} is a feature that lets users select a definition or | |
| 2146 section in the buffer, from a menu which lists all of them, to go | |
| 2147 directly to that location in the buffer. Imenu works by constructing | |
| 2148 a buffer index which lists the names and buffer positions of the | |
| 2149 definitions, or other named portions of the buffer; then the user can | |
| 2150 choose one of them and move point to it. Major modes can add a menu | |
| 2151 bar item to use Imenu using @code{imenu-add-to-menubar}. | |
| 2152 | |
| 2153 @defun imenu-add-to-menubar name | |
| 2154 This function defines a local menu bar item named @var{name} | |
| 2155 to run Imenu. | |
| 2156 @end defun | |
| 2157 | |
| 2158 The user-level commands for using Imenu are described in the Emacs | |
| 2159 Manual (@pxref{Imenu,, Imenu, emacs, the Emacs Manual}). This section | |
| 2160 explains how to customize Imenu's method of finding definitions or | |
| 2161 buffer portions for a particular major mode. | |
| 2162 | |
| 2163 The usual and simplest way is to set the variable | |
| 2164 @code{imenu-generic-expression}: | |
| 2165 | |
| 2166 @defvar imenu-generic-expression | |
| 2167 This variable, if non-@code{nil}, is a list that specifies regular | |
| 2168 expressions for finding definitions for Imenu. Simple elements of | |
| 2169 @code{imenu-generic-expression} look like this: | |
| 2170 | |
| 2171 @example | |
| 2172 (@var{menu-title} @var{regexp} @var{index}) | |
| 2173 @end example | |
| 2174 | |
| 2175 Here, if @var{menu-title} is non-@code{nil}, it says that the matches | |
| 2176 for this element should go in a submenu of the buffer index; | |
| 2177 @var{menu-title} itself specifies the name for the submenu. If | |
| 2178 @var{menu-title} is @code{nil}, the matches for this element go directly | |
| 2179 in the top level of the buffer index. | |
| 2180 | |
| 2181 The second item in the list, @var{regexp}, is a regular expression | |
| 2182 (@pxref{Regular Expressions}); anything in the buffer that it matches | |
| 2183 is considered a definition, something to mention in the buffer index. | |
| 2184 The third item, @var{index}, is a non-negative integer that indicates | |
| 2185 which subexpression in @var{regexp} matches the definition's name. | |
| 2186 | |
| 2187 An element can also look like this: | |
| 2188 | |
| 2189 @example | |
| 2190 (@var{menu-title} @var{regexp} @var{index} @var{function} @var{arguments}@dots{}) | |
| 2191 @end example | |
| 2192 | |
| 2193 Each match for this element creates an index item, and when the index | |
| 2194 item is selected by the user, it calls @var{function} with arguments | |
| 2195 consisting of the item name, the buffer position, and @var{arguments}. | |
| 2196 | |
| 2197 For Emacs Lisp mode, @code{imenu-generic-expression} could look like | |
| 2198 this: | |
| 2199 | |
| 2200 @c should probably use imenu-syntax-alist and \\sw rather than [-A-Za-z0-9+] | |
| 2201 @example | |
| 2202 @group | |
| 2203 ((nil "^\\s-*(def\\(un\\|subst\\|macro\\|advice\\)\ | |
| 2204 \\s-+\\([-A-Za-z0-9+]+\\)" 2) | |
| 2205 @end group | |
| 2206 @group | |
| 2207 ("*Vars*" "^\\s-*(def\\(var\\|const\\)\ | |
| 2208 \\s-+\\([-A-Za-z0-9+]+\\)" 2) | |
| 2209 @end group | |
| 2210 @group | |
| 2211 ("*Types*" | |
| 2212 "^\\s-*\ | |
| 2213 (def\\(type\\|struct\\|class\\|ine-condition\\)\ | |
| 2214 \\s-+\\([-A-Za-z0-9+]+\\)" 2)) | |
| 2215 @end group | |
| 2216 @end example | |
| 2217 | |
| 2218 Setting this variable makes it buffer-local in the current buffer. | |
| 2219 @end defvar | |
| 2220 | |
| 2221 @defvar imenu-case-fold-search | |
| 2222 This variable controls whether matching against the regular | |
| 2223 expressions in the value of @code{imenu-generic-expression} is | |
| 2224 case-sensitive: @code{t}, the default, means matching should ignore | |
| 2225 case. | |
| 2226 | |
| 2227 Setting this variable makes it buffer-local in the current buffer. | |
| 2228 @end defvar | |
| 2229 | |
| 2230 @defvar imenu-syntax-alist | |
| 2231 This variable is an alist of syntax table modifiers to use while | |
| 2232 processing @code{imenu-generic-expression}, to override the syntax table | |
| 2233 of the current buffer. Each element should have this form: | |
| 2234 | |
| 2235 @example | |
| 2236 (@var{characters} . @var{syntax-description}) | |
| 2237 @end example | |
| 2238 | |
| 2239 The @sc{car}, @var{characters}, can be either a character or a string. | |
| 2240 The element says to give that character or characters the syntax | |
| 2241 specified by @var{syntax-description}, which is passed to | |
| 2242 @code{modify-syntax-entry} (@pxref{Syntax Table Functions}). | |
| 2243 | |
| 2244 This feature is typically used to give word syntax to characters which | |
| 2245 normally have symbol syntax, and thus to simplify | |
| 2246 @code{imenu-generic-expression} and speed up matching. | |
| 2247 For example, Fortran mode uses it this way: | |
| 2248 | |
| 2249 @example | |
| 2250 (setq imenu-syntax-alist '(("_$" . "w"))) | |
| 2251 @end example | |
| 2252 | |
| 2253 The @code{imenu-generic-expression} regular expressions can then use | |
| 2254 @samp{\\sw+} instead of @samp{\\(\\sw\\|\\s_\\)+}. Note that this | |
| 2255 technique may be inconvenient when the mode needs to limit the initial | |
| 2256 character of a name to a smaller set of characters than are allowed in | |
| 2257 the rest of a name. | |
| 2258 | |
| 2259 Setting this variable makes it buffer-local in the current buffer. | |
| 2260 @end defvar | |
| 2261 | |
| 2262 Another way to customize Imenu for a major mode is to set the | |
| 2263 variables @code{imenu-prev-index-position-function} and | |
| 2264 @code{imenu-extract-index-name-function}: | |
| 2265 | |
| 2266 @defvar imenu-prev-index-position-function | |
| 2267 If this variable is non-@code{nil}, its value should be a function that | |
| 2268 finds the next ``definition'' to put in the buffer index, scanning | |
| 2269 backward in the buffer from point. It should return @code{nil} if it | |
| 2270 doesn't find another ``definition'' before point. Otherwise it should | |
| 2271 leave point at the place it finds a ``definition'' and return any | |
| 2272 non-@code{nil} value. | |
| 2273 | |
| 2274 Setting this variable makes it buffer-local in the current buffer. | |
| 2275 @end defvar | |
| 2276 | |
| 2277 @defvar imenu-extract-index-name-function | |
| 2278 If this variable is non-@code{nil}, its value should be a function to | |
| 2279 return the name for a definition, assuming point is in that definition | |
| 2280 as the @code{imenu-prev-index-position-function} function would leave | |
| 2281 it. | |
| 2282 | |
| 2283 Setting this variable makes it buffer-local in the current buffer. | |
| 2284 @end defvar | |
| 2285 | |
| 2286 The last way to customize Imenu for a major mode is to set the | |
| 2287 variable @code{imenu-create-index-function}: | |
| 2288 | |
| 2289 @defvar imenu-create-index-function | |
| 2290 This variable specifies the function to use for creating a buffer | |
| 2291 index. The function should take no arguments, and return an index | |
| 2292 alist for the current buffer. It is called within | |
| 2293 @code{save-excursion}, so where it leaves point makes no difference. | |
| 2294 | |
| 2295 The index alist can have three types of elements. Simple elements | |
| 2296 look like this: | |
| 2297 | |
| 2298 @example | |
| 2299 (@var{index-name} . @var{index-position}) | |
| 2300 @end example | |
| 2301 | |
| 2302 Selecting a simple element has the effect of moving to position | |
| 2303 @var{index-position} in the buffer. Special elements look like this: | |
| 2304 | |
| 2305 @example | |
| 2306 (@var{index-name} @var{index-position} @var{function} @var{arguments}@dots{}) | |
| 2307 @end example | |
| 2308 | |
| 2309 Selecting a special element performs: | |
| 2310 | |
| 2311 @example | |
| 2312 (funcall @var{function} | |
| 2313 @var{index-name} @var{index-position} @var{arguments}@dots{}) | |
| 2314 @end example | |
| 2315 | |
| 2316 A nested sub-alist element looks like this: | |
| 2317 | |
| 2318 @example | |
| 2319 (@var{menu-title} @var{sub-alist}) | |
| 2320 @end example | |
| 2321 | |
| 2322 It creates the submenu @var{menu-title} specified by @var{sub-alist}. | |
| 2323 | |
| 2324 The default value of @code{imenu-create-index-function} is | |
| 2325 @code{imenu-default-create-index-function}. This function calls the | |
| 2326 value of @code{imenu-prev-index-position-function} and the value of | |
| 2327 @code{imenu-extract-index-name-function} to produce the index alist. | |
| 2328 However, if either of these two variables is @code{nil}, the default | |
| 2329 function uses @code{imenu-generic-expression} instead. | |
| 2330 | |
| 2331 Setting this variable makes it buffer-local in the current buffer. | |
| 2332 @end defvar | |
| 2333 | |
| 2334 @node Font Lock Mode | |
| 2335 @section Font Lock Mode | |
| 2336 @cindex Font Lock mode | |
| 2337 | |
| 2338 @dfn{Font Lock mode} is a feature that automatically attaches | |
| 2339 @code{face} properties to certain parts of the buffer based on their | |
| 2340 syntactic role. How it parses the buffer depends on the major mode; | |
| 2341 most major modes define syntactic criteria for which faces to use in | |
| 2342 which contexts. This section explains how to customize Font Lock for a | |
| 2343 particular major mode. | |
| 2344 | |
| 2345 Font Lock mode finds text to highlight in two ways: through | |
| 2346 syntactic parsing based on the syntax table, and through searching | |
| 2347 (usually for regular expressions). Syntactic fontification happens | |
| 2348 first; it finds comments and string constants and highlights them. | |
| 2349 Search-based fontification happens second. | |
| 2350 | |
| 2351 @menu | |
| 2352 * Font Lock Basics:: Overview of customizing Font Lock. | |
| 2353 * Search-based Fontification:: Fontification based on regexps. | |
| 2354 * Customizing Keywords:: Customizing search-based fontification. | |
| 2355 * Other Font Lock Variables:: Additional customization facilities. | |
| 2356 * Levels of Font Lock:: Each mode can define alternative levels | |
| 2357 so that the user can select more or less. | |
| 2358 * Precalculated Fontification:: How Lisp programs that produce the buffer | |
| 2359 contents can also specify how to fontify it. | |
| 2360 * Faces for Font Lock:: Special faces specifically for Font Lock. | |
| 2361 * Syntactic Font Lock:: Fontification based on syntax tables. | |
| 2362 * Setting Syntax Properties:: Defining character syntax based on context | |
| 2363 using the Font Lock mechanism. | |
| 2364 * Multiline Font Lock:: How to coerce Font Lock into properly | |
| 2365 highlighting multiline constructs. | |
| 2366 @end menu | |
| 2367 | |
| 2368 @node Font Lock Basics | |
| 2369 @subsection Font Lock Basics | |
| 2370 | |
| 2371 There are several variables that control how Font Lock mode highlights | |
| 2372 text. But major modes should not set any of these variables directly. | |
| 2373 Instead, they should set @code{font-lock-defaults} as a buffer-local | |
| 2374 variable. The value assigned to this variable is used, if and when Font | |
| 2375 Lock mode is enabled, to set all the other variables. | |
| 2376 | |
| 2377 @defvar font-lock-defaults | |
| 2378 This variable is set by major modes, as a buffer-local variable, to | |
| 2379 specify how to fontify text in that mode. It automatically becomes | |
| 2380 buffer-local when you set it. If its value is @code{nil}, Font-Lock | |
| 2381 mode does no highlighting, and you can use the @samp{Faces} menu | |
| 2382 (under @samp{Edit} and then @samp{Text Properties} in the menu bar) to | |
| 2383 assign faces explicitly to text in the buffer. | |
| 2384 | |
| 2385 If non-@code{nil}, the value should look like this: | |
| 2386 | |
| 2387 @example | |
| 2388 (@var{keywords} [@var{keywords-only} [@var{case-fold} | |
| 2389 [@var{syntax-alist} [@var{syntax-begin} @var{other-vars}@dots{}]]]]) | |
| 2390 @end example | |
| 2391 | |
| 2392 The first element, @var{keywords}, indirectly specifies the value of | |
| 2393 @code{font-lock-keywords} which directs search-based fontification. | |
| 2394 It can be a symbol, a variable or a function whose value is the list | |
| 2395 to use for @code{font-lock-keywords}. It can also be a list of | |
| 2396 several such symbols, one for each possible level of fontification. | |
|
100386
fae812e295b4
(Font Lock Basics): Fix level description. (Bug#1534)
Glenn Morris <rgm@gnu.org>
parents:
99965
diff
changeset
|
2397 The first symbol specifies the @samp{mode default} level of |
|
fae812e295b4
(Font Lock Basics): Fix level description. (Bug#1534)
Glenn Morris <rgm@gnu.org>
parents:
99965
diff
changeset
|
2398 fontification, the next symbol level 1 fontification, the next level 2, |
|
fae812e295b4
(Font Lock Basics): Fix level description. (Bug#1534)
Glenn Morris <rgm@gnu.org>
parents:
99965
diff
changeset
|
2399 and so on. The @samp{mode default} level is normally the same as level |
|
fae812e295b4
(Font Lock Basics): Fix level description. (Bug#1534)
Glenn Morris <rgm@gnu.org>
parents:
99965
diff
changeset
|
2400 1. It is used when @code{font-lock-maximum-decoration} has a @code{nil} |
|
fae812e295b4
(Font Lock Basics): Fix level description. (Bug#1534)
Glenn Morris <rgm@gnu.org>
parents:
99965
diff
changeset
|
2401 value. @xref{Levels of Font Lock}. |
| 84089 | 2402 |
| 2403 The second element, @var{keywords-only}, specifies the value of the | |
| 2404 variable @code{font-lock-keywords-only}. If this is omitted or | |
| 2405 @code{nil}, syntactic fontification (of strings and comments) is also | |
| 2406 performed. If this is non-@code{nil}, such fontification is not | |
| 2407 performed. @xref{Syntactic Font Lock}. | |
| 2408 | |
| 2409 The third element, @var{case-fold}, specifies the value of | |
| 2410 @code{font-lock-keywords-case-fold-search}. If it is non-@code{nil}, | |
| 2411 Font Lock mode ignores case when searching as directed by | |
| 2412 @code{font-lock-keywords}. | |
| 2413 | |
| 2414 If the fourth element, @var{syntax-alist}, is non-@code{nil}, it | |
| 2415 should be a list of cons cells of the form @code{(@var{char-or-string} | |
| 2416 . @var{string})}. These are used to set up a syntax table for | |
| 2417 syntactic fontification (@pxref{Syntax Table Functions}). The | |
| 2418 resulting syntax table is stored in @code{font-lock-syntax-table}. | |
| 2419 | |
| 2420 The fifth element, @var{syntax-begin}, specifies the value of | |
| 2421 @code{font-lock-beginning-of-syntax-function}. We recommend setting | |
| 2422 this variable to @code{nil} and using @code{syntax-begin-function} | |
| 2423 instead. | |
| 2424 | |
| 2425 All the remaining elements (if any) are collectively called | |
| 2426 @var{other-vars}. Each of these elements should have the form | |
| 2427 @code{(@var{variable} . @var{value})}---which means, make | |
| 2428 @var{variable} buffer-local and then set it to @var{value}. You can | |
| 2429 use these @var{other-vars} to set other variables that affect | |
| 2430 fontification, aside from those you can control with the first five | |
| 2431 elements. @xref{Other Font Lock Variables}. | |
| 2432 @end defvar | |
| 2433 | |
| 2434 If your mode fontifies text explicitly by adding | |
| 2435 @code{font-lock-face} properties, it can specify @code{(nil t)} for | |
| 2436 @code{font-lock-defaults} to turn off all automatic fontification. | |
| 2437 However, this is not required; it is possible to fontify some things | |
| 2438 using @code{font-lock-face} properties and set up automatic | |
| 2439 fontification for other parts of the text. | |
| 2440 | |
| 2441 @node Search-based Fontification | |
| 2442 @subsection Search-based Fontification | |
| 2443 | |
| 2444 The most important variable for customizing Font Lock mode is | |
| 2445 @code{font-lock-keywords}. It specifies the search criteria for | |
| 2446 search-based fontification. You should specify the value of this | |
| 2447 variable with @var{keywords} in @code{font-lock-defaults}. | |
| 2448 | |
| 2449 @defvar font-lock-keywords | |
| 2450 This variable's value is a list of the keywords to highlight. Be | |
| 2451 careful when composing regular expressions for this list; a poorly | |
| 2452 written pattern can dramatically slow things down! | |
| 2453 @end defvar | |
| 2454 | |
| 2455 Each element of @code{font-lock-keywords} specifies how to find | |
| 2456 certain cases of text, and how to highlight those cases. Font Lock mode | |
| 2457 processes the elements of @code{font-lock-keywords} one by one, and for | |
| 2458 each element, it finds and handles all matches. Ordinarily, once | |
| 2459 part of the text has been fontified already, this cannot be overridden | |
| 2460 by a subsequent match in the same text; but you can specify different | |
| 2461 behavior using the @var{override} element of a @var{subexp-highlighter}. | |
| 2462 | |
| 2463 Each element of @code{font-lock-keywords} should have one of these | |
| 2464 forms: | |
| 2465 | |
| 2466 @table @code | |
| 2467 @item @var{regexp} | |
| 2468 Highlight all matches for @var{regexp} using | |
| 2469 @code{font-lock-keyword-face}. For example, | |
| 2470 | |
| 2471 @example | |
| 2472 ;; @r{Highlight occurrences of the word @samp{foo}} | |
| 2473 ;; @r{using @code{font-lock-keyword-face}.} | |
| 2474 "\\<foo\\>" | |
| 2475 @end example | |
| 2476 | |
| 2477 The function @code{regexp-opt} (@pxref{Regexp Functions}) is useful | |
| 2478 for calculating optimal regular expressions to match a number of | |
| 2479 different keywords. | |
| 2480 | |
| 2481 @item @var{function} | |
| 2482 Find text by calling @var{function}, and highlight the matches | |
| 2483 it finds using @code{font-lock-keyword-face}. | |
| 2484 | |
| 2485 When @var{function} is called, it receives one argument, the limit of | |
| 2486 the search; it should begin searching at point, and not search beyond the | |
| 2487 limit. It should return non-@code{nil} if it succeeds, and set the | |
| 2488 match data to describe the match that was found. Returning @code{nil} | |
| 2489 indicates failure of the search. | |
| 2490 | |
| 2491 Fontification will call @var{function} repeatedly with the same limit, | |
| 2492 and with point where the previous invocation left it, until | |
| 2493 @var{function} fails. On failure, @var{function} need not reset point | |
| 2494 in any particular way. | |
| 2495 | |
| 2496 @item (@var{matcher} . @var{subexp}) | |
| 2497 In this kind of element, @var{matcher} is either a regular | |
| 2498 expression or a function, as described above. The @sc{cdr}, | |
| 2499 @var{subexp}, specifies which subexpression of @var{matcher} should be | |
| 2500 highlighted (instead of the entire text that @var{matcher} matched). | |
| 2501 | |
| 2502 @example | |
| 2503 ;; @r{Highlight the @samp{bar} in each occurrence of @samp{fubar},} | |
| 2504 ;; @r{using @code{font-lock-keyword-face}.} | |
| 2505 ("fu\\(bar\\)" . 1) | |
| 2506 @end example | |
| 2507 | |
| 2508 If you use @code{regexp-opt} to produce the regular expression | |
| 2509 @var{matcher}, you can use @code{regexp-opt-depth} (@pxref{Regexp | |
| 2510 Functions}) to calculate the value for @var{subexp}. | |
| 2511 | |
| 2512 @item (@var{matcher} . @var{facespec}) | |
| 2513 In this kind of element, @var{facespec} is an expression whose value | |
| 2514 specifies the face to use for highlighting. In the simplest case, | |
| 2515 @var{facespec} is a Lisp variable (a symbol) whose value is a face | |
| 2516 name. | |
| 2517 | |
| 2518 @example | |
| 2519 ;; @r{Highlight occurrences of @samp{fubar},} | |
| 2520 ;; @r{using the face which is the value of @code{fubar-face}.} | |
| 2521 ("fubar" . fubar-face) | |
| 2522 @end example | |
| 2523 | |
| 2524 However, @var{facespec} can also evaluate to a list of this form: | |
| 2525 | |
| 2526 @example | |
| 2527 (face @var{face} @var{prop1} @var{val1} @var{prop2} @var{val2}@dots{}) | |
| 2528 @end example | |
| 2529 | |
| 2530 @noindent | |
| 2531 to specify the face @var{face} and various additional text properties | |
| 2532 to put on the text that matches. If you do this, be sure to add the | |
| 2533 other text property names that you set in this way to the value of | |
| 2534 @code{font-lock-extra-managed-props} so that the properties will also | |
| 2535 be cleared out when they are no longer appropriate. Alternatively, | |
| 2536 you can set the variable @code{font-lock-unfontify-region-function} to | |
| 2537 a function that clears these properties. @xref{Other Font Lock | |
| 2538 Variables}. | |
| 2539 | |
| 2540 @item (@var{matcher} . @var{subexp-highlighter}) | |
| 2541 In this kind of element, @var{subexp-highlighter} is a list | |
| 2542 which specifies how to highlight matches found by @var{matcher}. | |
| 2543 It has the form: | |
| 2544 | |
| 2545 @example | |
|
101567
1a1c4c8eb2c8
(Search-based Fontification): Correct a typo.
Alan Mackenzie <acm@muc.de>
parents:
100974
diff
changeset
|
2546 (@var{subexp} @var{facespec} [@var{override} [@var{laxmatch}]]) |
| 84089 | 2547 @end example |
| 2548 | |
| 2549 The @sc{car}, @var{subexp}, is an integer specifying which subexpression | |
| 2550 of the match to fontify (0 means the entire matching text). The second | |
| 2551 subelement, @var{facespec}, is an expression whose value specifies the | |
| 2552 face, as described above. | |
| 2553 | |
| 2554 The last two values in @var{subexp-highlighter}, @var{override} and | |
| 2555 @var{laxmatch}, are optional flags. If @var{override} is @code{t}, | |
| 2556 this element can override existing fontification made by previous | |
| 2557 elements of @code{font-lock-keywords}. If it is @code{keep}, then | |
| 2558 each character is fontified if it has not been fontified already by | |
| 2559 some other element. If it is @code{prepend}, the face specified by | |
| 2560 @var{facespec} is added to the beginning of the @code{font-lock-face} | |
| 2561 property. If it is @code{append}, the face is added to the end of the | |
| 2562 @code{font-lock-face} property. | |
| 2563 | |
| 2564 If @var{laxmatch} is non-@code{nil}, it means there should be no error | |
| 2565 if there is no subexpression numbered @var{subexp} in @var{matcher}. | |
| 2566 Obviously, fontification of the subexpression numbered @var{subexp} will | |
| 2567 not occur. However, fontification of other subexpressions (and other | |
| 2568 regexps) will continue. If @var{laxmatch} is @code{nil}, and the | |
| 2569 specified subexpression is missing, then an error is signaled which | |
| 2570 terminates search-based fontification. | |
| 2571 | |
| 2572 Here are some examples of elements of this kind, and what they do: | |
| 2573 | |
| 2574 @smallexample | |
| 2575 ;; @r{Highlight occurrences of either @samp{foo} or @samp{bar}, using} | |
| 2576 ;; @r{@code{foo-bar-face}, even if they have already been highlighted.} | |
| 2577 ;; @r{@code{foo-bar-face} should be a variable whose value is a face.} | |
| 2578 ("foo\\|bar" 0 foo-bar-face t) | |
| 2579 | |
| 2580 ;; @r{Highlight the first subexpression within each occurrence} | |
| 2581 ;; @r{that the function @code{fubar-match} finds,} | |
| 2582 ;; @r{using the face which is the value of @code{fubar-face}.} | |
| 2583 (fubar-match 1 fubar-face) | |
| 2584 @end smallexample | |
| 2585 | |
| 2586 @item (@var{matcher} . @var{anchored-highlighter}) | |
| 2587 In this kind of element, @var{anchored-highlighter} specifies how to | |
| 2588 highlight text that follows a match found by @var{matcher}. So a | |
| 2589 match found by @var{matcher} acts as the anchor for further searches | |
| 2590 specified by @var{anchored-highlighter}. @var{anchored-highlighter} | |
| 2591 is a list of the following form: | |
| 2592 | |
| 2593 @example | |
| 2594 (@var{anchored-matcher} @var{pre-form} @var{post-form} | |
| 2595 @var{subexp-highlighters}@dots{}) | |
| 2596 @end example | |
| 2597 | |
| 2598 Here, @var{anchored-matcher}, like @var{matcher}, is either a regular | |
| 2599 expression or a function. After a match of @var{matcher} is found, | |
| 2600 point is at the end of the match. Now, Font Lock evaluates the form | |
| 2601 @var{pre-form}. Then it searches for matches of | |
| 2602 @var{anchored-matcher} and uses @var{subexp-highlighters} to highlight | |
| 2603 these. A @var{subexp-highlighter} is as described above. Finally, | |
| 2604 Font Lock evaluates @var{post-form}. | |
| 2605 | |
| 2606 The forms @var{pre-form} and @var{post-form} can be used to initialize | |
| 2607 before, and cleanup after, @var{anchored-matcher} is used. Typically, | |
| 2608 @var{pre-form} is used to move point to some position relative to the | |
| 2609 match of @var{matcher}, before starting with @var{anchored-matcher}. | |
| 2610 @var{post-form} might be used to move back, before resuming with | |
| 2611 @var{matcher}. | |
| 2612 | |
| 2613 After Font Lock evaluates @var{pre-form}, it does not search for | |
| 2614 @var{anchored-matcher} beyond the end of the line. However, if | |
| 2615 @var{pre-form} returns a buffer position that is greater than the | |
| 2616 position of point after @var{pre-form} is evaluated, then the position | |
| 2617 returned by @var{pre-form} is used as the limit of the search instead. | |
| 2618 It is generally a bad idea to return a position greater than the end | |
| 2619 of the line; in other words, the @var{anchored-matcher} search should | |
| 2620 not span lines. | |
| 2621 | |
| 2622 For example, | |
| 2623 | |
| 2624 @smallexample | |
| 2625 ;; @r{Highlight occurrences of the word @samp{item} following} | |
| 2626 ;; @r{an occurrence of the word @samp{anchor} (on the same line)} | |
| 2627 ;; @r{in the value of @code{item-face}.} | |
| 2628 ("\\<anchor\\>" "\\<item\\>" nil nil (0 item-face)) | |
| 2629 @end smallexample | |
| 2630 | |
| 2631 Here, @var{pre-form} and @var{post-form} are @code{nil}. Therefore | |
| 2632 searching for @samp{item} starts at the end of the match of | |
| 2633 @samp{anchor}, and searching for subsequent instances of @samp{anchor} | |
| 2634 resumes from where searching for @samp{item} concluded. | |
| 2635 | |
| 2636 @item (@var{matcher} @var{highlighters}@dots{}) | |
| 2637 This sort of element specifies several @var{highlighter} lists for a | |
| 2638 single @var{matcher}. A @var{highlighter} list can be of the type | |
| 2639 @var{subexp-highlighter} or @var{anchored-highlighter} as described | |
| 2640 above. | |
| 2641 | |
| 2642 For example, | |
| 2643 | |
| 2644 @smallexample | |
| 2645 ;; @r{Highlight occurrences of the word @samp{anchor} in the value} | |
| 2646 ;; @r{of @code{anchor-face}, and subsequent occurrences of the word} | |
| 2647 ;; @r{@samp{item} (on the same line) in the value of @code{item-face}.} | |
| 2648 ("\\<anchor\\>" (0 anchor-face) | |
| 2649 ("\\<item\\>" nil nil (0 item-face))) | |
| 2650 @end smallexample | |
| 2651 | |
| 2652 @item (eval . @var{form}) | |
| 2653 Here @var{form} is an expression to be evaluated the first time | |
| 2654 this value of @code{font-lock-keywords} is used in a buffer. | |
| 2655 Its value should have one of the forms described in this table. | |
| 2656 @end table | |
| 2657 | |
| 2658 @strong{Warning:} Do not design an element of @code{font-lock-keywords} | |
| 2659 to match text which spans lines; this does not work reliably. | |
| 2660 For details, see @xref{Multiline Font Lock}. | |
| 2661 | |
| 2662 You can use @var{case-fold} in @code{font-lock-defaults} to specify | |
| 2663 the value of @code{font-lock-keywords-case-fold-search} which says | |
| 2664 whether search-based fontification should be case-insensitive. | |
| 2665 | |
| 2666 @defvar font-lock-keywords-case-fold-search | |
| 2667 Non-@code{nil} means that regular expression matching for the sake of | |
| 2668 @code{font-lock-keywords} should be case-insensitive. | |
| 2669 @end defvar | |
| 2670 | |
| 2671 @node Customizing Keywords | |
| 2672 @subsection Customizing Search-Based Fontification | |
| 2673 | |
| 2674 You can use @code{font-lock-add-keywords} to add additional | |
| 2675 search-based fontification rules to a major mode, and | |
|
102151
328f4b370b74
Remove duplicate words.
Juanma Barranquero <lekktu@gmail.com>
parents:
101567
diff
changeset
|
2676 @code{font-lock-remove-keywords} to remove rules. |
| 84089 | 2677 |
| 2678 @defun font-lock-add-keywords mode keywords &optional how | |
| 2679 This function adds highlighting @var{keywords}, for the current buffer | |
| 2680 or for major mode @var{mode}. The argument @var{keywords} should be a | |
| 2681 list with the same format as the variable @code{font-lock-keywords}. | |
| 2682 | |
| 2683 If @var{mode} is a symbol which is a major mode command name, such as | |
| 2684 @code{c-mode}, the effect is that enabling Font Lock mode in | |
| 2685 @var{mode} will add @var{keywords} to @code{font-lock-keywords}. | |
| 2686 Calling with a non-@code{nil} value of @var{mode} is correct only in | |
| 2687 your @file{~/.emacs} file. | |
| 2688 | |
| 2689 If @var{mode} is @code{nil}, this function adds @var{keywords} to | |
| 2690 @code{font-lock-keywords} in the current buffer. This way of calling | |
| 2691 @code{font-lock-add-keywords} is usually used in mode hook functions. | |
| 2692 | |
| 2693 By default, @var{keywords} are added at the beginning of | |
| 2694 @code{font-lock-keywords}. If the optional argument @var{how} is | |
| 2695 @code{set}, they are used to replace the value of | |
| 2696 @code{font-lock-keywords}. If @var{how} is any other non-@code{nil} | |
| 2697 value, they are added at the end of @code{font-lock-keywords}. | |
| 2698 | |
| 2699 Some modes provide specialized support you can use in additional | |
| 2700 highlighting patterns. See the variables | |
| 2701 @code{c-font-lock-extra-types}, @code{c++-font-lock-extra-types}, | |
| 2702 and @code{java-font-lock-extra-types}, for example. | |
| 2703 | |
| 2704 @strong{Warning:} major mode functions must not call | |
| 2705 @code{font-lock-add-keywords} under any circumstances, either directly | |
| 2706 or indirectly, except through their mode hooks. (Doing so would lead | |
| 2707 to incorrect behavior for some minor modes.) They should set up their | |
| 2708 rules for search-based fontification by setting | |
| 2709 @code{font-lock-keywords}. | |
| 2710 @end defun | |
| 2711 | |
| 2712 @defun font-lock-remove-keywords mode keywords | |
| 2713 This function removes @var{keywords} from @code{font-lock-keywords} | |
| 2714 for the current buffer or for major mode @var{mode}. As in | |
| 2715 @code{font-lock-add-keywords}, @var{mode} should be a major mode | |
| 2716 command name or @code{nil}. All the caveats and requirements for | |
| 2717 @code{font-lock-add-keywords} apply here too. | |
| 2718 @end defun | |
| 2719 | |
| 2720 For example, this code | |
| 2721 | |
| 2722 @smallexample | |
| 2723 (font-lock-add-keywords 'c-mode | |
| 2724 '(("\\<\\(FIXME\\):" 1 font-lock-warning-face prepend) | |
| 2725 ("\\<\\(and\\|or\\|not\\)\\>" . font-lock-keyword-face))) | |
| 2726 @end smallexample | |
| 2727 | |
| 2728 @noindent | |
| 2729 adds two fontification patterns for C mode: one to fontify the word | |
| 2730 @samp{FIXME}, even in comments, and another to fontify the words | |
| 2731 @samp{and}, @samp{or} and @samp{not} as keywords. | |
| 2732 | |
| 2733 @noindent | |
| 2734 That example affects only C mode proper. To add the same patterns to | |
| 2735 C mode @emph{and} all modes derived from it, do this instead: | |
| 2736 | |
| 2737 @smallexample | |
| 2738 (add-hook 'c-mode-hook | |
| 2739 (lambda () | |
| 2740 (font-lock-add-keywords nil | |
| 2741 '(("\\<\\(FIXME\\):" 1 font-lock-warning-face prepend) | |
| 2742 ("\\<\\(and\\|or\\|not\\)\\>" . | |
| 2743 font-lock-keyword-face))))) | |
| 2744 @end smallexample | |
| 2745 | |
| 2746 @node Other Font Lock Variables | |
| 2747 @subsection Other Font Lock Variables | |
| 2748 | |
| 2749 This section describes additional variables that a major mode can | |
| 2750 set by means of @var{other-vars} in @code{font-lock-defaults} | |
| 2751 (@pxref{Font Lock Basics}). | |
| 2752 | |
| 2753 @defvar font-lock-mark-block-function | |
| 2754 If this variable is non-@code{nil}, it should be a function that is | |
| 2755 called with no arguments, to choose an enclosing range of text for | |
| 2756 refontification for the command @kbd{M-o M-o} | |
| 2757 (@code{font-lock-fontify-block}). | |
| 2758 | |
| 2759 The function should report its choice by placing the region around it. | |
| 2760 A good choice is a range of text large enough to give proper results, | |
| 2761 but not too large so that refontification becomes slow. Typical values | |
| 2762 are @code{mark-defun} for programming modes or @code{mark-paragraph} for | |
| 2763 textual modes. | |
| 2764 @end defvar | |
| 2765 | |
| 2766 @defvar font-lock-extra-managed-props | |
| 2767 This variable specifies additional properties (other than | |
| 2768 @code{font-lock-face}) that are being managed by Font Lock mode. It | |
| 2769 is used by @code{font-lock-default-unfontify-region}, which normally | |
| 2770 only manages the @code{font-lock-face} property. If you want Font | |
| 2771 Lock to manage other properties as well, you must specify them in a | |
| 2772 @var{facespec} in @code{font-lock-keywords} as well as add them to | |
| 2773 this list. @xref{Search-based Fontification}. | |
| 2774 @end defvar | |
| 2775 | |
| 2776 @defvar font-lock-fontify-buffer-function | |
| 2777 Function to use for fontifying the buffer. The default value is | |
| 2778 @code{font-lock-default-fontify-buffer}. | |
| 2779 @end defvar | |
| 2780 | |
| 2781 @defvar font-lock-unfontify-buffer-function | |
| 2782 Function to use for unfontifying the buffer. This is used when | |
| 2783 turning off Font Lock mode. The default value is | |
| 2784 @code{font-lock-default-unfontify-buffer}. | |
| 2785 @end defvar | |
| 2786 | |
| 2787 @defvar font-lock-fontify-region-function | |
| 2788 Function to use for fontifying a region. It should take two | |
| 2789 arguments, the beginning and end of the region, and an optional third | |
| 2790 argument @var{verbose}. If @var{verbose} is non-@code{nil}, the | |
| 2791 function should print status messages. The default value is | |
| 2792 @code{font-lock-default-fontify-region}. | |
| 2793 @end defvar | |
| 2794 | |
| 2795 @defvar font-lock-unfontify-region-function | |
| 2796 Function to use for unfontifying a region. It should take two | |
| 2797 arguments, the beginning and end of the region. The default value is | |
| 2798 @code{font-lock-default-unfontify-region}. | |
| 2799 @end defvar | |
| 2800 | |
|
99694
7d1d2a142ab5
(Other Font Lock Variables): Document jit-lock-register and
Chong Yidong <cyd@stupidchicken.com>
parents:
98729
diff
changeset
|
2801 @defun jit-lock-register function &optional contextual |
|
7d1d2a142ab5
(Other Font Lock Variables): Document jit-lock-register and
Chong Yidong <cyd@stupidchicken.com>
parents:
98729
diff
changeset
|
2802 This function tells Font Lock mode to run the Lisp function |
|
7d1d2a142ab5
(Other Font Lock Variables): Document jit-lock-register and
Chong Yidong <cyd@stupidchicken.com>
parents:
98729
diff
changeset
|
2803 @var{function} any time it has to fontify or refontify part of the |
|
7d1d2a142ab5
(Other Font Lock Variables): Document jit-lock-register and
Chong Yidong <cyd@stupidchicken.com>
parents:
98729
diff
changeset
|
2804 current buffer. It calls @var{function} before calling the default |
|
7d1d2a142ab5
(Other Font Lock Variables): Document jit-lock-register and
Chong Yidong <cyd@stupidchicken.com>
parents:
98729
diff
changeset
|
2805 fontification functions, and gives it two arguments, @var{start} and |
|
7d1d2a142ab5
(Other Font Lock Variables): Document jit-lock-register and
Chong Yidong <cyd@stupidchicken.com>
parents:
98729
diff
changeset
|
2806 @var{end}, which specify the region to be fontified or refontified. |
|
7d1d2a142ab5
(Other Font Lock Variables): Document jit-lock-register and
Chong Yidong <cyd@stupidchicken.com>
parents:
98729
diff
changeset
|
2807 |
|
7d1d2a142ab5
(Other Font Lock Variables): Document jit-lock-register and
Chong Yidong <cyd@stupidchicken.com>
parents:
98729
diff
changeset
|
2808 The optional argument @var{contextual}, if non-@code{nil}, forces Font |
|
7d1d2a142ab5
(Other Font Lock Variables): Document jit-lock-register and
Chong Yidong <cyd@stupidchicken.com>
parents:
98729
diff
changeset
|
2809 Lock mode to always refontify a syntactically relevant part of the |
|
7d1d2a142ab5
(Other Font Lock Variables): Document jit-lock-register and
Chong Yidong <cyd@stupidchicken.com>
parents:
98729
diff
changeset
|
2810 buffer, and not just the modified lines. This argument can usually be |
|
7d1d2a142ab5
(Other Font Lock Variables): Document jit-lock-register and
Chong Yidong <cyd@stupidchicken.com>
parents:
98729
diff
changeset
|
2811 omitted. |
|
7d1d2a142ab5
(Other Font Lock Variables): Document jit-lock-register and
Chong Yidong <cyd@stupidchicken.com>
parents:
98729
diff
changeset
|
2812 @end defun |
|
7d1d2a142ab5
(Other Font Lock Variables): Document jit-lock-register and
Chong Yidong <cyd@stupidchicken.com>
parents:
98729
diff
changeset
|
2813 |
|
7d1d2a142ab5
(Other Font Lock Variables): Document jit-lock-register and
Chong Yidong <cyd@stupidchicken.com>
parents:
98729
diff
changeset
|
2814 @defun jit-lock-unregister function |
|
7d1d2a142ab5
(Other Font Lock Variables): Document jit-lock-register and
Chong Yidong <cyd@stupidchicken.com>
parents:
98729
diff
changeset
|
2815 If @var{function} was previously registered as a fontification |
|
7d1d2a142ab5
(Other Font Lock Variables): Document jit-lock-register and
Chong Yidong <cyd@stupidchicken.com>
parents:
98729
diff
changeset
|
2816 function using @code{jit-lock-register}, this function unregisters it. |
|
7d1d2a142ab5
(Other Font Lock Variables): Document jit-lock-register and
Chong Yidong <cyd@stupidchicken.com>
parents:
98729
diff
changeset
|
2817 @end defun |
| 84089 | 2818 |
| 2819 @node Levels of Font Lock | |
| 2820 @subsection Levels of Font Lock | |
| 2821 | |
| 2822 Many major modes offer three different levels of fontification. You | |
| 2823 can define multiple levels by using a list of symbols for @var{keywords} | |
| 2824 in @code{font-lock-defaults}. Each symbol specifies one level of | |
|
100386
fae812e295b4
(Font Lock Basics): Fix level description. (Bug#1534)
Glenn Morris <rgm@gnu.org>
parents:
99965
diff
changeset
|
2825 fontification; it is up to the user to choose one of these levels, |
|
fae812e295b4
(Font Lock Basics): Fix level description. (Bug#1534)
Glenn Morris <rgm@gnu.org>
parents:
99965
diff
changeset
|
2826 normally by setting @code{font-lock-maximum-decoration} (@pxref{Font |
|
fae812e295b4
(Font Lock Basics): Fix level description. (Bug#1534)
Glenn Morris <rgm@gnu.org>
parents:
99965
diff
changeset
|
2827 Lock,,, emacs, the GNU Emacs Manual}). The chosen level's symbol |
|
fae812e295b4
(Font Lock Basics): Fix level description. (Bug#1534)
Glenn Morris <rgm@gnu.org>
parents:
99965
diff
changeset
|
2828 value is used to initialize @code{font-lock-keywords}. |
| 84089 | 2829 |
| 2830 Here are the conventions for how to define the levels of | |
| 2831 fontification: | |
| 2832 | |
| 2833 @itemize @bullet | |
| 2834 @item | |
| 2835 Level 1: highlight function declarations, file directives (such as include or | |
| 2836 import directives), strings and comments. The idea is speed, so only | |
| 2837 the most important and top-level components are fontified. | |
| 2838 | |
| 2839 @item | |
| 2840 Level 2: in addition to level 1, highlight all language keywords, | |
| 2841 including type names that act like keywords, as well as named constant | |
| 2842 values. The idea is that all keywords (either syntactic or semantic) | |
| 2843 should be fontified appropriately. | |
| 2844 | |
| 2845 @item | |
| 2846 Level 3: in addition to level 2, highlight the symbols being defined in | |
| 2847 function and variable declarations, and all builtin function names, | |
| 2848 wherever they appear. | |
| 2849 @end itemize | |
| 2850 | |
| 2851 @node Precalculated Fontification | |
| 2852 @subsection Precalculated Fontification | |
| 2853 | |
|
103238
074577abd4d1
* modes.texi (Precalculated Fontification): Clarify text.
Richard M. Stallman <rms@gnu.org>
parents:
102775
diff
changeset
|
2854 Some major modes such as @code{list-buffers} and @code{occur} |
|
074577abd4d1
* modes.texi (Precalculated Fontification): Clarify text.
Richard M. Stallman <rms@gnu.org>
parents:
102775
diff
changeset
|
2855 construct the buffer text programmatically. The easiest way for them |
|
074577abd4d1
* modes.texi (Precalculated Fontification): Clarify text.
Richard M. Stallman <rms@gnu.org>
parents:
102775
diff
changeset
|
2856 to support Font Lock mode is to specify the faces of text when they |
|
074577abd4d1
* modes.texi (Precalculated Fontification): Clarify text.
Richard M. Stallman <rms@gnu.org>
parents:
102775
diff
changeset
|
2857 insert the text in the buffer. |
|
074577abd4d1
* modes.texi (Precalculated Fontification): Clarify text.
Richard M. Stallman <rms@gnu.org>
parents:
102775
diff
changeset
|
2858 |
|
074577abd4d1
* modes.texi (Precalculated Fontification): Clarify text.
Richard M. Stallman <rms@gnu.org>
parents:
102775
diff
changeset
|
2859 The way to do this is to specify the faces in the text with the |
|
074577abd4d1
* modes.texi (Precalculated Fontification): Clarify text.
Richard M. Stallman <rms@gnu.org>
parents:
102775
diff
changeset
|
2860 special text property @code{font-lock-face} (@pxref{Special |
|
074577abd4d1
* modes.texi (Precalculated Fontification): Clarify text.
Richard M. Stallman <rms@gnu.org>
parents:
102775
diff
changeset
|
2861 Properties}). When Font Lock mode is enabled, this property controls |
|
074577abd4d1
* modes.texi (Precalculated Fontification): Clarify text.
Richard M. Stallman <rms@gnu.org>
parents:
102775
diff
changeset
|
2862 the display, just like the @code{face} property. When Font Lock mode |
|
074577abd4d1
* modes.texi (Precalculated Fontification): Clarify text.
Richard M. Stallman <rms@gnu.org>
parents:
102775
diff
changeset
|
2863 is disabled, @code{font-lock-face} has no effect on the display. |
|
074577abd4d1
* modes.texi (Precalculated Fontification): Clarify text.
Richard M. Stallman <rms@gnu.org>
parents:
102775
diff
changeset
|
2864 |
|
074577abd4d1
* modes.texi (Precalculated Fontification): Clarify text.
Richard M. Stallman <rms@gnu.org>
parents:
102775
diff
changeset
|
2865 It is ok for a mode to use @code{font-lock-face} for some text and |
|
074577abd4d1
* modes.texi (Precalculated Fontification): Clarify text.
Richard M. Stallman <rms@gnu.org>
parents:
102775
diff
changeset
|
2866 also use the normal Font Lock machinery. But if the mode does not use |
|
074577abd4d1
* modes.texi (Precalculated Fontification): Clarify text.
Richard M. Stallman <rms@gnu.org>
parents:
102775
diff
changeset
|
2867 the normal Font Lock machinery, it should not set the variable |
|
074577abd4d1
* modes.texi (Precalculated Fontification): Clarify text.
Richard M. Stallman <rms@gnu.org>
parents:
102775
diff
changeset
|
2868 @code{font-lock-defaults}. |
| 84089 | 2869 |
| 2870 @node Faces for Font Lock | |
| 2871 @subsection Faces for Font Lock | |
| 2872 @cindex faces for font lock | |
| 2873 @cindex font lock faces | |
| 2874 | |
| 2875 You can make Font Lock mode use any face, but several faces are | |
| 2876 defined specifically for Font Lock mode. Each of these symbols is both | |
| 2877 a face name, and a variable whose default value is the symbol itself. | |
| 2878 Thus, the default value of @code{font-lock-comment-face} is | |
| 2879 @code{font-lock-comment-face}. This means you can write | |
| 2880 @code{font-lock-comment-face} in a context such as | |
| 2881 @code{font-lock-keywords} where a face-name-valued expression is used. | |
| 2882 | |
| 2883 @table @code | |
| 2884 @item font-lock-comment-face | |
| 2885 @vindex font-lock-comment-face | |
| 2886 Used (typically) for comments. | |
| 2887 | |
| 2888 @item font-lock-comment-delimiter-face | |
| 2889 @vindex font-lock-comment-delimiter-face | |
| 2890 Used (typically) for comments delimiters. | |
| 2891 | |
| 2892 @item font-lock-doc-face | |
| 2893 @vindex font-lock-doc-face | |
| 2894 Used (typically) for documentation strings in the code. | |
| 2895 | |
| 2896 @item font-lock-string-face | |
| 2897 @vindex font-lock-string-face | |
| 2898 Used (typically) for string constants. | |
| 2899 | |
| 2900 @item font-lock-keyword-face | |
| 2901 @vindex font-lock-keyword-face | |
| 2902 Used (typically) for keywords---names that have special syntactic | |
| 2903 significance, like @code{for} and @code{if} in C. | |
| 2904 | |
| 2905 @item font-lock-builtin-face | |
| 2906 @vindex font-lock-builtin-face | |
| 2907 Used (typically) for built-in function names. | |
| 2908 | |
| 2909 @item font-lock-function-name-face | |
| 2910 @vindex font-lock-function-name-face | |
| 2911 Used (typically) for the name of a function being defined or declared, | |
| 2912 in a function definition or declaration. | |
| 2913 | |
| 2914 @item font-lock-variable-name-face | |
| 2915 @vindex font-lock-variable-name-face | |
| 2916 Used (typically) for the name of a variable being defined or declared, | |
| 2917 in a variable definition or declaration. | |
| 2918 | |
| 2919 @item font-lock-type-face | |
| 2920 @vindex font-lock-type-face | |
| 2921 Used (typically) for names of user-defined data types, | |
| 2922 where they are defined and where they are used. | |
| 2923 | |
| 2924 @item font-lock-constant-face | |
| 2925 @vindex font-lock-constant-face | |
| 2926 Used (typically) for constant names. | |
| 2927 | |
| 2928 @item font-lock-preprocessor-face | |
| 2929 @vindex font-lock-preprocessor-face | |
| 2930 Used (typically) for preprocessor commands. | |
| 2931 | |
| 2932 @item font-lock-negation-char-face | |
| 2933 @vindex font-lock-negation-char-face | |
| 2934 Used (typically) for easily-overlooked negation characters. | |
| 2935 | |
| 2936 @item font-lock-warning-face | |
| 2937 @vindex font-lock-warning-face | |
| 2938 Used (typically) for constructs that are peculiar, or that greatly | |
| 2939 change the meaning of other text. For example, this is used for | |
| 2940 @samp{;;;###autoload} cookies in Emacs Lisp, and for @code{#error} | |
| 2941 directives in C. | |
| 2942 @end table | |
| 2943 | |
| 2944 @node Syntactic Font Lock | |
| 2945 @subsection Syntactic Font Lock | |
| 2946 @cindex syntactic font lock | |
| 2947 | |
| 2948 Syntactic fontification uses the syntax table to find comments and | |
| 2949 string constants (@pxref{Syntax Tables}). It highlights them using | |
| 2950 @code{font-lock-comment-face} and @code{font-lock-string-face} | |
| 2951 (@pxref{Faces for Font Lock}), or whatever | |
| 2952 @code{font-lock-syntactic-face-function} chooses. There are several | |
| 2953 variables that affect syntactic fontification; you should set them by | |
| 2954 means of @code{font-lock-defaults} (@pxref{Font Lock Basics}). | |
| 2955 | |
| 2956 @defvar font-lock-keywords-only | |
| 2957 Non-@code{nil} means Font Lock should not do syntactic fontification; | |
| 2958 it should only fontify based on @code{font-lock-keywords}. The normal | |
| 2959 way for a mode to set this variable to @code{t} is with | |
| 2960 @var{keywords-only} in @code{font-lock-defaults}. | |
| 2961 @end defvar | |
| 2962 | |
| 2963 @defvar font-lock-syntax-table | |
| 2964 This variable holds the syntax table to use for fontification of | |
| 2965 comments and strings. Specify it using @var{syntax-alist} in | |
| 2966 @code{font-lock-defaults}. If this is @code{nil}, fontification uses | |
| 2967 the buffer's syntax table. | |
| 2968 @end defvar | |
| 2969 | |
| 2970 @defvar font-lock-beginning-of-syntax-function | |
| 2971 If this variable is non-@code{nil}, it should be a function to move | |
| 2972 point back to a position that is syntactically at ``top level'' and | |
| 2973 outside of strings or comments. Font Lock uses this when necessary | |
| 2974 to get the right results for syntactic fontification. | |
| 2975 | |
| 2976 This function is called with no arguments. It should leave point at | |
| 2977 the beginning of any enclosing syntactic block. Typical values are | |
| 2978 @code{beginning-of-line} (used when the start of the line is known to | |
| 2979 be outside a syntactic block), or @code{beginning-of-defun} for | |
| 2980 programming modes, or @code{backward-paragraph} for textual modes. | |
| 2981 | |
| 2982 If the value is @code{nil}, Font Lock uses | |
| 2983 @code{syntax-begin-function} to move back outside of any comment, | |
| 2984 string, or sexp. This variable is semi-obsolete; we recommend setting | |
| 2985 @code{syntax-begin-function} instead. | |
| 2986 | |
| 2987 Specify this variable using @var{syntax-begin} in | |
| 2988 @code{font-lock-defaults}. | |
| 2989 @end defvar | |
| 2990 | |
| 2991 @defvar font-lock-syntactic-face-function | |
| 2992 A function to determine which face to use for a given syntactic | |
| 2993 element (a string or a comment). The function is called with one | |
| 2994 argument, the parse state at point returned by | |
| 2995 @code{parse-partial-sexp}, and should return a face. The default | |
| 2996 value returns @code{font-lock-comment-face} for comments and | |
| 2997 @code{font-lock-string-face} for strings. | |
| 2998 | |
| 2999 This can be used to highlighting different kinds of strings or | |
| 3000 comments differently. It is also sometimes abused together with | |
| 3001 @code{font-lock-syntactic-keywords} to highlight constructs that span | |
| 3002 multiple lines, but this is too esoteric to document here. | |
| 3003 | |
| 3004 Specify this variable using @var{other-vars} in | |
| 3005 @code{font-lock-defaults}. | |
| 3006 @end defvar | |
| 3007 | |
| 3008 @node Setting Syntax Properties | |
| 3009 @subsection Setting Syntax Properties | |
| 3010 | |
| 3011 Font Lock mode can be used to update @code{syntax-table} properties | |
| 3012 automatically (@pxref{Syntax Properties}). This is useful in | |
| 3013 languages for which a single syntax table by itself is not sufficient. | |
| 3014 | |
| 3015 @defvar font-lock-syntactic-keywords | |
| 3016 This variable enables and controls updating @code{syntax-table} | |
| 3017 properties by Font Lock. Its value should be a list of elements of | |
| 3018 this form: | |
| 3019 | |
| 3020 @example | |
| 3021 (@var{matcher} @var{subexp} @var{syntax} @var{override} @var{laxmatch}) | |
| 3022 @end example | |
| 3023 | |
| 3024 The parts of this element have the same meanings as in the corresponding | |
| 3025 sort of element of @code{font-lock-keywords}, | |
| 3026 | |
| 3027 @example | |
| 3028 (@var{matcher} @var{subexp} @var{facespec} @var{override} @var{laxmatch}) | |
| 3029 @end example | |
| 3030 | |
| 3031 However, instead of specifying the value @var{facespec} to use for the | |
| 3032 @code{face} property, it specifies the value @var{syntax} to use for | |
| 3033 the @code{syntax-table} property. Here, @var{syntax} can be a string | |
| 3034 (as taken by @code{modify-syntax-entry}), a syntax table, a cons cell | |
| 3035 (as returned by @code{string-to-syntax}), or an expression whose value | |
| 3036 is one of those two types. @var{override} cannot be @code{prepend} or | |
| 3037 @code{append}. | |
| 3038 | |
| 3039 For example, an element of the form: | |
| 3040 | |
| 3041 @example | |
| 3042 ("\\$\\(#\\)" 1 ".") | |
| 3043 @end example | |
| 3044 | |
| 3045 highlights syntactically a hash character when following a dollar | |
| 3046 character, with a SYNTAX of @code{"."} (meaning punctuation syntax). | |
| 3047 Assuming that the buffer syntax table specifies hash characters to | |
| 3048 have comment start syntax, the element will only highlight hash | |
| 3049 characters that do not follow dollar characters as comments | |
| 3050 syntactically. | |
| 3051 | |
| 3052 An element of the form: | |
| 3053 | |
| 3054 @example | |
| 3055 ("\\('\\).\\('\\)" | |
| 3056 (1 "\"") | |
| 3057 (2 "\"")) | |
| 3058 @end example | |
| 3059 | |
| 3060 highlights syntactically both single quotes which surround a single | |
| 3061 character, with a SYNTAX of @code{"\""} (meaning string quote syntax). | |
| 3062 Assuming that the buffer syntax table does not specify single quotes | |
| 3063 to have quote syntax, the element will only highlight single quotes of | |
| 3064 the form @samp{'@var{c}'} as strings syntactically. Other forms, such | |
| 3065 as @samp{foo'bar} or @samp{'fubar'}, will not be highlighted as | |
| 3066 strings. | |
| 3067 | |
| 3068 Major modes normally set this variable with @var{other-vars} in | |
| 3069 @code{font-lock-defaults}. | |
| 3070 @end defvar | |
| 3071 | |
| 3072 @node Multiline Font Lock | |
| 3073 @subsection Multiline Font Lock Constructs | |
| 3074 @cindex multiline font lock | |
| 3075 | |
| 3076 Normally, elements of @code{font-lock-keywords} should not match | |
| 3077 across multiple lines; that doesn't work reliably, because Font Lock | |
| 3078 usually scans just part of the buffer, and it can miss a multi-line | |
| 3079 construct that crosses the line boundary where the scan starts. (The | |
| 3080 scan normally starts at the beginning of a line.) | |
| 3081 | |
| 3082 Making elements that match multiline constructs work properly has | |
| 3083 two aspects: correct @emph{identification} and correct | |
| 3084 @emph{rehighlighting}. The first means that Font Lock finds all | |
| 3085 multiline constructs. The second means that Font Lock will correctly | |
| 3086 rehighlight all the relevant text when a multiline construct is | |
| 3087 changed---for example, if some of the text that was previously part of | |
| 3088 a multiline construct ceases to be part of it. The two aspects are | |
| 3089 closely related, and often getting one of them to work will appear to | |
| 3090 make the other also work. However, for reliable results you must | |
| 3091 attend explicitly to both aspects. | |
| 3092 | |
| 3093 There are three ways to ensure correct identification of multiline | |
| 3094 constructs: | |
| 3095 | |
| 3096 @itemize | |
| 3097 @item | |
| 3098 Add a function to @code{font-lock-extend-region-functions} that does | |
| 3099 the @emph{identification} and extends the scan so that the scanned | |
| 3100 text never starts or ends in the middle of a multiline construct. | |
| 3101 @item | |
| 3102 Use the @code{font-lock-fontify-region-function} hook similarly to | |
| 3103 extend the scan so that the scanned text never starts or ends in the | |
| 3104 middle of a multiline construct. | |
| 3105 @item | |
| 3106 Somehow identify the multiline construct right when it gets inserted | |
| 3107 into the buffer (or at any point after that but before font-lock | |
| 3108 tries to highlight it), and mark it with a @code{font-lock-multiline} | |
| 3109 which will instruct font-lock not to start or end the scan in the | |
| 3110 middle of the construct. | |
| 3111 @end itemize | |
| 3112 | |
| 3113 There are three ways to do rehighlighting of multiline constructs: | |
| 3114 | |
| 3115 @itemize | |
| 3116 @item | |
| 3117 Place a @code{font-lock-multiline} property on the construct. This | |
| 3118 will rehighlight the whole construct if any part of it is changed. In | |
| 3119 some cases you can do this automatically by setting the | |
| 3120 @code{font-lock-multiline} variable, which see. | |
| 3121 @item | |
| 3122 Make sure @code{jit-lock-contextually} is set and rely on it doing its | |
| 3123 job. This will only rehighlight the part of the construct that | |
| 3124 follows the actual change, and will do it after a short delay. | |
| 3125 This only works if the highlighting of the various parts of your | |
| 3126 multiline construct never depends on text in subsequent lines. | |
| 3127 Since @code{jit-lock-contextually} is activated by default, this can | |
| 3128 be an attractive solution. | |
| 3129 @item | |
| 3130 Place a @code{jit-lock-defer-multiline} property on the construct. | |
| 3131 This works only if @code{jit-lock-contextually} is used, and with the | |
| 3132 same delay before rehighlighting, but like @code{font-lock-multiline}, | |
| 3133 it also handles the case where highlighting depends on | |
| 3134 subsequent lines. | |
| 3135 @end itemize | |
| 3136 | |
| 3137 @menu | |
|
103821
6595a0b7f418
(Multiline Font Lock): End menu description with period.
Glenn Morris <rgm@gnu.org>
parents:
103273
diff
changeset
|
3138 * Font Lock Multiline:: Marking multiline chunks with a text property. |
| 84089 | 3139 * Region to Fontify:: Controlling which region gets refontified |
| 3140 after a buffer change. | |
| 3141 @end menu | |
| 3142 | |
| 3143 @node Font Lock Multiline | |
| 3144 @subsubsection Font Lock Multiline | |
| 3145 | |
| 3146 One way to ensure reliable rehighlighting of multiline Font Lock | |
| 3147 constructs is to put on them the text property @code{font-lock-multiline}. | |
| 3148 It should be present and non-@code{nil} for text that is part of a | |
| 3149 multiline construct. | |
| 3150 | |
| 3151 When Font Lock is about to highlight a range of text, it first | |
| 3152 extends the boundaries of the range as necessary so that they do not | |
| 3153 fall within text marked with the @code{font-lock-multiline} property. | |
| 3154 Then it removes any @code{font-lock-multiline} properties from the | |
| 3155 range, and highlights it. The highlighting specification (mostly | |
| 3156 @code{font-lock-keywords}) must reinstall this property each time, | |
| 3157 whenever it is appropriate. | |
| 3158 | |
| 3159 @strong{Warning:} don't use the @code{font-lock-multiline} property | |
| 3160 on large ranges of text, because that will make rehighlighting slow. | |
| 3161 | |
| 3162 @defvar font-lock-multiline | |
| 3163 If the @code{font-lock-multiline} variable is set to @code{t}, Font | |
| 3164 Lock will try to add the @code{font-lock-multiline} property | |
| 3165 automatically on multiline constructs. This is not a universal | |
| 3166 solution, however, since it slows down Font Lock somewhat. It can | |
| 3167 miss some multiline constructs, or make the property larger or smaller | |
| 3168 than necessary. | |
| 3169 | |
| 3170 For elements whose @var{matcher} is a function, the function should | |
| 3171 ensure that submatch 0 covers the whole relevant multiline construct, | |
| 3172 even if only a small subpart will be highlighted. It is often just as | |
| 3173 easy to add the @code{font-lock-multiline} property by hand. | |
| 3174 @end defvar | |
| 3175 | |
| 3176 The @code{font-lock-multiline} property is meant to ensure proper | |
| 3177 refontification; it does not automatically identify new multiline | |
| 3178 constructs. Identifying the requires that Font-Lock operate on large | |
| 3179 enough chunks at a time. This will happen by accident on many cases, | |
| 3180 which may give the impression that multiline constructs magically work. | |
| 3181 If you set the @code{font-lock-multiline} variable non-@code{nil}, | |
| 3182 this impression will be even stronger, since the highlighting of those | |
| 3183 constructs which are found will be properly updated from then on. | |
| 3184 But that does not work reliably. | |
| 3185 | |
| 3186 To find multiline constructs reliably, you must either manually | |
| 3187 place the @code{font-lock-multiline} property on the text before | |
| 3188 Font-Lock looks at it, or use | |
| 3189 @code{font-lock-fontify-region-function}. | |
| 3190 | |
| 3191 @node Region to Fontify | |
| 3192 @subsubsection Region to Fontify after a Buffer Change | |
| 3193 | |
| 3194 When a buffer is changed, the region that Font Lock refontifies is | |
| 3195 by default the smallest sequence of whole lines that spans the change. | |
| 3196 While this works well most of the time, sometimes it doesn't---for | |
| 3197 example, when a change alters the syntactic meaning of text on an | |
| 3198 earlier line. | |
| 3199 | |
| 3200 You can enlarge (or even reduce) the region to fontify by setting | |
| 3201 one the following variables: | |
| 3202 | |
| 3203 @defvar font-lock-extend-after-change-region-function | |
| 3204 This buffer-local variable is either @code{nil} or a function for | |
| 3205 Font-Lock to call to determine the region to scan and fontify. | |
| 3206 | |
| 3207 The function is given three parameters, the standard @var{beg}, | |
| 3208 @var{end}, and @var{old-len} from after-change-functions | |
| 3209 (@pxref{Change Hooks}). It should return either a cons of the | |
| 3210 beginning and end buffer positions (in that order) of the region to | |
| 3211 fontify, or @code{nil} (which means choose the region in the standard | |
| 3212 way). This function needs to preserve point, the match-data, and the | |
| 3213 current restriction. The region it returns may start or end in the | |
| 3214 middle of a line. | |
| 3215 | |
| 3216 Since this function is called after every buffer change, it should be | |
| 3217 reasonably fast. | |
| 3218 @end defvar | |
| 3219 | |
| 3220 @node Desktop Save Mode | |
| 3221 @section Desktop Save Mode | |
| 3222 @cindex desktop save mode | |
| 3223 | |
| 3224 @dfn{Desktop Save Mode} is a feature to save the state of Emacs from | |
| 3225 one session to another. The user-level commands for using Desktop | |
| 3226 Save Mode are described in the GNU Emacs Manual (@pxref{Saving Emacs | |
| 3227 Sessions,,, emacs, the GNU Emacs Manual}). Modes whose buffers visit | |
| 3228 a file, don't have to do anything to use this feature. | |
| 3229 | |
| 3230 For buffers not visiting a file to have their state saved, the major | |
| 3231 mode must bind the buffer local variable @code{desktop-save-buffer} to | |
| 3232 a non-@code{nil} value. | |
| 3233 | |
| 3234 @defvar desktop-save-buffer | |
| 3235 If this buffer-local variable is non-@code{nil}, the buffer will have | |
| 3236 its state saved in the desktop file at desktop save. If the value is | |
| 3237 a function, it is called at desktop save with argument | |
| 3238 @var{desktop-dirname}, and its value is saved in the desktop file along | |
| 3239 with the state of the buffer for which it was called. When file names | |
| 3240 are returned as part of the auxiliary information, they should be | |
| 3241 formatted using the call | |
| 3242 | |
| 3243 @example | |
| 3244 (desktop-file-name @var{file-name} @var{desktop-dirname}) | |
| 3245 @end example | |
| 3246 | |
| 3247 @end defvar | |
| 3248 | |
| 3249 For buffers not visiting a file to be restored, the major mode must | |
| 3250 define a function to do the job, and that function must be listed in | |
| 3251 the alist @code{desktop-buffer-mode-handlers}. | |
| 3252 | |
| 3253 @defvar desktop-buffer-mode-handlers | |
| 3254 Alist with elements | |
| 3255 | |
| 3256 @example | |
| 3257 (@var{major-mode} . @var{restore-buffer-function}) | |
| 3258 @end example | |
| 3259 | |
| 3260 The function @var{restore-buffer-function} will be called with | |
| 3261 argument list | |
| 3262 | |
| 3263 @example | |
| 3264 (@var{buffer-file-name} @var{buffer-name} @var{desktop-buffer-misc}) | |
| 3265 @end example | |
| 3266 | |
| 3267 and it should return the restored buffer. | |
| 3268 Here @var{desktop-buffer-misc} is the value returned by the function | |
| 3269 optionally bound to @code{desktop-save-buffer}. | |
| 3270 @end defvar | |
| 3271 | |
| 3272 @ignore | |
| 3273 arch-tag: 4c7bff41-36e6-4da6-9e7f-9b9289e27c8e | |
| 3274 @end ignore |
