`(progn
(defvar ,map (make-sparse-keymap))
(defvar ,syntax (make-syntax-table))
- (defvar ,abbrev)
- (define-abbrev-table ',abbrev nil)
+ (defvar ,abbrev
+ (progn (define-abbrev-table ',abbrev nil) ,abbrev))
(put ',child 'derived-mode-parent ',parent)
(defun ,child ()
; Identify special modes.
,(when parent
`(progn
- (if (get (quote ,parent) 'special)
- (put (quote ,child) 'special t))
+ (if (get (quote ,parent) 'mode-class)
+ (put (quote ,child) 'mode-class
+ (get (quote ,parent) 'mode-class)))
; Set up maps and tables.
(unless (keymap-parent ,map)
(set-keymap-parent ,map (current-local-map)))
; Run the hooks, if any.
(run-mode-hooks ',hook)))))
-;; PUBLIC: find if the current mode derives from another.
-
-;;;###autoload
-(defun derived-mode-p (&rest modes)
- "Non-nil if the current major mode is derived from one of MODES.
-Uses the `derived-mode-parent' property of the symbol to trace backwards."
- (let ((parent major-mode))
- (while (and (not (memq parent modes))
- (setq parent (get parent 'derived-mode-parent))))
- parent))
-
;; PUBLIC: find the ultimate class of a derived mode.
(defun derived-mode-class (mode)
"Find the class of a major MODE.
A mode's class is the first ancestor which is NOT a derived mode.
Use the `derived-mode-parent' property of the symbol to trace backwards.
-Since major-modes might derive from each other and from `fundamental-mode',
-this function is not very useful. Use `derived-mode-p' instead."
+Since major-modes might all derive from `fundamental-mode', this function
+is not very useful."
(while (get mode 'derived-mode-parent)
(setq mode (get mode 'derived-mode-parent)))
mode)
+(make-obsolete 'derived-mode-class 'derived-mode-p "21.4")
\f
;;; PRIVATE