Es gibt bestimmte Dinge wie die Anzeige von abschließenden Leerzeichen, die Anzeige von Puffergrenzen, regenbogenfarbene Begrenzer und vieles mehr, die ich in den meisten Modi oder vielmehr in allen programmier- und textbezogenen Modi aktivieren möchte (weil abschließende Leerzeichen in, B. ediff-mode
mit dem Hauptmodus kollidieren, anstatt einen globalisierten Nebenmodus mit Ausnahmeregeln zu verwenden. Da die meisten Modi von einem prog-mode
oder abgeleitet text-mode
sind und die betreffende Funktion zu beiden hinzugefügt wird prog-mode-hook
und text-mode-hook
funktioniert, gibt es jedoch genügend Modi, die dieser Spezifikation nicht folgen, wie z. B. css-mode
oder LaTeX-mode
.
Ich möchte einen Hook definieren, der vorerst alle diese Modi umfasst, um nur einem Hook Funktionen hinzuzufügen. Nennen wir es non-special-mode-hook
(um es zu unterscheiden special-mode-hook
). Wie kann ich einen solchen Hook erstellen, der für alle Hauptmodi ausgeführt wird, für die er gemacht ist?
Antworten:
Gruppieren Sie diese Einstellungen einfach zu einer Funktion und fügen Sie diese Funktion allen relevanten Hook-Funktionen hinzu:
Kein anderer Weg, dies zu tun, wäre prägnanter: Was auch immer passiert, irgendwo werden Sie entweder eine Whitelist oder eine Blacklist von Modi haben. In der Praxis gibt es nur wenige Modi, die zur Liste hinzugefügt werden müssen. Ich empfehle daher, die Dinge einfach zu halten.
In meiner eigenen Konfiguration verwende ich genau diesen Trick , um die Konfiguration mehrerer lisp-orientierter Modi zu vereinheitlichen.
quelle
derived-mode-hook-name
.(dolist ...)
vs(add-hook ...)
<repeat>. Ich würde nur mit meinem haften , wenn Beibehaltungsmodus spezifischen getrennte Änderungen (Datei-per-Modususe-package
,el-get
). Beide Lösungen sind alles aus einer Hand, jedoch aus unterschiedlichen Blickwinkeln.APPEND
Argument angebenadd-hook
. Daran ist nichts auszusetzen. seien Sie sich dessen bewusst, falls die Bestellung wichtig ist.Sie können eine Funktion hinzufügen
after-change-major-mode-hook
, die prüft, ob der neue Modus interessant ist (möglicherweise durchgehend(not (derived-mode-p 'special-mode))
) und wenn ja, ausgeführt wirdnon-special-mode-hook
.quelle
fundamental-mode
Text verwenden , aber mehr als nur anzeigen), aber ein bisschen zu magisch für meinen Geschmack. Daher die Gegenstimme.Ich habe oft das @ sanityinc-Muster ausgeführt, bei dem ich meine Einstellungen und Nebenmodusaktivierungen in eine Defun-Funktion eingebunden und Hooks durchgeschleift habe, um sie aufzurufen, aber ich wollte einen saubereren Ansatz, also habe ich dieses Makro geschrieben:
Hinweis: Ich bin
dash.el
für die Sauberkeit, aber es könnte leicht angepasst werden, um zu verwenden(dolist)
.Dann können Sie gruppierte Modi als Listenvariablen definieren und wie folgt verwenden:
quelle
derived-mode-hook-name
, um den Namen der Hook-Variablen eines Modus abzurufen, wodurch derintern
Trick vermieden wird .derived-mode-hook-name
. schöner tipp!Anstatt einen neuen Hook zu definieren, der für alle diese nicht abgeleiteten Modi funktioniert , können Sie Folgendes tun.
Sie müssen es weiterhin allen Modi hinzufügen, aber indem Sie Ihre Funktion so definieren, dass sie alle Modi umfasst, müssen Sie nur eine Definition ändern, wenn Sie zusätzliche Funktionen hinzufügen oder entfernen.
quelle
Vielleicht können Sie dies versuchen:
quelle