/ / Lista de modos primarios de Emacs - emacs, elisp, mode

Lista de modos principales de Emacs: modo emacs, elisp,

En emacs, ¿es posible obtener una lista de modos primarios para un modo derivado?

Encontré derivado-modo-p, pero esto solo me permite probar si un modo se deriva de otro.

Respuestas

7 para la respuesta № 1

Cada el símbolo tiene una lista de propiedades y para modos derivados, esta lista incluye el componente derived-mode-parent que indica de qué modo se derivó. Parece ser solo un símbolo.

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

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

No veo cómo podría haber más de un padre, nunca.

Aquí hay una demostración de una cadena transitiva de padres.

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

... o, simplemente por diversión, una versión recursiva:

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