после-init-hook против eval-after-load / with-eval-after-load

13

Я нашел довольно полезный принцип работы пакетов в Emacs 24 , однако я хотел бы получить окончательный ответ от опытного пользователя или разработчика ядра о том, какой из них на самом деле предпочтителен в типичном случае 24.4.

Afaik, (add-hook 'after-init-hook ...)это так называемый грубый подход к настройке пакетов. Тем не менее, eval-after-loadи его более синтаксически сладкий with-eval-after-loadкажется более подходящим для более динамичной и мелкозернистой конфигурации, которая хорошо сочетается с постепенной, отдельной и отложенной загрузкой расширений.

Правильно ли я понимаю? Что еще я должен иметь в виду?

Эрик Каплун
источник

Ответы:

11

Afaik, (add-hook 'after-init-hook ...)это так называемый грубый подход к настройке пакетов.

Нет. Если вы хотите сконфигурировать пакеты в вашем файле инициализации, типичным подходом является вызов (package-initialize)в верхней части файла, а затем выполнить настройку. after-init-hookнеоправданно сложен для этой цели.

Тем не менее, eval-after-loadи его более синтаксически сладкий with-eval-after-loadкажется более подходящим для более динамичной и мелкозернистой конфигурации, которая хорошо сочетается с постепенной, отдельной и отложенной загрузкой расширений.

(with-)eval-after-loadиспользуется для вещей, которые вы хотите сделать после загрузки пакета. package-initializeне загружает пакеты, он только «готовит» их (загружает их автозагрузки).

Если вы используете eval-after-loadкаждый набор конфигураций, вам не нужно звонить (package-initialize)сверху. Но то, что обычно делают люди, - это вызов (package-initialize), чтобы большинство конфигураций можно было записать прямо в файл инициализации, а затем только eval-after-loadкод, который очень длинный или зависит от загружаемого пакета.

Malabarba
источник
но все равно можно поставить все под eval-after-loadлюбой пакет, верно, и не использовать (package-initialize)вообще?
Эрик Каплун
@ErikAllik Да. Если вы используете eval-after-load для каждого набора конфигураций, вам не нужно вызывать (package-initialize) сверху.
Малабарба