hak po inicjacji vs eval po załadowaniu / z eval po załadowaniu

13

Znalazłem raczej użyteczny sposób, w jaki pakiety działają w Emacsie 24 , jednak chciałbym uzyskać ostateczną odpowiedź od doświadczonego użytkownika lub głównego programisty, która z nich jest preferowana w typowym przypadku 24.4.

Afaik, (add-hook 'after-init-hook ...)to tak zwane brutalne podejście do konfigurowania pakietów. Jednak eval-after-loadjego bardziej składniowy cukier with-eval-after-loadwydaje się bardziej odpowiedni dla bardziej dynamicznej i drobnoziarnistej konfiguracji, która dobrze współgra ze stopniowym, oddzielnym i leniwym ładowaniem rozszerzeń.

Czy moje rozumowanie jest prawidłowe? O czym jeszcze powinienem pamiętać?

Erik Kaplun
źródło

Odpowiedzi:

11

Afaik, (add-hook 'after-init-hook ...)to tak zwane brutalne podejście do konfigurowania pakietów.

Nie. Jeśli chcesz skonfigurować pakiety w pliku inicjującym, typowym podejściem jest wywołanie (package-initialize)na górze pliku, a następnie wykonanie konfiguracji. after-init-hookjest w tym celu niepotrzebnie skomplikowane.

Jednak eval-after-loadjego bardziej składniowy cukier with-eval-after-loadwydaje się bardziej odpowiedni dla bardziej dynamicznej i drobnoziarnistej konfiguracji, która dobrze współgra ze stopniowym, oddzielnym i leniwym ładowaniem rozszerzeń.

(with-)eval-after-loadjest używany do rzeczy, które chcesz zrobić po załadowaniu pakietu. package-initializenie ładuje pakietów, tylko je „przygotowuje” (ładuje ich autoloady).

Jeśli korzystasz z eval-after-loadkażdego zestawu konfiguracji, nie musisz dzwonić (package-initialize)u góry. Ale ludzie zwykle robią to, aby wywołać (package-initialize), aby większość konfiguracji mogła zostać zapisana bezpośrednio do pliku init, a następnie tylko eval-after-loadkod, który jest bardzo długi lub zależy od załadowanego pakietu.

Malabarba
źródło
ale nadal byłoby w porządku, aby umieścić wszystko pod eval-after-loaddowolnym pakietem, prawda i (package-initialize)w ogóle nie używać ?
Erik Kaplun,
@ErikAllik Tak. Jeśli używasz eval-after-load wokół każdego zestawu konfiguracji, nie będziesz musiał wywoływać (inicjowanie pakietu) u góry.
Malabarba