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

13

He encontrado bastante útil la forma en que funcionan los paquetes en Emacs 24 , sin embargo, me gustaría una respuesta definitiva de un usuario experimentado o un desarrollador principal sobre cuál de estos se prefiere en el caso típico en 24.4.

Afaik, (add-hook 'after-init-hook ...)es el enfoque de fuerza bruta, por así decirlo, para configurar personalizaciones para paquetes. Sin embargo, eval-after-loady su azúcar más sintáctico with-eval-after-loadparece más apropiado para una configuración más dinámica y de grano fino que juega bien con la carga gradual, separada y perezosa de extensiones.

¿Mi comprensión es correcta? ¿Qué más debo tener en cuenta?

Erik Kaplun
fuente

Respuestas:

11

Afaik, (add-hook 'after-init-hook ...)es el enfoque de fuerza bruta, por así decirlo, para configurar personalizaciones para paquetes.

No. Si desea configurar paquetes en su archivo init, el enfoque típico es llamar (package-initialize)al principio del archivo y luego hacer las configuraciones. after-init-hookes innecesariamente complicado para este propósito.

Sin embargo, eval-after-loady su azúcar más sintáctico with-eval-after-loadparece más apropiado para una configuración más dinámica y de grano fino que juega bien con la carga gradual, separada y perezosa de extensiones.

(with-)eval-after-loadse usa para las cosas que desea hacer después de cargar un paquete. package-initializeno carga los paquetes, solo los "prepara" (carga sus cargas automáticas).

Si usa eval-after-loadalrededor de cada conjunto de configuraciones, no necesitará llamar (package-initialize)desde la parte superior. Pero lo que la gente suele hacer es llamar (package-initialize), para que la mayoría de las configuraciones se puedan escribir directamente en el archivo de inicio, y luego solo el eval-after-loadcódigo que es muy largo o que depende del paquete que se está cargando.

Malabarba
fuente
pero todavía estaría bien poner todo debajo eval-after-loadde un paquete determinado, ¿verdad, y no usarlo (package-initialize)?
Erik Kaplun
@ErikAllik Sí. Si usa eval-after-load en cada conjunto de configuraciones, no necesitará llamar (package-initialize) en la parte superior.
Malabarba