Copyright (C) 2000-2012 |
GNU Info (elisp)Derived ModesDefining 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) automatically generated by info2www version 1.2.2.9 |