Risposte:
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.
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 :))
:configè troppo tardi - il caricamento lento non applicherà i miei binding. E :bindcon :mapnon lo lega davvero.
: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.
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.
:bindparola chiave per questo, o modificare i collegamenti chiave nel:configblocco.