Saya ingin menambahkan kunci spesifik yang mengikat ke mode lateks:
(define-key latex-mode-map (kbd "<f6>") 'my-latex-defun)
Pada saat yang sama saya ingin mengaturnya hanya ketika mode spesifik dimuat. Jadi saya ingin tahu apakah ada preferensi (praktik terbaik) antara menggunakan kait yang sesuai ( latex-mode-hook
) untuk mencapai itu atau menggunakan klausa (with-eval-after-load "tex-mode" ...
untuk membungkus definisi pengikatan kunci. Saya menguji keduanya dan mereka bekerja dengan baik, namun saya bertanya-tanya mana yang tepat untuk melakukannya.
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).Jawaban:
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)
diemacs -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 untuklocal-set-key
di kait.Akhirnya, perhatikan bahwa
with-eval-after-load
GNU Emacs 24.4 adalah pembungkus 2 baris dieval-after-load
manabody
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
atauhl-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:Mengapa menambah kait setelah
org-agenda
? Seperti biasa,C-h v org-agenda-mode-hook C-j
memberikan. Pengait didefinisikanorg-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")
. Karenaorg-inlinetasks.el
secara langsung(require 'org)
, semuaautoload
kesenangan yang diberikan oleh pengelola Emacs yang ramah kepada Anda akan "diabaikan" dan semuanyaorg.el(c)
akan dimuat.Tetapi bagaimana jika (pribadi) Anda
defun
diperlukan beberapa tempat? Jika Anda benar-benar pilih-pilih, Anda bisa meletakkandefun
s di file lain di Andaload-path
dan menambahkanautoload
cookie, atau Anda dapat memberi tahu Emacs di mana menemukan fungsi denganautoload
fungsi tersebut. Maka sesuatu seperti ini akan bekerja: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
(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).
sumber
with-eval-after-load
tanpa kehilangan keuntungan inisialisasi malas?Selain saran Anda tentang
eval-after-load
dan menggunakan kail, izinkan saya menyarankanuse-package.el
. Anda dapat melakukan apa yang perlu Anda lakukanLaTeX tidak akan dimuat sampai setelah Anda memintanya.
Sama seperti catatan tambahan: penggunaan yang teliti
use-package
telah mengurangi waktu startup saya hingga di bawah satu detik. (Dulu butuh sekitar empat detik.)sumber
use-package
akan dikirimkan bersama Emacs 25.