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?


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

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

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

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.