summaryrefslogtreecommitdiff
path: root/lisp
diff options
context:
space:
mode:
Diffstat (limited to 'lisp')
-rw-r--r--lisp/subr.el10
1 files changed, 7 insertions, 3 deletions
diff --git a/lisp/subr.el b/lisp/subr.el
index 9e880bc880e..4c05111f516 100644
--- a/lisp/subr.el
+++ b/lisp/subr.el
@@ -1918,11 +1918,15 @@ Only affects hooks run in the current buffer."
;; PUBLIC: find if the current mode derives from another.
(defun provided-mode-derived-p (mode &rest modes)
- "Non-nil if MODE is derived from one of MODES.
+ "Non-nil if MODE is derived from one of MODES or their aliases.
Uses the `derived-mode-parent' property of the symbol to trace backwards.
If you just want to check `major-mode', use `derived-mode-p'."
- (while (and (not (memq mode modes))
- (setq mode (get mode 'derived-mode-parent))))
+ (while
+ (and
+ (not (memq mode modes))
+ (let* ((parent (get mode 'derived-mode-parent))
+ (parentfn (symbol-function parent)))
+ (setq mode (if (and parentfn (symbolp parentfn)) parentfn parent)))))
mode)
(defun derived-mode-p (&rest modes)