use-package -: init o: config

13

¿Existe alguna regla por la cual el usuario pueda determinar si la configuración del paquete requiere :inito no :config?

rchar01
fuente

Respuestas:

13

¿Existe alguna regla por la cual el usuario pueda determinar si la configuración del paquete requiere :inito no :config?

No existe una regla general que se aplique a todas las configuraciones y paquetes; solo necesita familiarizarse con el significado de estas palabras clave leyendo el archivo README de use-package.

En resumen, el :initbloque se ejecuta al inicio, como si hubiera colocado sus formas constituyentes en el nivel superior (es decir, fuera de una llamada típica a use-package) de su user-init-file. Esto significa que siempre se ejecutan, independientemente de si el paquete correspondiente se ha cargado o no.

El :configbloque, por otro lado, se ejecuta después de que se haya cargado el paquete correspondiente, por medio del eval-after-loadmecanismo.

Como tal, puede mejorar su tiempo de inicio moviendo la configuración aplicable de larga duración de :inita :config. Si necesita modificar una variable que solo se define después de cargar un paquete en particular, también debe colocar esto en el :configbloque. Algunas variables, como gnus-home-directory, deben establecerse antes de cargar su paquete correspondiente, por lo que deben colocarse en :init. Recomiendo encarecidamente que coloque todas las llamadas add-hook/ aplicables remove-hooken el :initbloque, ya que los ganchos se pueden modificar incluso cuando no están vinculados, y esto brinda más modularidad a su configuración.

A menudo, puede evitar tener que averiguar dónde colocar una configuración particular mediante el uso de la nueva :custompalabra clave o directamente mediante la interfaz de Personalización fácil .

Albahaca
fuente
2

No estoy seguro de si existe una regla general (aparte de "usar :initpara la preconfiguración antes de cargar el paquete real y usar :configpara otra, bueno, configuración").

Pero yo mismo lo uso :initcuando, por ejemplo, quiero agregar algunas otras combinaciones de teclas del mapa de modo para usar funciones de "este" paquete. Y todavía quiere que "este" paquete tenga una carga diferida.

Aquí está el ejemplo de carga diferida de dired-ranger:

(use-package dired-ranger
  :commands (dired-ranger-copy dired-ranger-paste dired-ranger-move)
  :init
  (add-hook 'dired-mode-hook
            (lambda ()
              (define-key dired-mode-map (kbd "M-w") 'dired-ranger-copy)
              (define-key dired-mode-map (kbd "C-y") 'dired-ranger-paste)
              (define-key dired-mode-map (kbd "C-c C-y") 'dired-ranger-move))))

PD: Si no hay :defer, :commands, :modey otros que hace que la carga del paquete perezoso, a continuación, :inity :configdebe ser más o menos lo mismo (pero :initserán evaluados antes :))

Maxim Kim
fuente
44
La modificación de las asociaciones de teclas en un enlace de modo significa que se ejecutan cada vez que abre un búfer en ese modo. Solo necesita modificar las asociaciones de teclas una vez, después de cargar el paquete. Puede usar la :bindpalabra clave para esto, o modificar las asociaciones de teclas en el :configbloque.
Albahaca
De hecho, nunca lo pensé. Pero :configes demasiado tarde: la carga diferida no aplicará mis enlaces. Y :bindcon en :maprealidad no lo une.
Maxim Kim
3
:configno es demasiado tarde, eso es exactamente cuando dired-mode-mapse define por primera vez. Probablemente solo lo esté poniendo en la use-packageforma incorrecta en dired-rangerlugar de dired, donde dired-mode-mapestá definido. Esto también podría explicar por qué su :bindno funciona. Básicamente, o estás haciendo algo mal o tienes use-packageun error. No confunda las combinaciones de teclas locales y eval-after-loadlas combinaciones de teclas globales de comandos / mapas de teclas con carga automática.
Albahaca
@Basil, gracias, tienes razón. Mi problema fue que lo configuré use-package-always-ensurey cuando trato de usar package-dird, falla al recuperarlo de elpa. Pero tener :ensure nilallí resuelve el problema y puedo configurar la carga de paquetes encadenados dired-> dired-rangerusando :after.
Maxim Kim