¿Cómo puedo aplazar la carga de elpy usando use-package?

9

He estado actualizando todas mis llamadas de paquete de uso ahora que :idleya no es una forma decente de diferir cosas. Por el momento, uno de los mayores éxitos en mi tiempo de carga es elpyque carga un montón de módulos adicionales. Por el momento mi invocación es bastante básica:

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

Sin embargo, esto es un desperdicio si nunca edito ningún módulo de Python. El problema es que elpy es una colección de modos, por lo que no puedo usar el formulario de enlace de modo según sea elpy-enablenecesario. Entonces, ¿qué enfoque debo usar? ¿Es solo un caso de activación en el gancho en modo python?

stsquad
fuente
Acabo de dejar de rastrear la versión MELPA de use-package. Parece: la inactividad se eliminó sin nada para reemplazarla. Solo esperaré hasta que aparezca un reemplazo.
abo-abo
@ abo-abo: puedo entender por qué: inactivo es un poco hack. Realmente para una carga a pedido adecuada, debe activarse por un evento que no sea "pasado algún tiempo".
stsquad
2
:idlese puede reemplazar con algo así como :defer 30donde el número es el retraso en segundos después del cual se debe cargar el paquete.
Kaushal Modi
@kaushalmodi, ¿eso ya funciona?
abo-abo
@ abo-abo No lo he intentado pero probablemente debería. Leí esa actualización en el commit de ayer. El archivo README también se actualiza con esa información.
Kaushal Modi

Respuestas:

6

No conozco a Elpy, así que no estoy seguro si entiendo tu problema correctamente. Sin use-packageembargo, sí sé , y recientemente sufrí el mismo problema, a saber, la eliminación de :idle.

Básicamente, hay dos salidas, dependiendo de cómo necesite usar Elpy. Puede usar un hombre pobre :idle, con run-with-idle-timer, por ejemplo,

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

Alternativamente, puede confiar en el viejo with-eval-after-loado usar python-mode-hooky retrasar Elpy hasta que el Modo Python se cargue o habilite, respectivamente:

:init (add-hook 'python-mode-hook #'elpy-enable)
;; or
:init (with-eval-after-load 'python (elpy-enable))
Lunaryorn
fuente
Si elpy fuera un modo simple, estaría bien. Sin embargo, realmente es un montón de modos menores unidos para hacer que la experiencia de Python sea más integrada. Como tal, el paso elpy-enable tiene que ejecutarse antes de cargar el primer archivo de Python para que todos los módulos estén configurados y listos.
stsquad
@stsquad with-eval-after-load debería hacer exactamente eso.
lunaryorn
1
Necesito agregar :commands elpy-enablepara que funcione. :init (with-eval-after-load 'python (elpy-enable)) :commands elpy-enable
azzamsa
3

El autor de elpy sugiere hacer esto a través de un consejo, ya que elpy-enablemodifica la python-mode-hookvariable, por lo que llamarla dentro del gancho de modo es demasiado tarde: https://github.com/jorgenschaefer/elpy/wiki/Configuration

enfoque simple:

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

utilizando use-package:

(use-package elpy :ensure t
  :defer t
  :init
  (advice-add 'python-mode :before 'elpy-enable))
T Nierath
fuente
1
Gracias por encontrar esto cuando no pude. Le he comentado al responsable de mantenimiento que, en mi humilde opinión, este es el lugar equivocado para ocultar esta información. También está en el lugar oficial README.rst, pero no en el primer y más obvio lugar para buscar: la sección de instalación de la documentación . He informado esto en el número 1606 .
Adam Spires
2

Creo que es posible con: después

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

(use-package elpy
  :ensure t
  :after python
  :config (elpy-enable))
Jaime Arias
fuente
1
No funciono para mi. Además no necesitas :defersi ya lo usas :mode. github.com/jwiegley/use-package#notes-about-lazy-loading
azzamsa