Bagaimana saya bisa menunda memuat elpy menggunakan paket-pakai?

9

Saya telah memperbarui semua panggilan paket penggunaan saya sekarang yang :idletidak lagi cara yang layak untuk menunda barang. Saat ini salah satu hit terbesar pada waktu buka saya adalah elpymemuat banyak modul tambahan. Saat ini permohonan saya agak mendasar:

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

Namun ini agak boros jika saya tidak pernah mengedit modul python. Masalahnya adalah elpy adalah kumpulan mode jadi saya tidak bisa begitu saja menggunakan formulir mode mengikat sebagaimana elpy-enableperlu dipanggil. Jadi pendekatan apa yang harus saya gunakan. Apakah ini hanya kasus pemicu pada mode python-hook?

stsquad
sumber
Saya baru saja berhenti melacak versi paket penggunaan MELPA. Sepertinya: idle dihapus tanpa ada yang menggantikannya. Saya hanya akan menunggu sampai pengganti muncul.
abo-abo
@ abo-abo: Saya bisa mengerti mengapa,: idle sedikit meretas. Benar-benar untuk memuat sesuai permintaan itu harus dipicu oleh acara selain "beberapa waktu berlalu".
stsquad
2
:idledapat diganti dengan sesuatu seperti di :defer 30mana nomor tersebut adalah penundaan dalam hitungan detik setelah paket harus dimuat.
Kaushal Modi
@kaushalmodi, apakah itu sudah berfungsi?
abo-abo
@ abo-abo Saya belum mencoba tetapi mungkin harus. Saya membaca pembaruan itu di komit kemarin. README juga diperbarui dengan info itu.
Kaushal Modi

Jawaban:

6

Saya tidak tahu Elpy, jadi saya tidak yakin apakah saya memahami masalah Anda dengan benar. Saya tahu use-package, dan baru-baru ini menderita masalah yang sama, yaitu penghapusan :idle.

Pada dasarnya, ada dua jalan keluar, tergantung pada bagaimana Anda perlu menggunakan Elpy. Anda dapat menggunakan pria miskin :idle, dengan run-with-idle-timer, misalnya

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

Atau, Anda bisa mengandalkan lama yang baik with-eval-after-loadatau menggunakan python-mode-hookdan menunda Elpy sampai setelah Mode Python dimuat atau diaktifkan masing-masing:

:init (add-hook 'python-mode-hook #'elpy-enable)
;; or
:init (with-eval-after-load 'python (elpy-enable))
lunaryorn
sumber
Jika elpy adalah mode sederhana, itu akan baik-baik saja. Namun sebenarnya ini adalah sejumlah kecil mode yang dijahit bersama untuk membuat pengalaman python lebih terintegrasi. Dengan demikian langkah elpy-enable harus dijalankan sebelum file python pertama dimuat sehingga semua modul dikonfigurasikan dan siap.
stsquad
@stsquad dengan-eval-after-load harus melakukan hal itu.
lunaryorn
1
Saya perlu menambahkan :commands elpy-enableuntuk membuatnya berfungsi. :init (with-eval-after-load 'python (elpy-enable)) :commands elpy-enable
azzamsa
3

Penulis elpy menyarankan untuk melakukan ini melalui saran, karena elpy-enablememodifikasi python-mode-hookvariabel, sehingga memanggilnya di dalam mode-hook sudah terlambat: https://github.com/jorgenschaefer/elpy/wiki/Configuration

pendekatan sederhana:

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

menggunakan use-package:

(use-package elpy :ensure t
  :defer t
  :init
  (advice-add 'python-mode :before 'elpy-enable))
T Nierath
sumber
1
Terima kasih telah menemukan ini ketika saya tidak bisa. Saya telah memberikan umpan balik kepada pengelola bahwa IMHO ini adalah tempat yang salah untuk menyembunyikan informasi ini. Itu juga di resmi README.rst, tetapi tidak di tempat pertama dan paling jelas untuk melihat: bagian instalasi dokumentasi . Saya telah melaporkan ini dalam edisi # 1606 .
Adam Spires
2

Saya pikir itu mungkin dengan: setelah

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

(use-package elpy
  :ensure t
  :after python
  :config (elpy-enable))
Jaime Arias
sumber
1
Tidak bekerja untuk saya. Anda juga tidak perlu :deferjika sudah menggunakannya :mode. github.com/jwiegley/use-package#notes-about-lazy-loading
azzamsa