Quando dovrei usare with-eval-after-load nei miei file di configurazione?


15

Ho esaminato i miei file di configurazione e volevo fare un po 'di pulizia.

La mia comprensione with-eval-after-loadera che il suo corpo sarebbe stato valutato subito dopo il caricamento del relativo pacchetto. Mentre pulivo i miei file di configurazione e li dividevo ancora di più, volevo racchiudere ogni configurazione di pacchetto con with-eval-after-load. Tutto è andato come previsto fino a quando ho allegato la configurazione per helme helm-projectile.

Ecco cosa avevo in mente ( lisp / init-helm.el ):

(with-eval-after-load 'helm
  (setq helm-mode-line-string "")
  (add-to-list 'helm-sources-using-default-as-input 'helm-source-man-pages)
  (define-key global-map (kbd "C-c m") 'helm-imenu)
  (define-key global-map (kbd "C-x b") 'helm-buffers-list))

(with-eval-after-load 'helm-command
  (global-set-key (kbd "M-x") 'helm-M-x))

(with-eval-after-load 'helm-projectile
  (helm-projectile-on))

Dopo aver riavviato Emacs, ottengo questo problema con le dimensioni della finestra:

emacs-window-size-problema

Ecco come ridimensiono la mia finestra:

(set-frame-parameter nil 'fullscreen 'fullboth)

Immagino di aver with-eval-after-loadfatto un uso improprio , come potremmo disinfettare la sua configurazione di Emacs e assicurarsi che nulla si rompa, indipendentemente dal pacchetto installato?


Questo è assolutamente bizzarro. (Forse un bug?)
PythonNut,

Hai idea di cosa potrebbe essere collegato? Sto usando la porta OS X di railwaycat e non voglio aggiungere un problema a cui questo non appartiene :).
Mathieu Marques,

8
Ho provato a utilizzare una volta with-eval-after-loadtutte le mie personalizzazioni relative al pacchetto. Poi ho visto la luce e ho iniziato a usarlo use-package.
itsjeyd

@itsjeyd Sembra davvero molto utile e conveniente! Mi sono imbattuto in qualche problema: ho commentato (package-initialize)e sostituito con (require 'use-package)ma otterrò Errore file: Impossibile aprire il file di caricamento, nessun file o directory di questo tipo, utilizzare il pacchetto al riavvio di Emacs. Eppure, una volta avviato Emacs, posso valutare (require 'use-package)senza problemi. Alla fine, ho anche provato with-eval-after-load, sempre lo stesso errore. Il file Leggimi non è molto chiaro su come installare use-package quando si utilizzano pacchetti da package.el.
Mathieu Marques,

1
Mostraci la tua .emacs, preferibilmente una versione ridotta che dimostra il problema con il minor numero di righe e il minor numero possibile di pacchetti esterni. Questo probabilmente ha a che fare con la tempistica della configurazione del frame rispetto al carico del pacchetto durante l' avvio . Ma senza vedere il tuo codice, non c'è molto che possiamo fare. Dicci anche quale versione di Emacs stai usando.
Gilles 'SO- smetti di essere malvagio'

Risposte:


2

Uso with-eval-after-loadmolto, principalmente per aggiungere o rimuovere elementi da o verso elenchi dopo aver valutato i valori predefiniti. In questo modo non devo tenere traccia delle modifiche ai valori predefiniti.

Per quanto riguarda il problema con l' helminizializzazione, la documentazione raccomanda di (require 'helm-config)essere presente nelle init.elproprie dipendenze.

Ho scoperto che è più semplice richiedere solo helm-configdurante l'inizializzazione piuttosto che fare affidamento autoload, soprattutto perché lo avrei caricato quasi immediatamente quasi sempre.


Da allora sono cambiato da usare use-packagee, anche se richiedo, helm-configho ancora lo stesso problema. Ecco la mia configurazione di configurazione aggiornata: bitbucket.org/angrybacon/dotemacs/src .
Mathieu Marques,

1

Si scopre che non aveva nulla a che fare con l' helminizializzazione (o poco).

Nella mia ricerca eterna per ottimizzare i tempi di avvio di Emacs, ho spostato tutte le cose relative all'interfaccia all'inizio della mia configurazione. Ciò include lo pseudo schermo intero che utilizzo.

Mettere la linea corrispondente prima che venisse caricato il lisp pesante risolveva il mio problema.

Ecco la mia configurazione per riferimento .

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.