Wie kann ich das Laden von elpy mit dem use-package verschieben?

9

Ich habe jetzt alle meine Use-Package-Aufrufe aktualisiert, :idlewas keine anständige Möglichkeit mehr ist, Dinge aufzuschieben. Im Moment ist einer der größten Treffer in meiner Ladezeit, elpydass eine ganze Reihe zusätzlicher Module geladen werden . Im Moment ist meine Anrufung ziemlich einfach:

(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)))))

Dies ist jedoch ziemlich verschwenderisch, wenn ich niemals Python-Module bearbeite. Das Problem ist, dass elpy eine Sammlung von Modi ist, daher kann ich nicht einfach das Modusbindungsformular verwenden elpy-enable, wenn es aufgerufen werden muss. Welchen Ansatz sollte ich also verwenden? Handelt es sich nur um das Auslösen des Python-Modus-Hooks?

stsquad
quelle
Ich habe gerade aufgehört, die MELPA-Version des Use-Pakets zu verfolgen. Es scheint: Leerlauf wurde entfernt, ohne ihn zu ersetzen. Ich werde nur warten, bis ein Ersatz auftaucht.
abo-abo
@ abo-abo: Ich kann verstehen warum: Leerlauf ist ein bisschen ein Hack. Wirklich für ein korrektes Laden bei Bedarf sollte es durch ein anderes Ereignis als "einige Zeit vergangen" ausgelöst werden.
stsquad
2
:idlekann durch etwas ersetzt werden, bei :defer 30dem die Zahl die Verzögerung in Sekunden ist, nach der das Paket geladen werden soll.
Kaushal Modi
@kaushalmodi, funktioniert das schon?
Abo-Abo
@ abo-abo Ich habe es nicht versucht, aber es sollte wahrscheinlich. Ich habe dieses Update im gestrigen Commit gelesen. Die README-Datei wird ebenfalls mit diesen Informationen aktualisiert.
Kaushal Modi

Antworten:

6

Ich kenne Elpy nicht, daher bin ich mir nicht sicher, ob ich Ihr Problem richtig verstehe. Ich weiß es use-packagejedoch und litt kürzlich unter dem gleichen Problem, nämlich der Entfernung von :idle.

Grundsätzlich gibt es zwei Auswege, je nachdem, wie Sie Elpy verwenden müssen. Sie können entweder ein armer Menschen benutzen :idle, mit run-with-idle-timerzB

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

Alternativ können Sie sich auf gute alte Versionen verlassen with-eval-after-loadoder python-mode-hookElpy verwenden und verzögern, bis der Python-Modus geladen bzw. aktiviert ist:

:init (add-hook 'python-mode-hook #'elpy-enable)
;; or
:init (with-eval-after-load 'python (elpy-enable))
Mondhorn
quelle
Wenn Elpy ein einfacher Modus wäre, wäre es in Ordnung. Tatsächlich handelt es sich jedoch um eine Reihe von Moll-Modi, die zusammengefügt wurden, um das Python-Erlebnis besser zu integrieren. Daher muss der elpy-enable-Schritt ausgeführt werden, bevor die erste Python-Datei geladen wird, damit alle Module konfiguriert und bereit sind.
stsquad
@stsquad with-eval-after-load sollte genau das tun.
Mondhorn
1
Ich muss hinzufügen :commands elpy-enable, damit es funktioniert. :init (with-eval-after-load 'python (elpy-enable)) :commands elpy-enable
Azzamsa
3

Der Autor von elpy schlägt vor, dies über einen Rat zu tun, da elpy-enabledie python-mode-hookVariable geändert wird und der Aufruf innerhalb des Modus-Hooks zu spät ist: https://github.com/jorgenschaefer/elpy/wiki/Configuration

einfacher Ansatz:

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

mit use-package:

(use-package elpy :ensure t
  :defer t
  :init
  (advice-add 'python-mode :before 'elpy-enable))
T Nierath
quelle
1
Danke, dass du das gefunden hast, als ich es nicht konnte. Ich habe dem Betreuer Feedback gegeben , dass dies meiner Meinung nach der falsche Ort ist, um diese Informationen zu verbergen. Es befindet sich auch im offiziellen README.rst, aber nicht im ersten und offensichtlichsten Bereich: dem Installationsabschnitt der Dokumentation . Ich habe dies in Ausgabe Nr. 1606 gemeldet .
Adam Spires
2

Ich denke es ist möglich mit: nach

(use-package python
  :ensure t
  :defer t
  :mode ("\\.py\\'" . python-mode))

(use-package elpy
  :ensure t
  :after python
  :config (elpy-enable))
Jaime Arias
quelle
1
Hat bei mir nicht funktioniert. Auch brauchen :deferSie nicht, wenn Sie bereits verwenden :mode. github.com/jwiegley/use-package#notes-about-lazy-loading
azzamsa