aboutsummaryrefslogtreecommitdiffstats
path: root/lispref/modes.texi
diff options
context:
space:
mode:
authorKaroly Lorentey2006-10-14 16:56:21 +0000
committerKaroly Lorentey2006-10-14 16:56:21 +0000
commit3f87f67ee215ffeecbd2f53bd7f342cdf03f47df (patch)
tree16f2af9111af08a94d608d96a957f5c3ec5effcc /lispref/modes.texi
parent350e4fb815d7413ef6d339dd664014706f742927 (diff)
parent7a210b69c7f92650c524766d1b9d3f3eefdd67c7 (diff)
downloademacs-3f87f67ee215ffeecbd2f53bd7f342cdf03f47df.tar.gz
emacs-3f87f67ee215ffeecbd2f53bd7f342cdf03f47df.zip
Merged from emacs@sv.gnu.org
Patches applied: * emacs@sv.gnu.org/emacs--devo--0--patch-371 Update from CVS * emacs@sv.gnu.org/emacs--devo--0--patch-372 Update from CVS * emacs@sv.gnu.org/emacs--devo--0--patch-373 Update from CVS * emacs@sv.gnu.org/emacs--devo--0--patch-374 Update from CVS * emacs@sv.gnu.org/emacs--devo--0--patch-375 Merge from gnus--rel--5.10 * emacs@sv.gnu.org/emacs--devo--0--patch-376 Update from CVS * emacs@sv.gnu.org/emacs--devo--0--patch-377 Update from CVS * emacs@sv.gnu.org/emacs--devo--0--patch-378 Update from CVS * emacs@sv.gnu.org/emacs--devo--0--patch-379 Merge from erc--emacs--21 * emacs@sv.gnu.org/emacs--devo--0--patch-380 Update from CVS * emacs@sv.gnu.org/emacs--devo--0--patch-381 Update from CVS * emacs@sv.gnu.org/emacs--devo--0--patch-382 Update from CVS * emacs@sv.gnu.org/emacs--devo--0--patch-383 Update from CVS * emacs@sv.gnu.org/emacs--devo--0--patch-384 Update from CVS * emacs@sv.gnu.org/emacs--devo--0--patch-385 Update from CVS * emacs@sv.gnu.org/emacs--devo--0--patch-386 Update from erc--emacs--22 * emacs@sv.gnu.org/emacs--devo--0--patch-387 Fix ERC bug introduced in last patch * emacs@sv.gnu.org/emacs--devo--0--patch-388 Update from erc--emacs--22 * emacs@sv.gnu.org/emacs--devo--0--patch-389 Update from CVS * emacs@sv.gnu.org/emacs--devo--0--patch-390 Update from CVS * emacs@sv.gnu.org/emacs--devo--0--patch-391 Update from CVS * emacs@sv.gnu.org/emacs--devo--0--patch-392 Update from CVS * emacs@sv.gnu.org/emacs--devo--0--patch-393 Update from CVS * emacs@sv.gnu.org/emacs--devo--0--patch-394 Update from CVS * emacs@sv.gnu.org/emacs--devo--0--patch-395 Update from CVS * emacs@sv.gnu.org/emacs--devo--0--patch-396 Update from CVS * emacs@sv.gnu.org/emacs--devo--0--patch-397 Update from CVS * emacs@sv.gnu.org/emacs--devo--0--patch-398 Merge from gnus--rel--5.10 * emacs@sv.gnu.org/emacs--devo--0--patch-399 Update from CVS * emacs@sv.gnu.org/emacs--devo--0--patch-400 Update from CVS * emacs@sv.gnu.org/emacs--devo--0--patch-401 Update from CVS * emacs@sv.gnu.org/emacs--devo--0--patch-402 Update from CVS * emacs@sv.gnu.org/emacs--devo--0--patch-403 Rcirc update from Ryan Yeske * emacs@sv.gnu.org/emacs--devo--0--patch-404 Update from CVS * emacs@sv.gnu.org/emacs--devo--0--patch-405 Update from CVS * emacs@sv.gnu.org/emacs--devo--0--patch-406 Update from CVS * emacs@sv.gnu.org/emacs--devo--0--patch-407 Update from CVS * emacs@sv.gnu.org/emacs--devo--0--patch-408 Update from CVS * emacs@sv.gnu.org/emacs--devo--0--patch-409 Update from CVS * emacs@sv.gnu.org/emacs--devo--0--patch-410 Merge from gnus--rel--5.10 * emacs@sv.gnu.org/emacs--devo--0--patch-411 Miscellaneous tq-related fixes. * emacs@sv.gnu.org/emacs--devo--0--patch-412 Update from CVS * emacs@sv.gnu.org/gnus--rel--5.10--patch-121 Update from CVS * emacs@sv.gnu.org/gnus--rel--5.10--patch-122 Update from CVS * emacs@sv.gnu.org/gnus--rel--5.10--patch-123 Update from CVS * emacs@sv.gnu.org/gnus--rel--5.10--patch-124 Update from CVS * emacs@sv.gnu.org/gnus--rel--5.10--patch-125 Update from CVS * emacs@sv.gnu.org/gnus--rel--5.10--patch-126 Merge from emacs--devo--0 * emacs@sv.gnu.org/gnus--rel--5.10--patch-127 Update from CVS git-archimport-id: lorentey@elte.hu--2004/emacs--multi-tty--0--patch-581
Diffstat (limited to 'lispref/modes.texi')
-rw-r--r--lispref/modes.texi842
1 files changed, 420 insertions, 422 deletions
diff --git a/lispref/modes.texi b/lispref/modes.texi
index b0c057ec1c9..f8afcd8a829 100644
--- a/lispref/modes.texi
+++ b/lispref/modes.texi
@@ -43,18 +43,19 @@ up in the init file (@pxref{Init File}), but Lisp programs can set them also.
43 43
44@cindex normal hook 44@cindex normal hook
45 Most of the hooks in Emacs are @dfn{normal hooks}. These variables 45 Most of the hooks in Emacs are @dfn{normal hooks}. These variables
46contain lists of functions to be called with no arguments. When the 46contain lists of functions to be called with no arguments. By
47hook name ends in @samp{-hook}, that tells you it is normal. We try to 47convention, whenever the hook name ends in @samp{-hook}, that tells
48make all hooks normal, as much as possible, so that you can use them in 48you it is normal. We try to make all hooks normal, as much as
49a uniform way. 49possible, so that you can use them in a uniform way.
50 50
51 Every major mode function is supposed to run a normal hook called the 51 Every major mode function is supposed to run a normal hook called
52@dfn{mode hook} as the last step of initialization. This makes it easy 52the @dfn{mode hook} as the one of the last steps of initialization.
53for a user to customize the behavior of the mode, by overriding the 53This makes it easy for a user to customize the behavior of the mode,
54buffer-local variable assignments already made by the mode. Most 54by overriding the buffer-local variable assignments already made by
55minor modes also run a mode hook at their end. But hooks are used in 55the mode. Most minor mode functions also run a mode hook at the end.
56other contexts too. For example, the hook @code{suspend-hook} runs 56But hooks are used in other contexts too. For example, the hook
57just before Emacs suspends itself (@pxref{Suspending Emacs}). 57@code{suspend-hook} runs just before Emacs suspends itself
58(@pxref{Suspending Emacs}).
58 59
59 The recommended way to add a hook function to a normal hook is by 60 The recommended way to add a hook function to a normal hook is by
60calling @code{add-hook} (see below). The hook functions may be any of 61calling @code{add-hook} (see below). The hook functions may be any of
@@ -65,20 +66,16 @@ globally or buffer-locally with @code{add-hook}.
65 66
66@cindex abnormal hook 67@cindex abnormal hook
67 If the hook variable's name does not end with @samp{-hook}, that 68 If the hook variable's name does not end with @samp{-hook}, that
68indicates it is probably an @dfn{abnormal hook}. Then you should look at its 69indicates it is probably an @dfn{abnormal hook}. That means the hook
69documentation to see how to use the hook properly. 70functions are called with arguments, or their return values are used
71in some way. The hook's documentation says how the functions are
72called. You can use @code{add-hook} to add a function to an abnormal
73hook, but you must write the function to follow the hook's calling
74convention.
70 75
71 If the variable's name ends in @samp{-functions} or @samp{-hooks}, 76 By convention, abnormal hook names end in @samp{-functions} or
72then the value is a list of functions, but it is abnormal in that either 77@samp{-hooks}. If the variable's name ends in @samp{-function}, then
73these functions are called with arguments or their values are used in 78its value is just a single function, not a list of functions.
74some way. You can use @code{add-hook} to add a function to the list,
75but you must take care in writing the function. (A few of these
76variables, notably those ending in @samp{-hooks}, are actually
77normal hooks which were named before we established the convention of
78using @samp{-hook} for them.)
79
80 If the variable's name ends in @samp{-function}, then its value
81is just a single function, not a list of functions.
82 79
83 Here's an example that uses a mode hook to turn on Auto Fill mode when 80 Here's an example that uses a mode hook to turn on Auto Fill mode when
84in Lisp Interaction mode: 81in Lisp Interaction mode:
@@ -96,12 +93,13 @@ arguments, and runs each hook in turn. Each argument should be a
96symbol that is a normal hook variable. These arguments are processed 93symbol that is a normal hook variable. These arguments are processed
97in the order specified. 94in the order specified.
98 95
99If a hook variable has a non-@code{nil} value, that value may be a 96If a hook variable has a non-@code{nil} value, that value should be a
100function or a list of functions. (The former option is considered 97list of functions. @code{run-hooks} calls all the functions, one by
101obsolete.) If the value is a function (either a lambda expression or 98one, with no arguments.
102a symbol with a function definition), it is called. If it is a list 99
103that isn't a function, its elements are called, consecutively. All 100The hook variable's value can also be a single function---either a
104the hook functions are called with no arguments. 101lambda expression or a symbol with a function definition---which
102@code{run-hooks} calls. But this usage is obsolete.
105@end defun 103@end defun
106 104
107@defun run-hook-with-args hook &rest args 105@defun run-hook-with-args hook &rest args
@@ -187,7 +185,6 @@ to another major mode in the same buffer.
187@menu 185@menu
188* Major Mode Basics:: 186* Major Mode Basics::
189* Major Mode Conventions:: Coding conventions for keymaps, etc. 187* Major Mode Conventions:: Coding conventions for keymaps, etc.
190* Example Major Modes:: Text mode and Lisp modes.
191* Auto Major Mode:: How Emacs chooses the major mode automatically. 188* Auto Major Mode:: How Emacs chooses the major mode automatically.
192* Mode Help:: Finding out how to use a mode. 189* Mode Help:: Finding out how to use a mode.
193* Derived Modes:: Defining a new major mode based on another major 190* Derived Modes:: Defining a new major mode based on another major
@@ -195,6 +192,7 @@ to another major mode in the same buffer.
195* Generic Modes:: Defining a simple major mode that supports 192* Generic Modes:: Defining a simple major mode that supports
196 comment syntax and Font Lock mode. 193 comment syntax and Font Lock mode.
197* Mode Hooks:: Hooks run at the end of major mode functions. 194* Mode Hooks:: Hooks run at the end of major mode functions.
195* Example Major Modes:: Text mode and Lisp modes.
198@end menu 196@end menu
199 197
200@node Major Mode Basics 198@node Major Mode Basics
@@ -214,14 +212,14 @@ specialized editing task, creating a new major mode is usually a good
214idea. In practice, writing a major mode is easy (in contrast to 212idea. In practice, writing a major mode is easy (in contrast to
215writing a minor mode, which is often difficult). 213writing a minor mode, which is often difficult).
216 214
217 If the new mode is similar to an old one, it is often unwise to modify 215 If the new mode is similar to an old one, it is often unwise to
218the old one to serve two purposes, since it may become harder to use and 216modify the old one to serve two purposes, since it may become harder
219maintain. Instead, copy and rename an existing major mode definition 217to use and maintain. Instead, copy and rename an existing major mode
220and alter the copy---or define a @dfn{derived mode} (@pxref{Derived 218definition and alter the copy---or use @code{define-derived-mode} to
221Modes}). For example, Rmail Edit mode, which is in 219define a @dfn{derived mode} (@pxref{Derived Modes}). For example,
222@file{emacs/lisp/mail/rmailedit.el}, is a major mode that is very similar to 220Rmail Edit mode is a major mode that is very similar to Text mode
223Text mode except that it provides two additional commands. Its 221except that it provides two additional commands. Its definition is
224definition is distinct from that of Text mode, but uses that of Text mode. 222distinct from that of Text mode, but uses that of Text mode.
225 223
226 Even if the new mode is not an obvious derivative of any other mode, 224 Even if the new mode is not an obvious derivative of any other mode,
227it is convenient to use @code{define-derived-mode} with a @code{nil} 225it is convenient to use @code{define-derived-mode} with a @code{nil}
@@ -287,8 +285,10 @@ Documentation}.
287 285
288@item 286@item
289The major mode command should start by calling 287The major mode command should start by calling
290@code{kill-all-local-variables}. This is what gets rid of the 288@code{kill-all-local-variables}. This runs the normal hook
291buffer-local variables of the major mode previously in effect. 289@code{change-major-mode-hook}, then gets rid of the buffer-local
290variables of the major mode previously in effect. @xref{Creating
291Buffer-Local}.
292 292
293@item 293@item
294The major mode command should set the variable @code{major-mode} to the 294The major mode command should set the variable @code{major-mode} to the
@@ -355,9 +355,11 @@ Rmail that do not allow self-insertion of text can reasonably redefine
355letters and other printing characters as special commands. 355letters and other printing characters as special commands.
356 356
357@item 357@item
358Major modes must not define @key{RET} to do anything other than insert 358Major modes modes for editing text should not define @key{RET} to do
359a newline. The command to insert a newline and then indent is 359anything other than insert a newline. However, it is ok for
360@kbd{C-j}. Please keep this distinction uniform for all major modes. 360specialized modes for text that users don't directly edit, such as
361Dired and Info modes, to redefine @key{RET} to do something entirely
362different.
361 363
362@item 364@item
363Major modes should not alter options that are primarily a matter of user 365Major modes should not alter options that are primarily a matter of user
@@ -427,10 +429,11 @@ other packages would interfere with them.
427@item 429@item
428@cindex mode hook 430@cindex mode hook
429@cindex major mode hook 431@cindex major mode hook
430Each major mode should have a @dfn{mode hook} named 432Each major mode should have a normal @dfn{mode hook} named
431@code{@var{modename}-mode-hook}. The major mode command should run that 433@code{@var{modename}-mode-hook}. The very last thing the major mode command
432hook, with @code{run-mode-hooks}, as the very last thing it 434should do is to call @code{run-mode-hooks}. This runs the mode hook,
433does. @xref{Mode Hooks}. 435and then runs the normal hook @code{after-change-major-mode-hook}.
436@xref{Mode Hooks}.
434 437
435@item 438@item
436The major mode command may start by calling some other major mode 439The major mode command may start by calling some other major mode
@@ -488,281 +491,6 @@ that they may be evaluated more than once without adverse consequences.
488Even if you never load the file more than once, someone else will. 491Even if you never load the file more than once, someone else will.
489@end itemize 492@end itemize
490 493
491@node Example Major Modes
492@subsection Major Mode Examples
493
494 Text mode is perhaps the simplest mode besides Fundamental mode.
495Here are excerpts from @file{text-mode.el} that illustrate many of
496the conventions listed above:
497
498@smallexample
499@group
500;; @r{Create the syntax table for this mode.}
501(defvar text-mode-syntax-table
502 (let ((st (make-syntax-table)))
503 (modify-syntax-entry ?\" ". " st)
504 (modify-syntax-entry ?\\ ". " st)
505 ;; Add `p' so M-c on `hello' leads to `Hello', not `hello'.
506 (modify-syntax-entry ?' "w p" st)
507 st)
508 "Syntax table used while in `text-mode'.")
509@end group
510
511;; @r{Create the keymap for this mode.}
512@group
513(defvar text-mode-map
514 (let ((map (make-sparse-keymap)))
515 (define-key map "\e\t" 'ispell-complete-word)
516 (define-key map "\es" 'center-line)
517 (define-key map "\eS" 'center-paragraph)
518 map)
519 "Keymap for `text-mode'.
520Many other modes, such as Mail mode, Outline mode
521and Indented Text mode, inherit all the commands
522defined in this map.")
523@end group
524@end smallexample
525
526 Here is how the actual mode command is defined now:
527
528@smallexample
529@group
530(define-derived-mode text-mode nil "Text"
531 "Major mode for editing text written for humans to read.
532In this mode, paragraphs are delimited only by blank or white lines.
533You can thus get the full benefit of adaptive filling
534 (see the variable `adaptive-fill-mode').
535\\@{text-mode-map@}
536Turning on Text mode runs the normal hook `text-mode-hook'."
537@end group
538@group
539 (make-local-variable 'text-mode-variant)
540 (setq text-mode-variant t)
541 ;; @r{These two lines are a feature added recently.}
542 (set (make-local-variable 'require-final-newline)
543 mode-require-final-newline)
544 (set (make-local-variable 'indent-line-function) 'indent-relative))
545@end group
546@end smallexample
547
548 But here is how it was defined formerly, before
549@code{define-derived-mode} existed:
550
551@smallexample
552@group
553;; @r{This isn't needed nowadays, since @code{define-derived-mode} does it.}
554(defvar text-mode-abbrev-table nil
555 "Abbrev table used while in text mode.")
556(define-abbrev-table 'text-mode-abbrev-table ())
557@end group
558
559@group
560(defun text-mode ()
561 "Major mode for editing text intended for humans to read...
562 Special commands: \\@{text-mode-map@}
563@end group
564@group
565Turning on text-mode runs the hook `text-mode-hook'."
566 (interactive)
567 (kill-all-local-variables)
568 (use-local-map text-mode-map)
569@end group
570@group
571 (setq local-abbrev-table text-mode-abbrev-table)
572 (set-syntax-table text-mode-syntax-table)
573@end group
574@group
575 ;; @r{These four lines are absent from the current version}
576 ;; @r{not because this is done some other way, but rather}
577 ;; @r{because nowadays Text mode uses the normal definition of paragraphs.}
578 (make-local-variable 'paragraph-start)
579 (setq paragraph-start (concat "[ \t]*$\\|" page-delimiter))
580 (make-local-variable 'paragraph-separate)
581 (setq paragraph-separate paragraph-start)
582 (make-local-variable 'indent-line-function)
583 (setq indent-line-function 'indent-relative-maybe)
584@end group
585@group
586 (setq mode-name "Text")
587 (setq major-mode 'text-mode)
588 (run-mode-hooks 'text-mode-hook)) ; @r{Finally, this permits the user to}
589 ; @r{customize the mode with a hook.}
590@end group
591@end smallexample
592
593@cindex @file{lisp-mode.el}
594 The three Lisp modes (Lisp mode, Emacs Lisp mode, and Lisp
595Interaction mode) have more features than Text mode and the code is
596correspondingly more complicated. Here are excerpts from
597@file{lisp-mode.el} that illustrate how these modes are written.
598
599@cindex syntax table example
600@smallexample
601@group
602;; @r{Create mode-specific table variables.}
603(defvar lisp-mode-syntax-table nil "")
604(defvar lisp-mode-abbrev-table nil "")
605@end group
606
607@group
608(defvar emacs-lisp-mode-syntax-table
609 (let ((table (make-syntax-table)))
610 (let ((i 0))
611@end group
612
613@group
614 ;; @r{Set syntax of chars up to @samp{0} to say they are}
615 ;; @r{part of symbol names but not words.}
616 ;; @r{(The digit @samp{0} is @code{48} in the @acronym{ASCII} character set.)}
617 (while (< i ?0)
618 (modify-syntax-entry i "_ " table)
619 (setq i (1+ i)))
620 ;; @r{@dots{} similar code follows for other character ranges.}
621@end group
622@group
623 ;; @r{Then set the syntax codes for characters that are special in Lisp.}
624 (modify-syntax-entry ? " " table)
625 (modify-syntax-entry ?\t " " table)
626 (modify-syntax-entry ?\f " " table)
627 (modify-syntax-entry ?\n "> " table)
628@end group
629@group
630 ;; @r{Give CR the same syntax as newline, for selective-display.}
631 (modify-syntax-entry ?\^m "> " table)
632 (modify-syntax-entry ?\; "< " table)
633 (modify-syntax-entry ?` "' " table)
634 (modify-syntax-entry ?' "' " table)
635 (modify-syntax-entry ?, "' " table)
636@end group
637@group
638 ;; @r{@dots{}likewise for many other characters@dots{}}
639 (modify-syntax-entry ?\( "() " table)
640 (modify-syntax-entry ?\) ")( " table)
641 (modify-syntax-entry ?\[ "(] " table)
642 (modify-syntax-entry ?\] ")[ " table))
643 table))
644@end group
645@group
646;; @r{Create an abbrev table for lisp-mode.}
647(define-abbrev-table 'lisp-mode-abbrev-table ())
648@end group
649@end smallexample
650
651 Much code is shared among the three Lisp modes. The following
652function sets various variables; it is called by each of the major Lisp
653mode functions:
654
655@smallexample
656@group
657(defun lisp-mode-variables (lisp-syntax)
658 (when lisp-syntax
659 (set-syntax-table lisp-mode-syntax-table))
660 (setq local-abbrev-table lisp-mode-abbrev-table)
661 @dots{}
662@end group
663@end smallexample
664
665 Functions such as @code{forward-paragraph} use the value of the
666@code{paragraph-start} variable. Since Lisp code is different from
667ordinary text, the @code{paragraph-start} variable needs to be set
668specially to handle Lisp. Also, comments are indented in a special
669fashion in Lisp and the Lisp modes need their own mode-specific
670@code{comment-indent-function}. The code to set these variables is the
671rest of @code{lisp-mode-variables}.
672
673@smallexample
674@group
675 (make-local-variable 'paragraph-start)
676 (setq paragraph-start (concat page-delimiter "\\|$" ))
677 (make-local-variable 'paragraph-separate)
678 (setq paragraph-separate paragraph-start)
679 @dots{}
680@end group
681@group
682 (make-local-variable 'comment-indent-function)
683 (setq comment-indent-function 'lisp-comment-indent))
684 @dots{}
685@end group
686@end smallexample
687
688 Each of the different Lisp modes has a slightly different keymap. For
689example, Lisp mode binds @kbd{C-c C-z} to @code{run-lisp}, but the other
690Lisp modes do not. However, all Lisp modes have some commands in
691common. The following code sets up the common commands:
692
693@smallexample
694@group
695(defvar shared-lisp-mode-map ()
696 "Keymap for commands shared by all sorts of Lisp modes.")
697
698;; @r{Putting this @code{if} after the @code{defvar} is an older style.}
699(if shared-lisp-mode-map
700 ()
701 (setq shared-lisp-mode-map (make-sparse-keymap))
702 (define-key shared-lisp-mode-map "\e\C-q" 'indent-sexp)
703 (define-key shared-lisp-mode-map "\177"
704 'backward-delete-char-untabify))
705@end group
706@end smallexample
707
708@noindent
709And here is the code to set up the keymap for Lisp mode:
710
711@smallexample
712@group
713(defvar lisp-mode-map ()
714 "Keymap for ordinary Lisp mode...")
715
716(if lisp-mode-map
717 ()
718 (setq lisp-mode-map (make-sparse-keymap))
719 (set-keymap-parent lisp-mode-map shared-lisp-mode-map)
720 (define-key lisp-mode-map "\e\C-x" 'lisp-eval-defun)
721 (define-key lisp-mode-map "\C-c\C-z" 'run-lisp))
722@end group
723@end smallexample
724
725 Finally, here is the complete major mode function definition for
726Lisp mode.
727
728@smallexample
729@group
730(defun lisp-mode ()
731 "Major mode for editing Lisp code for Lisps other than GNU Emacs Lisp.
732Commands:
733Delete converts tabs to spaces as it moves back.
734Blank lines separate paragraphs. Semicolons start comments.
735\\@{lisp-mode-map@}
736Note that `run-lisp' may be used either to start an inferior Lisp job
737or to switch back to an existing one.
738@end group
739
740@group
741Entry to this mode calls the value of `lisp-mode-hook'
742if that value is non-nil."
743 (interactive)
744 (kill-all-local-variables)
745@end group
746@group
747 (use-local-map lisp-mode-map) ; @r{Select the mode's keymap.}
748 (setq major-mode 'lisp-mode) ; @r{This is how @code{describe-mode}}
749 ; @r{finds out what to describe.}
750 (setq mode-name "Lisp") ; @r{This goes into the mode line.}
751 (lisp-mode-variables t) ; @r{This defines various variables.}
752 (make-local-variable 'comment-start-skip)
753 (setq comment-start-skip
754 "\\(\\(^\\|[^\\\\\n]\\)\\(\\\\\\\\\\)*\\)\\(;+\\|#|\\) *")
755 (make-local-variable 'font-lock-keywords-case-fold-search)
756 (setq font-lock-keywords-case-fold-search t)
757@end group
758@group
759 (setq imenu-case-fold-search t)
760 (set-syntax-table lisp-mode-syntax-table)
761 (run-mode-hooks 'lisp-mode-hook)) ; @r{This permits the user to use a}
762 ; @r{hook to customize the mode.}
763@end group
764@end smallexample
765
766@node Auto Major Mode 494@node Auto Major Mode
767@subsection How Emacs Chooses a Major Mode 495@subsection How Emacs Chooses a Major Mode
768 496
@@ -1073,104 +801,365 @@ Do not write an @code{interactive} spec in the definition;
1073@subsection Generic Modes 801@subsection Generic Modes
1074@cindex generic mode 802@cindex generic mode
1075 803
1076@dfn{Generic modes} are simple major modes with basic support for 804 @dfn{Generic modes} are simple major modes with basic support for
1077comment syntax and Font Lock mode. They are primarily useful for 805comment syntax and Font Lock mode. To define a generic mode, use the
1078configuration files. To define a generic mode, use the macro 806macro @code{define-generic-mode}. See the file @file{generic-x.el}
1079@code{define-generic-mode}. See the file @file{generic-x.el} for some 807for some examples of the use of @code{define-generic-mode}.
1080examples of the use of @code{define-generic-mode}.
1081 808
1082@defmac define-generic-mode mode comment-list keyword-list font-lock-list auto-mode-list function-list &optional docstring 809@defmac define-generic-mode mode comment-list keyword-list font-lock-list auto-mode-list function-list &optional docstring
1083This macro creates a new generic mode. The argument @var{mode} (an 810This macro defines a generic mode command named @var{mode} (a symbol,
1084unquoted symbol) is the major mode command. The optional argument 811not quoted). The optional argument @var{docstring} is the
1085@var{docstring} is the documentation for the mode command. If you do 812documentation for the mode command. If you do not supply it,
1086not supply it, @code{define-generic-mode} uses a default documentation 813@code{define-generic-mode} generates one by default.
1087string instead. 814
1088 815The argument @var{comment-list} is a list in which each element is
1089@var{comment-list} is a list in which each element is either a 816either a character, a string of one or two characters, or a cons cell.
1090character, a string of one or two characters, or a cons cell. A 817A character or a string is set up in the mode's syntax table as a
1091character or a string is set up in the mode's syntax table as a
1092``comment starter.'' If the entry is a cons cell, the @sc{car} is set 818``comment starter.'' If the entry is a cons cell, the @sc{car} is set
1093up as a ``comment starter'' and the @sc{cdr} as a ``comment ender.'' 819up as a ``comment starter'' and the @sc{cdr} as a ``comment ender.''
1094(Use @code{nil} for the latter if you want comments to end at the end 820(Use @code{nil} for the latter if you want comments to end at the end
1095of the line.) Note that the syntax table has limitations about what 821of the line.) Note that the syntax table mechanism has limitations
1096comment starters and enders are actually possible. @xref{Syntax 822about what comment starters and enders are actually possible.
1097Tables}. 823@xref{Syntax Tables}.
1098 824
1099@var{keyword-list} is a list of keywords to highlight with 825The argument @var{keyword-list} is a list of keywords to highlight
1100@code{font-lock-keyword-face}. Each keyword should be a string. 826with @code{font-lock-keyword-face}. Each keyword should be a string.
1101@var{font-lock-list} is a list of additional expressions to highlight. 827Meanwhile, @var{font-lock-list} is a list of additional expressions to
1102Each element of this list should have the same form as an element of 828highlight. Each element of this list should have the same form as an
1103@code{font-lock-keywords}. @xref{Search-based Fontification}. 829element of @code{font-lock-keywords}. @xref{Search-based
1104 830Fontification}.
1105@var{auto-mode-list} is a list of regular expressions to add to the 831
1106variable @code{auto-mode-alist}. These regular expressions are added 832The argument @var{auto-mode-list} is a list of regular expressions to
1107when Emacs runs the macro expansion. 833add to the variable @code{auto-mode-alist}. They are added by the execution
1108 834of the @code{define-generic-mode} form, not by expanding the macro call.
1109@var{function-list} is a list of functions to call to do some 835
1110additional setup. The mode command calls these functions just before 836Finally, @var{function-list} is a list of functions for the mode
1111it runs the mode hook variable @code{@var{mode}-hook}. 837command to call for additional setup. It calls these functions just
838before it runs the mode hook variable @code{@var{mode}-hook}.
1112@end defmac 839@end defmac
1113 840
1114@node Mode Hooks 841@node Mode Hooks
1115@subsection Mode Hooks 842@subsection Mode Hooks
1116 843
1117 The two last things a major mode function should do is run its mode 844 Every major mode function should finish by running its mode hook and
1118hook and finally the mode independent normal hook 845the mode-independent normal hook @code{after-change-major-mode-hook}.
1119@code{after-change-major-mode-hook}. If the major mode is a derived 846It does this by calling @code{run-mode-hooks}. If the major mode is a
1120mode, that is if it calls another major mode (the parent mode) in its 847derived mode, that is if it calls another major mode (the parent mode)
1121body, then the parent's mode hook is run just before the derived 848in its body, it should do this inside @code{delay-mode-hooks} so that
1122mode's hook. Neither the parent's mode hook nor 849the parent won't run these hooks itself. Instead, the derived mode's
1123@code{after-change-major-mode-hook} are run at the end of the actual 850call to @code{run-mode-hooks} runs the parent's mode hook too.
1124call to the parent mode. This applies recursively if the parent mode 851@xref{Major Mode Conventions}.
1125has itself a parent. That is, the mode hooks of all major modes 852
1126called directly or indirectly by the major mode function are all run 853 Emacs versions before Emacs 22 did not have @code{delay-mode-hooks}.
1127in sequence at the end, just before 854When user-implemented major modes have not been updated to use it,
1128@code{after-change-major-mode-hook}. 855they won't entirely follow these conventions: they may run the
1129 856parent's mode hook too early, or fail to run
1130 These conventions are new in Emacs 22, and some major modes 857@code{after-change-major-mode-hook}. If you encounter such a major
1131implemented by users do not follow them yet. So if you put a function 858mode, please correct it to follow these conventions.
1132onto @code{after-change-major-mode-hook}, keep in mind that some modes
1133will fail to run it. If a user complains about that, you can respond,
1134``That major mode fails to follow Emacs conventions, and that's why it
1135fails to work. Please fix the major mode.'' In most cases, that is
1136good enough, so go ahead and use @code{after-change-major-mode-hook}.
1137However, if a certain feature needs to be completely reliable,
1138it should not use @code{after-change-major-mode-hook} as of yet.
1139 859
1140 When you defined a major mode using @code{define-derived-mode}, it 860 When you defined a major mode using @code{define-derived-mode}, it
1141automatically makes sure these conventions are followed. If you 861automatically makes sure these conventions are followed. If you
1142define a major mode ``from scratch,'' not using 862define a major mode ``by hand,'' not using @code{define-derived-mode},
1143@code{define-derived-mode}, make sure the major mode command follows 863use the following functions to handle these conventions automatically.
1144these and other conventions. @xref{Major Mode Conventions}. You use
1145these functions to do it properly.
1146 864
1147@defun run-mode-hooks &rest hookvars 865@defun run-mode-hooks &rest hookvars
1148Major modes should run their mode hook using this function. It is 866Major modes should run their mode hook using this function. It is
1149similar to @code{run-hooks} (@pxref{Hooks}), but it also runs 867similar to @code{run-hooks} (@pxref{Hooks}), but it also runs
1150@code{after-change-major-mode-hook}. 868@code{after-change-major-mode-hook}.
1151 869
1152When the call to this function is dynamically inside a 870When this function is called during the execution of a
1153@code{delay-mode-hooks} form, this function does not run any hooks. 871@code{delay-mode-hooks} form, it does not run the hooks immediately.
1154Instead, it arranges for the next call to @code{run-mode-hooks} to run 872Instead, it arranges for the next call to @code{run-mode-hooks} to run
1155@var{hookvars}. 873them.
1156@end defun 874@end defun
1157 875
1158@defmac delay-mode-hooks body@dots{} 876@defmac delay-mode-hooks body@dots{}
1159This macro executes @var{body} like @code{progn}, but all calls to 877When one major mode command calls another, it should do so inside of
1160@code{run-mode-hooks} inside @var{body} delay running their hooks. 878@code{delay-mode-hooks}.
1161They will be run by the first call to @code{run-mode-hooks} after exit 879
1162from @code{delay-mode-hooks}. This is the proper way for a major mode 880This macro executes @var{body}, but tells all @code{run-mode-hooks}
1163command to invoke its parent mode. 881calls during the execution of @var{body} to delay running their hooks.
882The hooks will actually run during the next call to
883@code{run-mode-hooks} after the end of the @code{delay-mode-hooks}
884construct.
1164@end defmac 885@end defmac
1165 886
1166@defvar after-change-major-mode-hook 887@defvar after-change-major-mode-hook
1167Every major mode function should run this normal hook at its very end. 888This is a normal hook run by @code{run-mode-hooks}. It is run at the
1168It normally does not need to do so explicitly. Indeed, a major mode 889very end of every properly-written major mode function.
1169function should normally run its mode hook with @code{run-mode-hooks}
1170as the very last thing it does, and the last thing
1171@code{run-mode-hooks} does is run @code{after-change-major-mode-hook}.
1172@end defvar 890@end defvar
1173 891
892@node Example Major Modes
893@subsection Major Mode Examples
894
895 Text mode is perhaps the simplest mode besides Fundamental mode.
896Here are excerpts from @file{text-mode.el} that illustrate many of
897the conventions listed above:
898
899@smallexample
900@group
901;; @r{Create the syntax table for this mode.}
902(defvar text-mode-syntax-table
903 (let ((st (make-syntax-table)))
904 (modify-syntax-entry ?\" ". " st)
905 (modify-syntax-entry ?\\ ". " st)
906 ;; Add `p' so M-c on `hello' leads to `Hello', not `hello'.
907 (modify-syntax-entry ?' "w p" st)
908 st)
909 "Syntax table used while in `text-mode'.")
910@end group
911
912;; @r{Create the keymap for this mode.}
913@group
914(defvar text-mode-map
915 (let ((map (make-sparse-keymap)))
916 (define-key map "\e\t" 'ispell-complete-word)
917 (define-key map "\es" 'center-line)
918 (define-key map "\eS" 'center-paragraph)
919 map)
920 "Keymap for `text-mode'.
921Many other modes, such as Mail mode, Outline mode
922and Indented Text mode, inherit all the commands
923defined in this map.")
924@end group
925@end smallexample
926
927 Here is how the actual mode command is defined now:
928
929@smallexample
930@group
931(define-derived-mode text-mode nil "Text"
932 "Major mode for editing text written for humans to read.
933In this mode, paragraphs are delimited only by blank or white lines.
934You can thus get the full benefit of adaptive filling
935 (see the variable `adaptive-fill-mode').
936\\@{text-mode-map@}
937Turning on Text mode runs the normal hook `text-mode-hook'."
938@end group
939@group
940 (make-local-variable 'text-mode-variant)
941 (setq text-mode-variant t)
942 ;; @r{These two lines are a feature added recently.}
943 (set (make-local-variable 'require-final-newline)
944 mode-require-final-newline)
945 (set (make-local-variable 'indent-line-function) 'indent-relative))
946@end group
947@end smallexample
948
949 But here is how it was defined formerly, before
950@code{define-derived-mode} existed:
951
952@smallexample
953@group
954;; @r{This isn't needed nowadays, since @code{define-derived-mode} does it.}
955(defvar text-mode-abbrev-table nil
956 "Abbrev table used while in text mode.")
957(define-abbrev-table 'text-mode-abbrev-table ())
958@end group
959
960@group
961(defun text-mode ()
962 "Major mode for editing text intended for humans to read...
963 Special commands: \\@{text-mode-map@}
964@end group
965@group
966Turning on text-mode runs the hook `text-mode-hook'."
967 (interactive)
968 (kill-all-local-variables)
969 (use-local-map text-mode-map)
970@end group
971@group
972 (setq local-abbrev-table text-mode-abbrev-table)
973 (set-syntax-table text-mode-syntax-table)
974@end group
975@group
976 ;; @r{These four lines are absent from the current version}
977 ;; @r{not because this is done some other way, but rather}
978 ;; @r{because nowadays Text mode uses the normal definition of paragraphs.}
979 (make-local-variable 'paragraph-start)
980 (setq paragraph-start (concat "[ \t]*$\\|" page-delimiter))
981 (make-local-variable 'paragraph-separate)
982 (setq paragraph-separate paragraph-start)
983 (make-local-variable 'indent-line-function)
984 (setq indent-line-function 'indent-relative-maybe)
985@end group
986@group
987 (setq mode-name "Text")
988 (setq major-mode 'text-mode)
989 (run-mode-hooks 'text-mode-hook)) ; @r{Finally, this permits the user to}
990 ; @r{customize the mode with a hook.}
991@end group
992@end smallexample
993
994@cindex @file{lisp-mode.el}
995 The three Lisp modes (Lisp mode, Emacs Lisp mode, and Lisp
996Interaction mode) have more features than Text mode and the code is
997correspondingly more complicated. Here are excerpts from
998@file{lisp-mode.el} that illustrate how these modes are written.
999
1000@cindex syntax table example
1001@smallexample
1002@group
1003;; @r{Create mode-specific table variables.}
1004(defvar lisp-mode-syntax-table nil "")
1005(defvar lisp-mode-abbrev-table nil "")
1006@end group
1007
1008@group
1009(defvar emacs-lisp-mode-syntax-table
1010 (let ((table (make-syntax-table)))
1011 (let ((i 0))
1012@end group
1013
1014@group
1015 ;; @r{Set syntax of chars up to @samp{0} to say they are}
1016 ;; @r{part of symbol names but not words.}
1017 ;; @r{(The digit @samp{0} is @code{48} in the @acronym{ASCII} character set.)}
1018 (while (< i ?0)
1019 (modify-syntax-entry i "_ " table)
1020 (setq i (1+ i)))
1021 ;; @r{@dots{} similar code follows for other character ranges.}
1022@end group
1023@group
1024 ;; @r{Then set the syntax codes for characters that are special in Lisp.}
1025 (modify-syntax-entry ? " " table)
1026 (modify-syntax-entry ?\t " " table)
1027 (modify-syntax-entry ?\f " " table)
1028 (modify-syntax-entry ?\n "> " table)
1029@end group
1030@group
1031 ;; @r{Give CR the same syntax as newline, for selective-display.}
1032 (modify-syntax-entry ?\^m "> " table)
1033 (modify-syntax-entry ?\; "< " table)
1034 (modify-syntax-entry ?` "' " table)
1035 (modify-syntax-entry ?' "' " table)
1036 (modify-syntax-entry ?, "' " table)
1037@end group
1038@group
1039 ;; @r{@dots{}likewise for many other characters@dots{}}
1040 (modify-syntax-entry ?\( "() " table)
1041 (modify-syntax-entry ?\) ")( " table)
1042 (modify-syntax-entry ?\[ "(] " table)
1043 (modify-syntax-entry ?\] ")[ " table))
1044 table))
1045@end group
1046@group
1047;; @r{Create an abbrev table for lisp-mode.}
1048(define-abbrev-table 'lisp-mode-abbrev-table ())
1049@end group
1050@end smallexample
1051
1052 The three modes for Lisp share much of their code. For instance,
1053each calls the following function to set various variables:
1054
1055@smallexample
1056@group
1057(defun lisp-mode-variables (lisp-syntax)
1058 (when lisp-syntax
1059 (set-syntax-table lisp-mode-syntax-table))
1060 (setq local-abbrev-table lisp-mode-abbrev-table)
1061 @dots{}
1062@end group
1063@end smallexample
1064
1065 In Lisp and most programming languages, we want the paragraph
1066commands to treat only blank lines as paragraph separators. And the
1067modes should undestand the Lisp conventions for comments. The rest of
1068@code{lisp-mode-variables} sets this up:
1069
1070@smallexample
1071@group
1072 (make-local-variable 'paragraph-start)
1073 (setq paragraph-start (concat page-delimiter "\\|$" ))
1074 (make-local-variable 'paragraph-separate)
1075 (setq paragraph-separate paragraph-start)
1076 @dots{}
1077@end group
1078@group
1079 (make-local-variable 'comment-indent-function)
1080 (setq comment-indent-function 'lisp-comment-indent))
1081 @dots{}
1082@end group
1083@end smallexample
1084
1085 Each of the different Lisp modes has a slightly different keymap. For
1086example, Lisp mode binds @kbd{C-c C-z} to @code{run-lisp}, but the other
1087Lisp modes do not. However, all Lisp modes have some commands in
1088common. The following code sets up the common commands:
1089
1090@smallexample
1091@group
1092(defvar shared-lisp-mode-map ()
1093 "Keymap for commands shared by all sorts of Lisp modes.")
1094
1095;; @r{Putting this @code{if} after the @code{defvar} is an older style.}
1096(if shared-lisp-mode-map
1097 ()
1098 (setq shared-lisp-mode-map (make-sparse-keymap))
1099 (define-key shared-lisp-mode-map "\e\C-q" 'indent-sexp)
1100 (define-key shared-lisp-mode-map "\177"
1101 'backward-delete-char-untabify))
1102@end group
1103@end smallexample
1104
1105@noindent
1106And here is the code to set up the keymap for Lisp mode:
1107
1108@smallexample
1109@group
1110(defvar lisp-mode-map ()
1111 "Keymap for ordinary Lisp mode...")
1112
1113(if lisp-mode-map
1114 ()
1115 (setq lisp-mode-map (make-sparse-keymap))
1116 (set-keymap-parent lisp-mode-map shared-lisp-mode-map)
1117 (define-key lisp-mode-map "\e\C-x" 'lisp-eval-defun)
1118 (define-key lisp-mode-map "\C-c\C-z" 'run-lisp))
1119@end group
1120@end smallexample
1121
1122 Finally, here is the complete major mode function definition for
1123Lisp mode.
1124
1125@smallexample
1126@group
1127(defun lisp-mode ()
1128 "Major mode for editing Lisp code for Lisps other than GNU Emacs Lisp.
1129Commands:
1130Delete converts tabs to spaces as it moves back.
1131Blank lines separate paragraphs. Semicolons start comments.
1132\\@{lisp-mode-map@}
1133Note that `run-lisp' may be used either to start an inferior Lisp job
1134or to switch back to an existing one.
1135@end group
1136
1137@group
1138Entry to this mode calls the value of `lisp-mode-hook'
1139if that value is non-nil."
1140 (interactive)
1141 (kill-all-local-variables)
1142@end group
1143@group
1144 (use-local-map lisp-mode-map) ; @r{Select the mode's keymap.}
1145 (setq major-mode 'lisp-mode) ; @r{This is how @code{describe-mode}}
1146 ; @r{finds out what to describe.}
1147 (setq mode-name "Lisp") ; @r{This goes into the mode line.}
1148 (lisp-mode-variables t) ; @r{This defines various variables.}
1149 (make-local-variable 'comment-start-skip)
1150 (setq comment-start-skip
1151 "\\(\\(^\\|[^\\\\\n]\\)\\(\\\\\\\\\\)*\\)\\(;+\\|#|\\) *")
1152 (make-local-variable 'font-lock-keywords-case-fold-search)
1153 (setq font-lock-keywords-case-fold-search t)
1154@end group
1155@group
1156 (setq imenu-case-fold-search t)
1157 (set-syntax-table lisp-mode-syntax-table)
1158 (run-mode-hooks 'lisp-mode-hook)) ; @r{This permits the user to use a}
1159 ; @r{hook to customize the mode.}
1160@end group
1161@end smallexample
1162
1174@node Minor Modes 1163@node Minor Modes
1175@section Minor Modes 1164@section Minor Modes
1176@cindex minor mode 1165@cindex minor mode
@@ -1295,7 +1284,7 @@ check for an existing element, to avoid duplication. For example:
1295@end smallexample 1284@end smallexample
1296 1285
1297@noindent 1286@noindent
1298or like this, using @code{add-to-list} (@pxref{Setting Variables}): 1287or like this, using @code{add-to-list} (@pxref{List Variables}):
1299 1288
1300@smallexample 1289@smallexample
1301@group 1290@group
@@ -1533,16 +1522,14 @@ minor modes.
1533@subsection Mode Line Basics 1522@subsection Mode Line Basics
1534 1523
1535 @code{mode-line-format} is a buffer-local variable that holds a 1524 @code{mode-line-format} is a buffer-local variable that holds a
1536@dfn{mode line construct}, a kind of template, which controls the 1525@dfn{mode line construct}, a kind of template, which controls what is
1537display the mode line of the current buffer. All windows for the same 1526displayed on the mode line of the current buffer. The value of
1538buffer use the same @code{mode-line-format}, so their mode lines 1527@code{header-line-format} specifies the buffer's header line in the
1539appear the same---except for scrolling percentages, and line and 1528same way. All windows for the same buffer use the same
1540column numbers, since those depend on point and on how the window is 1529@code{mode-line-format} and @code{header-line-format}.
1541scrolled. The value of @code{header-line-format} specifies the 1530
1542buffer's header line in the same way, with a mode line construct. 1531 For efficiency, Emacs does not continuously recompute the mode
1543 1532line and header line of a window. It does so when circumstances
1544 For efficiency, Emacs does not recompute the mode line and header
1545line of a window in every redisplay. It does so when circumstances
1546appear to call for it---for instance, if you change the window 1533appear to call for it---for instance, if you change the window
1547configuration, switch buffers, narrow or widen the buffer, scroll, or 1534configuration, switch buffers, narrow or widen the buffer, scroll, or
1548change the buffer's modification status. If you modify any of the 1535change the buffer's modification status. If you modify any of the
@@ -1552,7 +1539,6 @@ how text is displayed (@pxref{Display}), you may want to force an
1552update of the mode line so as to display the new information or 1539update of the mode line so as to display the new information or
1553display it in the new way. 1540display it in the new way.
1554 1541
1555@c Emacs 19 feature
1556@defun force-mode-line-update &optional all 1542@defun force-mode-line-update &optional all
1557Force redisplay of the current buffer's mode line and header line. 1543Force redisplay of the current buffer's mode line and header line.
1558The next redisplay will update the mode line and header line based on 1544The next redisplay will update the mode line and header line based on
@@ -1589,15 +1575,17 @@ defined to have mode-line constructs as their values.
1589@table @code 1575@table @code
1590@cindex percent symbol in mode line 1576@cindex percent symbol in mode line
1591@item @var{string} 1577@item @var{string}
1592A string as a mode-line construct appears verbatim in the mode line 1578A string as a mode-line construct appears verbatim except for
1593except for @dfn{@code{%}-constructs} in it. These stand for 1579@dfn{@code{%}-constructs} in it. These stand for substitution of
1594substitution of other data; see @ref{%-Constructs}. 1580other data; see @ref{%-Constructs}.
1595 1581
1596If the string has @code{face} properties, they are copied into the 1582If parts of the string have @code{face} properties, they control
1597mode line contents too (@pxref{Properties in Mode}). Any characters 1583display of the text just as they would text in the buffer. Any
1598in the mode line which have no @code{face} properties are displayed, 1584characters which have no @code{face} properties are displayed, by
1599by default, in the face @code{mode-line} or @code{mode-line-inactive} 1585default, in the face @code{mode-line} or @code{mode-line-inactive}
1600(@pxref{Standard Faces,,, emacs, The GNU Emacs Manual}). 1586(@pxref{Standard Faces,,, emacs, The GNU Emacs Manual}). The
1587@code{help-echo} and @code{local-map} properties in @var{string} have
1588special meanings. @xref{Properties in Mode}.
1601 1589
1602@item @var{symbol} 1590@item @var{symbol}
1603A symbol as a mode-line construct stands for its value. The value of 1591A symbol as a mode-line construct stands for its value. The value of
@@ -1612,7 +1600,9 @@ Unless @var{symbol} is marked as ``risky'' (i.e., it has a
1612non-@code{nil} @code{risky-local-variable} property), all text 1600non-@code{nil} @code{risky-local-variable} property), all text
1613properties specified in @var{symbol}'s value are ignored. This 1601properties specified in @var{symbol}'s value are ignored. This
1614includes the text properties of strings in @var{symbol}'s value, as 1602includes the text properties of strings in @var{symbol}'s value, as
1615well as all @code{:eval} and @code{:propertize} forms in it. 1603well as all @code{:eval} and @code{:propertize} forms in it. (The
1604reason for this is security: non-risky variables could be set
1605automatically from file variables without prompting the user.)
1616 1606
1617@item (@var{string} @var{rest}@dots{}) 1607@item (@var{string} @var{rest}@dots{})
1618@itemx (@var{list} @var{rest}@dots{}) 1608@itemx (@var{list} @var{rest}@dots{})
@@ -2055,10 +2045,10 @@ structure, and make @var{form} evaluate to a string that has a text
2055property. 2045property.
2056@end enumerate 2046@end enumerate
2057 2047
2058 You use the @code{local-map} property to specify a keymap. Like any 2048 You can use the @code{local-map} property to specify a keymap. This
2059keymap, it can bind character keys and function keys; but that has no 2049keymap only takes real effect for mouse clicks; binding character keys
2060effect, since it is impossible to move point into the mode line. This 2050and function keys to it has no effect, since it is impossible to move
2061keymap can only take real effect for mouse clicks. 2051point into the mode line.
2062 2052
2063 When the mode line refers to a variable which does not have a 2053 When the mode line refers to a variable which does not have a
2064non-@code{nil} @code{risky-local-variable} property, any text 2054non-@code{nil} @code{risky-local-variable} property, any text
@@ -2889,6 +2879,10 @@ Used (typically) for constant names.
2889@vindex font-lock-preprocessor-face 2879@vindex font-lock-preprocessor-face
2890Used (typically) for preprocessor commands. 2880Used (typically) for preprocessor commands.
2891 2881
2882@item font-lock-negation-char-face
2883@vindex font-lock-negation-char-face
2884Used (typically) for easily-overlooked negation characters.
2885
2892@item font-lock-warning-face 2886@item font-lock-warning-face
2893@vindex font-lock-warning-face 2887@vindex font-lock-warning-face
2894Used (typically) for constructs that are peculiar, or that greatly 2888Used (typically) for constructs that are peculiar, or that greatly
@@ -3044,7 +3038,7 @@ closely related, and often getting one of them to work will appear to
3044make the other also work. However, for reliable results you must 3038make the other also work. However, for reliable results you must
3045attend explicitly to both aspects. 3039attend explicitly to both aspects.
3046 3040
3047 There are two ways to ensure correct identification of multiline 3041 There are three ways to ensure correct identification of multiline
3048constructs: 3042constructs:
3049 3043
3050@itemize 3044@itemize
@@ -3055,6 +3049,10 @@ property on the construct when it is added to the buffer.
3055Use @code{font-lock-fontify-region-function} hook to extend the scan 3049Use @code{font-lock-fontify-region-function} hook to extend the scan
3056so that the scanned text never starts or ends in the middle of a 3050so that the scanned text never starts or ends in the middle of a
3057multiline construct. 3051multiline construct.
3052@item
3053Add a function to @code{font-lock-extend-region-functions} that does
3054the @emph{identification} and extends the scan so that the scanned
3055text never starts or ends in the middle of a multiline construct.
3058@end itemize 3056@end itemize
3059 3057
3060 There are three ways to do rehighlighting of multiline constructs: 3058 There are three ways to do rehighlighting of multiline constructs:
@@ -3144,7 +3142,7 @@ earlier line.
3144 You can enlarge (or even reduce) the region to fontify by setting 3142 You can enlarge (or even reduce) the region to fontify by setting
3145one the following variables: 3143one the following variables:
3146 3144
3147@defvar font-lock-extend-region-function 3145@defvar font-lock-extend-after-change-region-function
3148This buffer-local variable is either @code{nil} or a function for 3146This buffer-local variable is either @code{nil} or a function for
3149Font-Lock to call to determine the region to scan and fontify. 3147Font-Lock to call to determine the region to scan and fontify.
3150 3148