Init yang malas adalah init yang bagus.
(IMO)
Kapan harus digunakan with-eval-after-load
with-eval-after-load
dimuat sekali ketika tertentu fitur atau berkas yang pertama dimuat, sehingga keymap-perubahan jelas masuk ke dalam salah satu dari ini. Tidak sedikit karena keymap mungkin tidak diketahui pada waktu init [coba sesuatu seperti (define-key message-mode-map (kbd "C-c f") 'Footnote-add-footnote)
di emacs -q
]. Sebuah kait bukanlah solusi yang bagus di sini karena mengikat fungsi ke kunci setiap kali kait dimulai. Sebagai tarsius catatan, Anda dapat membaca lebih lanjut tentang mengapa tidak untuk local-set-key
di kait.
Akhirnya, perhatikan bahwa with-eval-after-load
GNU Emacs 24.4 adalah pembungkus 2 baris di eval-after-load
mana body
tidak perlu dikutip.
Kapan harus menggunakan kait
Kait adalah daftar fungsi yang dimuat setiap kali kriteria terpenuhi, misalnya mode tertentu dimulai. Penggunaan umum kait adalah untuk memuat mode minor, seperti flyspell-mode
atau hl-line-mode
. Misalnya (add-hook 'org-agenda-mode-hook 'hl-line-mode)
. Seperti yang ditunjukkan oleh Rémi , add-hooks
pintar dan akan melakukan hal yang benar bahkan jika variabel kait belum dimuat. Meskipun demikian, saya memiliki banyak klausa seperti berikut ini, yang mungkin diabaikan untuk perolehan kecepatan, tetapi memang memberikan rasa organisasi dan struktur ketergantungan:
(with-eval-after-load 'org-agenda
(add-hook 'org-agenda-mode-hook 'hl-line-mode))
Mengapa menambah kait setelah org-agenda
? Seperti biasa, C-h v org-agenda-mode-hook C-j
memberikan. Pengait didefinisikan org-agenda.el
seperti yang ditunjukkan pada *help*
.
Memuat fitur tambahan with-eval-after-load
with-eval-after-load
juga penting untuk memuat fitur tambahan. Anda mungkin ingin sesuatu seperti (with-eval-after-load 'org (require 'org-inlinetask))
memuat inlinetasks org. Untuk melihat alasannya (find-library "org-inlinetask")
. Karena org-inlinetasks.el
secara langsung (require 'org)
, semua autoload
kesenangan yang diberikan oleh pengelola Emacs yang ramah kepada Anda akan "diabaikan" dan semuanya org.el(c)
akan dimuat.
Tetapi bagaimana jika (pribadi) Anda defun
diperlukan beberapa tempat? Jika Anda benar-benar pilih-pilih, Anda bisa meletakkan defun
s di file lain di Anda load-path
dan menambahkan autoload
cookie, atau Anda dapat memberi tahu Emacs di mana menemukan fungsi dengan autoload
fungsi tersebut. Maka sesuatu seperti ini akan bekerja:
(autoload 'org-cdlatex-mode "org" "cdlatex mode from org.")
(with-eval-after-load "latex"
(add-hook 'TeX-mode-hook 'org-cdlatex-mode))
Atau Anda bisa require
org
seperti itu pada gilirannya akan menarikcdlatex
Dan, jujur, pembelotan pribadi tidak akan menjadi masalah bagi waktu init sebagian besar waktu. 1150 baris pembelaan pribadi (84 pembelaan) di saya init.el
menambahkan 0,02 atas vanilla Emacs.
Mengukur waktu inisialisasi
Cara mudah untuk memperkirakan waktu inisialisasi adalah
time emacs --eval "(kill-emacs)"
(patokan terhadap emacs -q
.
Tetapi untuk mendapatkan perkiraan yang lebih rinci dari mana kemacetan inisialisasi periksa Joe Schafer's esup
.
Akhirnya, waktu memuat tidak hilang secara ajaib. Anda hanya mendorongnya ke depan (sejauh Anda menggunakan semua fitur di setiap sesi).
with-eval-after-load
dimuat sekali , jadi perubahan keymap pergi ke sana. Kait dimuat setiap kali mode dijalankan , misalnya saat memuat file baru yang terkait dengan mode, atau bagaimanapun kait ditentukan. Anda akan memuat misalnyaflyspell-mode
atauhl-line-mode
di kail. Dalam sayainit.el
saya gunakanwith-eval-after-load
sekitar 160 kali danadd-hook
110 kali. Init malas adalah init baik (IMO).