Comment puis-je différer le chargement elpy en utilisant use-package?

9

J'ai mis à jour tous mes appels de package d'utilisation maintenant ce :idlen'est plus un moyen décent de différer les choses. À l'heure actuelle, l'un des plus grands succès de mon temps de chargement est celui elpyqui charge tout un tas de modules supplémentaires. Pour le moment, mon invocation est assez basique:

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

Cependant, c'est plutôt inutile si je n'édite jamais de modules python. Le problème est qu'elpy est une collection de modes, donc je ne peux pas simplement utiliser le formulaire de liaison de mode selon les elpy-enablebesoins pour être appelé. Alors quelle approche dois-je utiliser. S'agit-il simplement d'un déclenchement sur le hook en mode python?

stsquad
la source
Je viens d'arrêter de suivre la version MELPA de use-package. Il semble: le ralenti a été supprimé sans rien pour le remplacer. J'attendrai juste qu'un remplaçant apparaisse.
abo-abo
@ abo-abo: Je peux comprendre pourquoi,: l'inactivité est un peu un hack. Vraiment, pour un chargement correct à la demande, il doit être déclenché par un événement autre que "un certain temps s'est écoulé".
stsquad
2
:idlepeut être remplacé par quelque chose comme :defer 30où le nombre est le délai en secondes après lequel le paquet doit être chargé.
Kaushal Modi
@kaushalmodi, cela fonctionne-t-il déjà?
abo-abo
@ abo-abo Je n'ai pas essayé mais ça devrait probablement. J'ai lu cette mise à jour dans le commit d'hier. Le fichier README est également mis à jour avec ces informations.
Kaushal Modi

Réponses:

6

Je ne connais pas Elpy, donc je ne sais pas si je comprends bien votre problème. Je sais use-package, cependant, et j'ai récemment souffert du même problème, à savoir la suppression de :idle.

Fondamentalement, il existe deux solutions, selon la façon dont vous devez utiliser Elpy. Vous pouvez soit utiliser un pauvre :idle, avec run-with-idle-timer, par exemple

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

Alternativement, vous pouvez vous fier au bon vieux with-eval-after-loadou utiliser python-mode-hooket retarder Elpy jusqu'à ce que le mode Python soit chargé ou activé respectivement:

:init (add-hook 'python-mode-hook #'elpy-enable)
;; or
:init (with-eval-after-load 'python (elpy-enable))
lunaryorn
la source
Si elpy était un mode simple, ce serait bien. Cependant, c'est vraiment un tas de modes mineurs assemblés pour rendre l'expérience python plus intégrée. En tant que tel, l'étape elpy-enable doit être exécutée avant le chargement du premier fichier python afin que tous les modules soient configurés et prêts.
stsquad
@stsquad with-eval-after-load devrait faire exactement cela.
lunaryorn
1
Je dois ajouter :commands elpy-enablepour que cela fonctionne. :init (with-eval-after-load 'python (elpy-enable)) :commands elpy-enable
azzamsa
3

L'auteur d'elpy suggère de le faire via un conseil, car elpy-enablemodifie la python-mode-hookvariable, donc l'appeler dans le mode-hook est trop tard: https://github.com/jorgenschaefer/elpy/wiki/Configuration

approche simple:

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

utilisant use-package:

(use-package elpy :ensure t
  :defer t
  :init
  (advice-add 'python-mode :before 'elpy-enable))
T Nierath
la source
1
Merci d'avoir trouvé ça quand je n'ai pas pu. J'ai indiqué au mainteneur que mon humble avis, ce n'est pas le bon endroit pour cacher ces informations. C'est aussi dans l'officiel README.rst, mais pas dans le premier et le plus évident endroit à regarder: la section d'installation de la documentation . J'ai signalé cela dans le numéro # 1606 .
Adam Spires
2

Je pense que c'est possible avec: après

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

(use-package elpy
  :ensure t
  :after python
  :config (elpy-enable))
Jaime Arias
la source
1
Ça n'a pas marché pour moi. De plus, vous n'avez pas besoin :defersi vous l'utilisez déjà :mode. github.com/jwiegley/use-package#notes-about-lazy-loading
azzamsa