/ / Emacs списък на родителски режими - emacs, elisp, режим

Emacs списък на режимите родител - emacs, elisp, режим

В emacs е възможно да се получи списък с родителски режими за производен режим?

Намерих производен режим-p, но това само ми позволява да тествам дали режимът е получен от друг.

Отговори:

7 за отговор № 1

всеки символ има списък със свойства и за извлечените режими, този списък включва компонента derived-mode-parent което указва от кой режим е получен. Изглежда, че е само един символ.

(define-derived-mode nst-mode text-mode "Testing")
=> nst-mode

(get "nst-mode "derived-mode-parent)
=> text-mode

Не виждам как може да има повече от един родител.

Ето демонстрация на преходна верига от родители.

(define-derived-mode rope nil "Victim of mouse")
(define-derived-mode mouse rope "Victim of cat")
(define-derived-mode cat mouse "Victim of dog")
(define-derived-mode dog cat "Enough already")

(let ((mode "dog) parents)
(while mode
(setq parents (cons mode parents)
mode (get mode "derived-mode-parent)))
(reverse parents))

=> (dog cat mouse rope)

... или, само за забавление, рекурсивна версия:

(defun derived-mode-parents (mode)
(and mode
(cons mode (derived-mode-parents
(get mode "derived-mode-parent)))))

(derived-mode-parents "dog)
=> (dog cat mouse rope)