Frage

Wie stelle man die aktiven kleineren Modi in Emacs?

War es hilfreich?

Lösung

C-h m oder M-x describe-mode zeigt alle aktiven kleineren Modi (und Hauptmodus) und eine kurze Beschreibung der einzelnen.

Andere Tipps

Eine Liste aller Moll Befehle in den Variablen gespeichert wird minor-mode-list . Herauszufinden, ob sie aktiv ist oder nicht in der Regel durch die Überprüfung die Variable mit dem gleichen Namen durchgeführt wird. So können Sie etwas tun können:

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

. Hinweis: Dies funktioniert nur für den aktuellen Puffer (weil die kleineren Modi können nur in bestimmten Puffer aktiviert sein!)

describe-mode kann irgendwie mit einer Liste der aktivierten kleineren Modi kommen, warum kann mich nicht? So nach dem Quellcode zu lesen erkannte ich, dass es die Liste der aktiven kleinere Modi von beiden minor-mode-list und minor-mode-alist bekommt. Verwenden von 3rd-Party dash.el Liste Manipulation Bibliothek kam ich mit diesem Code:

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

So zum Beispiel alle kleineren Modi zu deaktivieren, verwenden Sie -each :

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

Vergessen Sie nicht, die Liste der Moll-Modi in einer Variablen zu speichern, sonst würden Sie Emacs neu zu starten oder es ihnen ermöglichen, durch den Speicher.

Hier ist eine einfache Alternative zu einigen der Verfahren, die ähnlich Schnipsel, die bereits schon in anderen Antworten angesprochen:

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

Wenn Sie auf wollen programmatisch etwas tun, mit allen Puffern, die einen bestimmten Modus aktiv, dann die besten, minimalistisch, saubersten, integrierte Lösung ist wie folgt:

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

Es geschieht Folgendes:

  1. Rufen Sie eine Liste aller Puffer über buffer-list, mit dem derzeit aktiven Puffer an der Spitze der Liste (so es zuerst behandelt wird, in der Regel, was Sie wollen, aber die current-buffer Parameter auslassen, wenn Sie kümmern sich nicht).
  2. Schleife durch die Puffer-Liste und weisen Sie jeden Puffer-Namen der Variablen $buf.
  3. Verwenden Sie with-current-buffer $buf Emacs zu sagen, dass der gesamte Code innerhalb des Körpers ausgeführt werden soll, als ob es innerhalb $buf Puffer laufen statt, was Sie wirklich auf dem Bildschirm Puffer sind angezeigt werden.
  4. when <some mode variable> ist der richtige Weg, um zu überprüfen, ob ein Modus aktiviert ist; Sie können auch if und andere solche Methoden. So oder so, ist das Ziel, zu überprüfen, ob eine kleinere oder größere-Modus des Hauptmodus Variable wird in dem Puffer eingestellt. Fast alle Modi definieren eine Variable über „definieren“ ein Modus, der automatisch bewirkt, dass sie einen Puffer-lokale Variable erstellen, nachdem der Modus genannt, die, wie ist dies funktioniert. Und wenn sie nicht über einen Standard-Variable haben, Blick auf ihrer eigenen Quellcode zu sehen, wie ihr „Toggle“ Code bestimmt, wie sie ein- und ausschalten. 99% von ihnen nutzen die Existenz ihrer MODE der Variablen (und wenn sie das nicht tun, ich Berichte deuten darauf hin, dass als Fehler des Autors Modus). Zum Beispiel, um zu überprüfen, ob ein Puffer Leerzeichen-Modus aktiv ist, würden Sie when whitespace-mode sagen.
  5. Danach gibt er einfach eine Nachricht an den Nachrichten-Puffer, mit einem „x“ und den Namen des Puffers, der Modus aktiv war. Das ist, wo Sie Ihren eigenen Code setzen würden, zu tun, was Sie mit dem entdeckten Puffer tun wollten.

Viel Spaß! Onwards zu mehr und sauberen Lisp-Code!

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top