File tree 3 files changed +24
-3
lines changed
3 files changed +24
-3
lines changed Original file line number Diff line number Diff line change @@ -982,6 +982,11 @@ This works like 'dolist', but reports progress similar to
982
982
This works like 'delete-frame-functions', but runs after the frame to
983
983
be deleted has been made dead and removed from the frame list.
984
984
985
+ ---
986
+ ** The function 'provided-mode-derived-p' was extended to support aliases.
987
+ The function now returns non-nil when the argument MODE is derived
988
+ from any alias of any of MODES.
989
+
985
990
+++
986
991
** New frame focus state inspection interface.
987
992
The hooks 'focus-in-hook' and 'focus-out-hook' are now obsolete.
Original file line number Diff line number Diff line change @@ -1918,11 +1918,15 @@ Only affects hooks run in the current buffer."
1918
1918
; ; PUBLIC: find if the current mode derives from another.
1919
1919
1920
1920
(defun provided-mode-derived-p (mode &rest modes )
1921
- " Non-nil if MODE is derived from one of MODES.
1921
+ " Non-nil if MODE is derived from one of MODES or their aliases .
1922
1922
Uses the `derived-mode-parent' property of the symbol to trace backwards.
1923
1923
If you just want to check `major-mode' , use `derived-mode-p' ."
1924
- (while (and (not (memq mode modes))
1925
- (setq mode (get mode 'derived-mode-parent ))))
1924
+ (while
1925
+ (and
1926
+ (not (memq mode modes))
1927
+ (let* ((parent (get mode 'derived-mode-parent ))
1928
+ (parentfn (symbol-function parent)))
1929
+ (setq mode (if (and parentfn (symbolp parentfn)) parentfn parent)))))
1926
1930
mode)
1927
1931
1928
1932
(defun derived-mode-p (&rest modes )
Original file line number Diff line number Diff line change 61
61
(quote
62
62
(0 font-lock-keyword-face ))))))))
63
63
64
+ (ert-deftest provided-mode-derived-p ()
65
+ ; ; base case: `derived-mode' directly derives `prog-mode'
66
+ (should (progn
67
+ (define-derived-mode derived-mode prog-mode " test" )
68
+ (provided-mode-derived-p 'derived-mode 'prog-mode )))
69
+ ; ; edge case: `derived-mode' derives an alias of `prog-mode'
70
+ (should (progn
71
+ (defalias 'parent-mode
72
+ (if (fboundp 'prog-mode ) 'prog-mode 'fundamental-mode ))
73
+ (define-derived-mode derived-mode parent-mode " test" )
74
+ (provided-mode-derived-p 'derived-mode 'prog-mode ))))
75
+
64
76
(ert-deftest number-sequence-test ()
65
77
(should (= (length
66
78
(number-sequence (1- most-positive-fixnum) most-positive-fixnum))
You can’t perform that action at this time.
0 commit comments