after-init-hook vs eval-after-load / mit-eval-after-load

13

Ich habe die nützliche Funktionsweise von Paketen in Emacs 24 gefunden . Ich hätte jedoch gerne eine endgültige Antwort von einem erfahrenen Benutzer oder einem Kernentwickler, welche davon im typischen Fall von 24.4 tatsächlich bevorzugt wird.

Afaik (add-hook 'after-init-hook ...)ist der so genannte Brute-Force-Ansatz zum Einrichten von Anpassungen für Pakete. Das eval-after-loadsyntaktisch zuckrige with-eval-after-loadFormat eignet sich jedoch eher für eine dynamischere und feinkörnigere Konfiguration, die mit dem allmählichen, getrennten und langsamen Laden von Erweiterungen gut zurechtkommt.

Ist mein Verständnis korrekt? Was sollte ich sonst noch beachten?

Erik Kaplun
quelle

Antworten:

11

Afaik (add-hook 'after-init-hook ...)ist der so genannte Brute-Force-Ansatz zum Einrichten von Anpassungen für Pakete.

Nein. Wenn Sie Pakete in Ihrer Init-Datei konfigurieren möchten, rufen Sie (package-initialize)normalerweise oben in der Datei auf und nehmen dann die Konfigurationen vor. after-init-hookist zu diesem Zweck unnötig kompliziert.

Das eval-after-loadsyntaktisch zuckrige with-eval-after-loadFormat eignet sich jedoch eher für eine dynamischere und feinkörnigere Konfiguration, die mit dem allmählichen, getrennten und langsamen Laden von Erweiterungen gut zurechtkommt.

(with-)eval-after-loadwird für Aufgaben verwendet, die Sie nach dem Laden eines Pakets ausführen möchten . package-initializelädt die Pakete nicht, sondern "bereitet" sie nur vor (lädt ihre Autoloads).

Wenn Sie eval-after-loadrund um jeden Satz von Konfigurationen verwenden, müssen Sie nicht (package-initialize)an der Spitze anrufen . Normalerweise rufen (package-initialize)die Benutzer jedoch auf , sodass die meisten Konfigurationen direkt in die init-Datei geschrieben werden können, und dann nur eval-after-loadCode, der sehr lang ist oder von dem zu ladenden Paket abhängt.

Malabarba
quelle
aber es wäre immer noch in Ordnung, alles eval-after-loadfür ein bestimmtes Paket unterzubringen, richtig, und überhaupt nicht zu verwenden (package-initialize)?
Erik Kaplun
@ ErikAllik Ja. Wenn Sie eval-after-load für alle Konfigurationssätze verwenden, müssen Sie nicht oben (package-initialize) aufrufen.
Malabarba