minor-mode – Obtener lista de modos menores activos en el búfer

Pregunta:

¿Cómo obtener una lista de modos menores activos en el búfer actual?

Docs (info "(elisp)Minor Mode Conventions") dice:

 Define a variable whose name ends in ‘-mode’.  We call this the
 "mode variable".  The minor mode command should set this variable.
 The value will be ‘nil’ if the mode is disabled, and non-‘nil’ if
 the mode is enabled.  The variable should be buffer-local if the
 minor mode is buffer-local.

Terminé con:

(dolist (m minor-mode-list)
  (when (symbol-value m)
    (push m modes)))

describe-mode fuentes en describe-mode tienen notas que:

;; Older packages do not register in minor-mode-list but only in
;; minor-mode-alist.

No sé si ese punto sigue siendo válido …

Respuesta:

(mapcar #'car minor-mode-alist) la (mapcar #'car minor-mode-alist) , pero su longitud no cambia después de que desactivo un modo menor (mientras que Mx describe-mode refleja esto). Además, parece inexacto ya que no puedo encontrar algunos modos menores enumerados por Mx describe-mode .

Probé el paquete manage-minor-mode que permite a los usuarios habilitar / deshabilitar un modo menor a través de una interfaz. manager-minor-mode no tiene los problemas antes mencionados y aquí está la función que usa para buscar modos menores activos:

(defun manage-minor-mode--active-list ()
  "Get a list of which minor modes are enabled in the current buffer."
  (let ($list)
    (mapc (lambda ($mode)
            (condition-case nil
                (if (and (symbolp $mode) (symbol-value $mode))
                    (setq $list (cons $mode $list)))
              (error nil)))
          minor-mode-list)
    (sort $list 'string<)))

Leave a Comment

Your email address will not be published.

Scroll to Top

istanbul avukat

-

web tasarım