Come posso differire il caricamento di elpy usando use-package?


9

Sto aggiornando tutte le mie chiamate al pacchetto d'uso ora che :idlenon è più un modo decente per rinviare le cose. Al momento uno dei più grandi successi nel mio tempo di caricamento è elpyche carica un sacco di moduli aggiuntivi. Al momento la mia invocazione è piuttosto semplice:

(use-package elpy
  :commands elpy-enable
  :init (elpy-enable)
  :config
  (progn
    (setq elpy-rpc-backend "jedi"
          elpy-rpc-project-specific 't)
    (when (fboundp 'flycheck-mode)
      (setq elpy-modules (delete 'elpy-module-flymake elpy-modules)))))

Tuttavia, questo è piuttosto dispendioso se non modifico mai alcun modulo Python. Il problema è che elpy è una raccolta di modalità, quindi non posso semplicemente usare il modulo di associazione modalità in base elpy-enablealle necessità per essere chiamato. Quindi quale approccio dovrei usare. È solo un caso di innesco sull'hook in modalità pitone?


Ho appena smesso di tracciare la versione MELPA del pacchetto d'uso. Sembra: il minimo è stato rimosso senza nulla per sostituirlo. Aspetterò fino a quando verrà visualizzato un sostituto.
bordo del

@ abo-abo: posso capire perché,: il minimo è un po 'un trucco. In realtà, per un corretto caricamento su richiesta, dovrebbe essere attivato da un evento diverso da "Tempo trascorso".
stsquad

2
:idlepuò essere sostituito con qualcosa come :defer 30dove il numero è il ritardo in secondi dopo il quale il pacchetto deve essere caricato.
Kaushal Modi,

@kaushalmodi, funziona già?
a bordo del

@ abo-abo Non ho provato ma probabilmente dovrebbe. Ho letto quell'aggiornamento nell'impegno di ieri. Il file README viene inoltre aggiornato con tali informazioni.
Kaushal Modi,

Risposte:


6

Non conosco Elpy, quindi non sono sicuro di aver capito correttamente il tuo problema. Lo so use-package, però, e recentemente ha sofferto dello stesso problema, vale a dire la rimozione di :idle.

Fondamentalmente, ci sono due vie d'uscita, a seconda di come è necessario utilizzare Elpy. Puoi usare quello di un povero :idle, ad run-with-idle-timeres

:init (run-with-idle-timer 10 nil #'elpy-enable)

In alternativa, puoi fare affidamento su un buon vecchio with-eval-after-loado usare python-mode-hooke ritardare Elpy fino a quando rispettivamente la modalità Python viene caricata o abilitata:

:init (add-hook 'python-mode-hook #'elpy-enable)
;; or
:init (with-eval-after-load 'python (elpy-enable))

Se elpy fosse una modalità semplice, andrebbe bene. Tuttavia, in realtà sono un mucchio di modalità secondarie messe insieme per rendere più integrata l'esperienza di Python. Pertanto, il passaggio elpy-enable deve essere eseguito prima che il primo file python sia caricato in modo che tutti i moduli siano configurati e pronti.
stsquad

@stsquad with-eval-after-load dovrebbe fare esattamente questo.
lunaryorn,

1
Devo aggiungere :commands elpy-enableper farlo funzionare. :init (with-eval-after-load 'python (elpy-enable)) :commands elpy-enable
azzamsa,

3

L'autore di elpy suggerisce di farlo tramite un consiglio, perché elpy-enablemodifica la python-mode-hookvariabile, quindi chiamarla all'interno della modalità hook è troppo tardi: https://github.com/jorgenschaefer/elpy/wiki/Configuration

approccio semplice:

(package-initialize)
(advice-add 'python-mode :before 'elpy-enable)

utilizzando use-package:

(use-package elpy :ensure t
  :defer t
  :init
  (advice-add 'python-mode :before 'elpy-enable))

1
Grazie per aver trovato questo quando non potevo. Ho dato feedback al manutentore sul fatto che IMHO è il posto sbagliato per nascondere queste informazioni. È anche nel punto ufficiale README.rst, ma non nel primo e più ovvio in cui guardare: la sezione di installazione della documentazione . Ho segnalato questo nel numero 1606 .
Adam Spires,

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.