В 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)