after-init-hook vs eval-after-load / with-eval-after-load

13

Saya telah menemukan cara Paket yang cukup berguna bekerja di Emacs 24 , namun, saya ingin jawaban yang pasti dari pengguna yang berpengalaman atau pengembang inti yang mana dari ini sebenarnya lebih disukai dalam kasus khas pada 24.4.

Afaik, (add-hook 'after-init-hook ...)adalah pendekatan brute-force untuk mengatur penyesuaian untuk paket. Namun, eval-after-loaddan secara sintaksis lebih manis with-eval-after-loadtampaknya lebih sesuai untuk konfigurasi yang lebih dinamis dan berbutir halus yang cocok dengan pemuatan ekstensi secara bertahap, terpisah, dan malas.

Apakah pemahaman saya benar? Apa lagi yang harus saya ingat?

Erik Kaplun
sumber

Jawaban:

11

Afaik, (add-hook 'after-init-hook ...)adalah pendekatan brute-force untuk mengatur penyesuaian untuk paket.

Tidak. Jika Anda ingin mengonfigurasi paket dalam file init Anda, pendekatan tipikal adalah memanggil (package-initialize)di bagian atas file, dan kemudian melakukan konfigurasi. after-init-hooktidak perlu rumit untuk tujuan ini.

Namun, eval-after-loaddan secara sintaksis lebih manis with-eval-after-loadtampaknya lebih sesuai untuk konfigurasi yang lebih dinamis dan berbutir halus yang cocok dengan pemuatan ekstensi secara bertahap, terpisah, dan malas.

(with-)eval-after-loaddigunakan untuk hal-hal yang ingin Anda lakukan setelah paket dimuat. package-initializetidak memuat paket, itu hanya "mempersiapkan" mereka (memuat autoloads mereka).

Jika Anda menggunakan eval-after-loadsekitar setiap set konfigurasi, Anda tidak perlu menelepon (package-initialize)di bagian atas. Tetapi apa yang biasanya dilakukan orang adalah menelepon (package-initialize), sehingga sebagian besar konfigurasi dapat ditulis langsung ke file init, dan kemudian hanya eval-after-loadkode yang sangat panjang atau yang tergantung pada paket yang dimuat.

Malabarba
sumber
tapi tetap oke untuk meletakkan semuanya di bawah eval-after-loaduntuk paket yang diberikan, benar, dan tidak digunakan (package-initialize)sama sekali?
Erik Kaplun
@ErikAllik Ya. Jika Anda menggunakan eval-after-load di sekitar setiap set konfigurasi, Anda tidak perlu memanggil (inisialisasi paket) di bagian atas.
Malabarba