aboutsummaryrefslogtreecommitdiffstats
path: root/lisp/emacs-lisp/easy-mmode.el
diff options
context:
space:
mode:
Diffstat (limited to 'lisp/emacs-lisp/easy-mmode.el')
-rw-r--r--lisp/emacs-lisp/easy-mmode.el131
1 files changed, 0 insertions, 131 deletions
diff --git a/lisp/emacs-lisp/easy-mmode.el b/lisp/emacs-lisp/easy-mmode.el
index 2dde355908..87ce0cc9c2 100644
--- a/lisp/emacs-lisp/easy-mmode.el
+++ b/lisp/emacs-lisp/easy-mmode.el
@@ -383,137 +383,6 @@ CSS contains a list of syntax specifications of the form (CHAR . SYNTAX).
;;;
-;;; A "macro-only" reimplementation of define-derived-mode.
-;;;
-
-;;;###autoload
-(defmacro define-derived-mode (child parent name &optional docstring &rest body)
- "Create a new mode as a variant of an existing mode.
-
-The arguments to this command are as follow:
-
-CHILD: the name of the command for the derived mode.
-PARENT: the name of the command for the parent mode (e.g. `text-mode').
-NAME: a string which will appear in the status line (e.g. \"Hypertext\")
-DOCSTRING: an optional documentation string--if you do not supply one,
- the function will attempt to invent something useful.
-BODY: forms to execute just before running the
- hooks for the new mode.
-
-Here is how you could define LaTeX-Thesis mode as a variant of LaTeX mode:
-
- (define-derived-mode LaTeX-thesis-mode LaTeX-mode \"LaTeX-Thesis\")
-
-You could then make new key bindings for `LaTeX-thesis-mode-map'
-without changing regular LaTeX mode. In this example, BODY is empty,
-and DOCSTRING is generated by default.
-
-On a more complicated level, the following command uses `sgml-mode' as
-the parent, and then sets the variable `case-fold-search' to nil:
-
- (define-derived-mode article-mode sgml-mode \"Article\"
- \"Major mode for editing technical articles.\"
- (setq case-fold-search nil))
-
-Note that if the documentation string had been left out, it would have
-been generated automatically, with a reference to the keymap."
-
- (let* ((child-name (symbol-name child))
- (map (intern (concat child-name "-map")))
- (syntax (intern (concat child-name "-syntax-table")))
- (abbrev (intern (concat child-name "-abbrev-table")))
- (hook (intern (concat child-name "-hook"))))
-
- (unless parent (setq parent 'fundamental-mode))
-
- (when (and docstring (not (stringp docstring)))
- ;; DOCSTRING is really the first command and there's no docstring
- (push docstring body)
- (setq docstring nil))
-
- (unless (stringp docstring)
- ;; Use a default docstring.
- (setq docstring
- (format "Major mode derived from `%s' by `define-derived-mode'.
-Inherits all of the parent's attributes, but has its own keymap,
-abbrev table and syntax table:
-
- `%s', `%s' and `%s'
-
-which more-or-less shadow %s's corresponding tables."
- parent map syntax abbrev parent)))
-
- (unless (string-match (regexp-quote (symbol-name hook)) docstring)
- ;; Make sure the docstring mentions the mode's hook
- (setq docstring
- (concat docstring
- (if (eq parent 'fundamental-mode)
- "\n\nThis mode "
- (concat
- "\n\nIn addition to any hooks its parent mode "
- (if (string-match (regexp-quote (format "`%s'" parent))
- docstring) nil
- (format "`%s' " parent))
- "might have run,\nthis mode "))
- (format "runs the hook `%s'" hook)
- ", as the final step\nduring initialization.")))
-
- (unless (string-match "\\\\[{[]" docstring)
- ;; And don't forget to put the mode's keymap
- (setq docstring (concat docstring "\n\n\\{" (symbol-name map) "}")))
-
- `(progn
- (defvar ,map (make-sparse-keymap))
- (defvar ,syntax (make-char-table 'syntax-table nil))
- (defvar ,abbrev)
- (define-abbrev-table ',abbrev nil)
- (put ',child 'derived-mode-parent ',parent)
-
- (defun ,child ()
- ,docstring
- (interactive)
- ; Run the parent.
- (combine-run-hooks
-
- (,parent)
- ; Identify special modes.
- (put ',child 'special (get ',parent 'special))
- ; Identify the child mode.
- (setq major-mode ',child)
- (setq mode-name ,name)
- ; Set up maps and tables.
- (unless (keymap-parent ,map)
- (set-keymap-parent ,map (current-local-map)))
- (let ((parent (char-table-parent ,syntax)))
- (unless (and parent (not (eq parent (standard-syntax-table))))
- (set-char-table-parent ,syntax (syntax-table))))
- (when local-abbrev-table
- (mapatoms
- (lambda (symbol)
- (or (intern-soft (symbol-name symbol) ,abbrev)
- (define-abbrev ,abbrev (symbol-name symbol)
- (symbol-value symbol) (symbol-function symbol))))
- local-abbrev-table))
-
- (use-local-map ,map)
- (set-syntax-table ,syntax)
- (setq local-abbrev-table ,abbrev)
- ; Splice in the body (if any).
- ,@body)
- ; Run the hooks, if any.
- (run-hooks ',hook)))))
-
-;; Inspired from derived-mode-class in derived.el
-(defun easy-mmode-derived-mode-p (mode)
- "Non-nil if the current major mode is derived from MODE.
-Uses the `derived-mode-parent' property of the symbol to trace backwards."
- (let ((parent major-mode))
- (while (and (not (eq parent mode))
- (setq parent (get parent 'derived-mode-parent))))
- parent))
-
-
-;;;
;;; easy-mmode-define-navigation
;;;