Pregunta

¿Cómo se enumeran los modos menores activos en emacs?

¿Fue útil?

Solución

C-h m o M-x describe-mode muestra todos los modos activos menores (y modo mayor) y una breve descripción de cada uno.

Otros consejos

Una lista de todos los comandos de modo menor se almacena en la variable minor-mode-list . Averiguar si están activos o no se suele hacer mediante la comprobación de la variable del mismo nombre. Así que usted puede hacer algo como esto:

(defun which-active-modes ()
  "Give a message of which minor modes are enabled in the current buffer."
  (interactive)
  (let ((active-modes))
    (mapc (lambda (mode) (condition-case nil
                             (if (and (symbolp mode) (symbol-value mode))
                                 (add-to-list 'active-modes mode))
                           (error nil) ))
          minor-mode-list)
    (message "Active modes are %s" active-modes)))

Nota:. Esto sólo funciona para el búfer en uso (debido a que los modos menores podrían estar sólo disponible en algunas memorias intermedias)

describe-mode de alguna manera puede llegar a una lista de modos menores habilitados, ¿por qué no iba a hacerlo? Así que después de leer su código fuente me di cuenta de que obtiene la lista de modos menores activos tanto de minor-mode-list y minor-mode-alist. Utilizando dash.el biblioteca de listas de manipulación 3 ª parte Vine con este código:

(--filter (and (boundp it) (symbol-value it)) minor-mode-list)

Así, por ejemplo, para desactivar todos los modos menores, usar -each :

(--each (--filter (and (boundp it) (symbol-value it)) minor-mode-list)
        (funcall it -1))

No se olvide de guardar la lista de modos menores en una variable, de lo contrario tendría que reiniciar Emacs o permitirles por la memoria.

Aquí es un simple fragmento alternativa similar a algunos de los métodos que ya han sido abordadas en otras respuestas:

  
(delq nil
  (mapcar
    (lambda (x)
      (let ((car-x (car x)))
        (when (and (symbolp car-x) (symbol-value car-x))
          x)))
    minor-mode-alist))

Si desea programación hacer algo con todos los tampones que tienen un cierto modo activo, entonces la mejor solución más limpia, más minimalista,, incorporado es el siguiente:

(dolist ($buf (buffer-list (current-buffer)))
  (with-current-buffer $buf
    (when some-buffer-local-minor-or-major-mode-variable-you-want-to-find
      (message "x %s" $buf))))

Se hace lo siguiente:

  1. Recuperar una lista de todos los tampones vía buffer-list, con el tampón activa en ese momento a la cabeza de la lista (por lo que se trata en primer lugar, por lo general lo que quiere, pero dejar de lado el parámetro current-buffer si no le importa).
  2. Bucle a través de la lista de buffers y asignar a cada nombre del búfer a la $buf variable.
  3. Uso with-current-buffer $buf para decirle a Emacs que todo el código dentro del cuerpo debe funcionar como si se estaba ejecutando en el interior $buf búfer en lugar de administrar el búfer en realidad está mostrando en la pantalla.
  4. when <some mode variable> es la forma correcta para comprobar si el modo está activado; también se puede utilizar if y otros métodos. De cualquier manera, el objetivo es comprobar si un menor o principal variable de modo de major-mode se establece en el búfer. Casi todos modos definen una variable a través de un modo, que "definición" de forma automática hace que se cree una variable local al búfer llamado así por el modo, que es cómo funciona esto. Y si no tienen una variable estándar, mirar su propio código fuente para ver cómo su código de "cambiar" determina cómo alternar y apagarlos. 99% de ellos utilizan la existencia de variables de su modename (y si no lo hacen, sugiero que la presentación de informes como un error al autor del modo). Por ejemplo, para comprobar si tiene un buffer en modo activo espacios en blanco, que diría when whitespace-mode.
  5. Después de eso, sólo se emite un mensaje a la memoria intermedia de mensajes, con una "x" y el nombre del buffer que tenía el modo activo. Ahí es donde se había puesto su propio código, para hacer lo que quería hacer con el tampón descubierto.

Disfrute! En adelante a una mayor y más limpia código Lisp!

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top