use-package -: init o: config


13

Esiste una regola in base alla quale l'utente può determinare se la configurazione del pacchetto richiede :inito :config?

Risposte:


13

Esiste una regola in base alla quale l'utente può determinare se la configurazione del pacchetto richiede :inito :config?

Non esiste una regola generale che si applica a tutte le impostazioni e pacchetti; devi solo familiarizzare con il significato di queste parole chiave leggendo il file README di use-package.

In sintesi, il :initblocco viene eseguito all'avvio, come se avessi collocato le sue forme costitutive al livello più alto (cioè al di fuori di una tipica chiamata a use-package) del tuo user-init-file. Ciò significa che vengono sempre eseguiti, indipendentemente dal fatto che il pacchetto corrispondente sia stato caricato o meno.

Il :configblocco, invece, viene eseguito dopo che il pacchetto corrispondente è stato caricato, tramite il eval-after-loadmeccanismo.

Pertanto, è possibile migliorare i tempi di avvio spostando le impostazioni di lunga durata applicabili da :inita :config. Se è necessario modificare una variabile definita solo dopo aver caricato un determinato pacchetto, è necessario allo stesso modo inserirla nel :configblocco. Alcune variabili, come ad esempio gnus-home-directory, devono essere impostate prima di caricare il pacchetto corrispondente, quindi devono essere inserite :init. Consiglio vivamente di inserire tutte le chiamate add-hook/ applicabili remove-hooknel :initblocco, poiché gli hook possono essere modificati anche quando non sono associati e ciò offre una maggiore modularità alla configurazione.

Spesso puoi evitare di dover capire dove posizionare una determinata impostazione utilizzando la nuova :customparola chiave o utilizzando direttamente l'interfaccia di personalizzazione semplice.


2

Non sono sicuro che esista una regola generale (a parte "usare :initper la preconfigurazione prima dell'effettivo caricamento del pacchetto e usare :configper un'altra, beh, configurazione").

Ma io stesso uso :initquando, ad esempio, voglio aggiungere altri collegamenti di tasti di modalità mappa per usare le funzioni di questo "pacchetto". E voglio ancora che questo pacchetto sia caricato in modo pigro.

Ecco l'esempio del caricamento lento di 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))))

PS: Se non c'è :defer, :commands, :modee altri che rende pacchetto caricamento lazy, quindi :inite :configdovrebbe essere più o meno lo stesso (ma :initsaranno valutati prima :))


4
La modifica dei collegamenti dei tasti in un hook di modalità significa che vengono eseguiti ogni volta che si apre un buffer in quella modalità. È necessario modificare i collegamenti dei tasti solo una volta, dopo aver caricato il pacchetto. È possibile utilizzare la :bindparola chiave per questo, o modificare i collegamenti chiave nel :configblocco.
Basilio,

Anzi, non ci ho mai pensato. Ma :configè troppo tardi - il caricamento lento non applicherà i miei binding. E :bindcon :mapnon lo lega davvero.
Maxim Kim,

3
:confignon è troppo tardi - è esattamente quando dired-mode-mapviene definito per la prima volta. Probabilmente lo stai semplicemente mettendo nella use-packageforma sbagliata di dired-rangerinvece di dired, dove dired-mode-mapè definito. Questo potrebbe anche spiegare perché il tuo :bindnon funziona. Fondamentalmente, o stai facendo qualcosa di sbagliato o hai use-packageun bug. Non confondere le combinazioni di tasti locali e eval-after-loadcon le combinazioni di tasti globali di comandi / mappe di tasti caricati automaticamente.
Basilio,

@Basil, grazie, hai ragione. Il mio problema era che ho impostato use-package-always-ensuree quando provo a usare il pacchetto diretto non riesce a recuperarlo da elpa. Ma avere :ensure nillì risolve il problema e posso impostare il caricamento del pacchetto incatenato dired-> dired-rangerusando :after.
Maxim Kim,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.