Defining Derived Modes
----------------------
It's often useful to define a new major mode in terms of an existing
one. An easy way to do this is to use `define-derived-mode'.
- Macro: define-derived-mode variant parent name docstring body...
This construct defines VARIANT as a major mode command, using NAME
as the string form of the mode name.
The new command VARIANT is defined to call the function PARENT,
then override certain aspects of that parent mode:
* The new mode has its own keymap, named `VARIANT-map'.
`define-derived-mode' initializes this map to inherit from
`PARENT-map', if it is not already set.
* The new mode has its own syntax table, kept in the variable
`VARIANT-syntax-table'. `define-derived-mode' initializes
this variable by copying `PARENT-syntax-table', if it is not
already set.
* The new mode has its own abbrev table, kept in the variable
`VARIANT-abbrev-table'. `define-derived-mode' initializes
this variable by copying `PARENT-abbrev-table', if it is not
already set.
* The new mode has its own mode hook, `VARIANT-hook', which it
runs in standard fashion as the very last thing that it does.
(The new mode also runs the mode hook of PARENT as part of
calling PARENT.)
In addition, you can specify how to override other aspects of
PARENT with BODY. The command VARIANT evaluates the forms in BODY
after setting up all its usual overrides, just before running
`VARIANT-hook'.
The argument DOCSTRING specifies the documentation string for the
new mode. If you omit DOCSTRING, `define-derived-mode' generates
a documentation string.
Here is a hypothetical example:
(define-derived-mode hypertext-mode
text-mode "Hypertext"
"Major mode for hypertext.
\\{hypertext-mode-map}"
(setq case-fold-search nil))
(define-key hypertext-mode-map
[down-mouse-3] 'do-hyper-link)