Wann sollte ich with-eval-after-load in meinen Konfigurationsdateien verwenden?

15

Ich ging meine Konfigurationsdateien durch und wollte etwas aufräumen.

Mein Verständnis with-eval-after-loadwar, dass sein Körper sofort ausgewertet wird, nachdem das zugehörige Paket geladen wurde. Während ich meine Konfigurationsdateien bereinigte und noch mehr aufteilte, wollte ich jede Paketkonfiguration mit einschließen with-eval-after-load. Alles lief wie erwartet, bis ich die Konfiguration für helmund beigelegt habe helm-projectile.

Folgendes habe ich mir vorgestellt ( lisp / init-helm.el ):

(with-eval-after-load 'helm
  (setq helm-mode-line-string "")
  (add-to-list 'helm-sources-using-default-as-input 'helm-source-man-pages)
  (define-key global-map (kbd "C-c m") 'helm-imenu)
  (define-key global-map (kbd "C-x b") 'helm-buffers-list))

(with-eval-after-load 'helm-command
  (global-set-key (kbd "M-x") 'helm-M-x))

(with-eval-after-load 'helm-projectile
  (helm-projectile-on))

Nach dem Neustart von Emacs erhalte ich das folgende Problem mit der Fenstergröße:

Emacs-Fenster-Größe-Problem

So ändere ich die Größe meines Fensters:

(set-frame-parameter nil 'fullscreen 'fullboth)

Ich vermute, ich missbrauche with-eval-after-load, wie würde man seine Emacs-Konfiguration bereinigen und sicherstellen, dass nichts kaputt geht, egal welches Paket installiert ist?

Mathieu Marques
quelle
Das ist absolut bizarr. (Möglicherweise ein Bug?)
PythonNut
Haben Sie eine Idee, womit dies zusammenhängen könnte? Ich verwende den OS X-Port von railwaycat und möchte kein Problem hinzufügen, bei dem dies nicht dazugehört :).
Mathieu Marques
8
Ich habe versucht, with-eval-after-loadalle meine paketbezogenen Anpassungen einmal zu verpacken. Dann sah ich das Licht und begann use-packagestattdessen zu benutzen .
Es ist der
@itsjeyd Das sieht sehr praktisch und praktisch aus! Ich bin jedoch auf einige Probleme gestoßen: Ich habe es auskommentiert (package-initialize)und durch ersetzt, (require 'use-package)aber es wird ein Dateifehler angezeigt: Datei kann nicht geladen werden, keine solche Datei oder kein solches Verzeichnis, use-package beim Neustart von Emacs. Und doch, sobald Emacs gestartet ist, kann ich ohne Probleme auswerten (require 'use-package). Schließlich habe ich sogar versucht with-eval-after-load, noch den gleichen Fehler. Die Readme- Datei enthält keine genauen Informationen zur Installation use-package von Paketen aus package.el.
Mathieu Marques
1
Zeigen Sie uns Ihre .emacs, vorzugsweise eine abgespeckte Version, die das Problem mit möglichst wenigen Zeilen und möglichst wenigen externen Paketen demonstriert. Dies hängt wahrscheinlich mit dem Timing des Frame-Setups im Verhältnis zur Paketlast beim Start zusammen . Aber ohne Ihren Code zu sehen, können wir nicht viel tun. Sagen Sie uns auch, welche Version von Emacs Sie verwenden.
Gilles 'SO- hör auf böse zu sein'

Antworten:

2

Ich verwende with-eval-after-loadviel, hauptsächlich, um Elemente zu Listen hinzuzufügen oder daraus zu entfernen, nachdem die Standardwerte ausgewertet wurden. Auf diese Weise muss ich Änderungen an den Standardwerten nicht nachverfolgen.

Was das Problem mit Ihrer helmInitialisierung betrifft, wird in der Dokumentation empfohlen, dass (require 'helm-config)es in Ihren init.eloder seinen Abhängigkeiten vorhanden ist.

Ich habe festgestellt, dass es einfacher ist, es nur helm-configwährend der Initialisierung zu benötigen, als autoloadmich darauf zu verlassen , zumal ich es sowieso fast sofort die meiste Zeit laden würde.

tak
quelle
Ich habe mich seitdem geändert, um zu verwenden use-package, und auch wenn helm-configich es benötige, bekomme ich immer noch das gleiche Problem. Hier ist meine aktualisierte Konfiguration: bitbucket.org/angrybacon/dotemacs/src .
Mathieu Marques
1

Es stellte sich heraus, dass es nichts mit der helmInitialisierung (oder wenig) zu tun hatte .

In meinem immerwährenden Bestreben, die Startzeit von Emacs zu optimieren, habe ich am Anfang meiner Konfiguration alle mit der Benutzeroberfläche zusammenhängenden Dinge verschoben . Das schließt den Pseudo-Vollbildmodus ein, den ich verwende.

Das Setzen der entsprechenden Zeile, bevor irgendeines der schweren Lispes geladen wurde, behebt mein Problem.

Hier ist meine Konfiguration als Referenz .

Mathieu Marques
quelle