Как я могу отложить загрузку elpy, используя use-package?


9

Я обновляю все свои вызовы пакета использования теперь, когда :idleэто уже не приличный способ отложить вещи. На данный момент одним из самых больших ударов в моем времени загрузки является elpyзагрузка целого ряда дополнительных модулей. На данный момент мой вызов довольно прост:

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

Однако это довольно расточительно, если я никогда не редактирую модули Python. Проблема в том, что elpy - это набор режимов, поэтому я не могу просто использовать форму привязки к режиму при elpy-enableнеобходимости вызова. Так какой подход я должен использовать. Это просто случай срабатывания на хуке режима Python?


Я просто перестал отслеживать версию пакета использования MELPA. Кажется: холостой ход убрали ни с чем, чтобы заменить его. Я просто подожду, пока не появится замена.
Або-або

@ abo-abo: я могу понять, почему: простоя это немного взломать. Действительно, для правильной загрузки по требованию он должен запускаться событием, отличным от «прошло некоторое время».
Stsquad

2
:idleможет быть заменено чем-то вроде, :defer 30где число - это задержка в секундах, после которой пакет должен быть загружен.
Каушал Моди

@kaushalmodi, это уже работает?
Або-або

@ abo-abo Я не пробовал, но, вероятно, должен. Я прочитал это обновление во вчерашнем коммите. README также обновляется с этой информацией.
Каушал Моди

Ответы:


6

Я не знаю Elpy, поэтому я не уверен, правильно ли я понимаю вашу проблему. Я знаю use-package, хотя и в последнее время страдал от той же самой проблемы, а именно удаления :idle.

По сути, есть два выхода, в зависимости от того, как вам нужно использовать Elpy. Вы можете использовать бедного человека :idle, run-with-idle-timerнапример, с

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

В качестве альтернативы, вы можете положиться на старый with-eval-after-loadили использовать python-mode-hookи отложить Elpy до тех пор, пока Python Mode не будет загружен или включен соответственно:

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

Если бы elpy был простым режимом, это было бы хорошо. Однако на самом деле это куча второстепенных режимов, соединенных вместе, чтобы сделать взаимодействие с Python более интегрированным. Таким образом, шаг elpy-enable необходимо выполнить до загрузки первого файла python, чтобы все модули были настроены и готовы.
Stsquad

@stsquad with-eval-after-load должен делать именно это.
lunaryorn

1
Мне нужно добавить, :commands elpy-enableчтобы это работало. :init (with-eval-after-load 'python (elpy-enable)) :commands elpy-enable
Аззамса

3

Автор elpy предлагает сделать это через совет, потому что elpy-enableизменяет python-mode-hookпеременную, поэтому вызывать ее внутри ловушки режима слишком поздно: https://github.com/jorgenschaefer/elpy/wiki/Configuration

простой подход:

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

используя use-package:

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

1
Спасибо, что нашел это, когда я не смог. Я дал отзыв сопровождающему, что ИМХО это неподходящее место, чтобы скрывать эту информацию. Это также в официальном README.rst, но не в первом и наиболее очевидном месте, чтобы посмотреть: раздел установки документации . Я сообщил об этом в выпуске № 1606 .
Адам

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.