Tembel bir init iyi bir inittir.
(IMO)
Ne zaman kullanılır? with-eval-after-load
with-eval-after-loadyüklendikten sonra belli olduğunda özellik veya dosya olduğu ilk bir klavye düzenini değiştirme açıkça içeride bunlardan biri gider, böylece yüklendi. En azından değil, çünkü anahtar haritası init-time'da bilinmeyebilir [ (define-key message-mode-map (kbd "C-c f") 'Footnote-add-footnote)in gibi bir şey deneyin emacs -q]. Bir kancanın bir değil güzel bir tuşa işlevini bağlar beri burada çözüm her kanca başlatılır zaman. Gibi Tarsius notları yapabilirsiniz devamı neden değil için local-set-keykancaları.
Son olarak, with-eval-after-loadGNU Emacs 24.4'ün, alıntı yapılmasının gerekmediği eval-after-loadyerlerde 2 satırlık bir paket olduğunu unutmayın body.
Kancalar ne zaman kullanılır?
Kancalar, bir ölçüt her karşılandığında yüklenen işlevlerin listesidir, örneğin belirli bir mod başlatılır. Kancaların yaygın kullanımı, flyspell-modeveya gibi küçük modları yüklemektir hl-line-mode. Örn (add-hook 'org-agenda-mode-hook 'hl-line-mode). As Rémi işaret, add-hooksakıllı ve kanca değişken henüz yüklenen olsa bile doğru olanı yapacağız. Bununla birlikte, hız kazanımları için ihmal edilebilir, ancak organizasyon ve bağımlılık yapısı hissi veren aşağıdaki gibi birçok cümleyim var:
(with-eval-after-load 'org-agenda
(add-hook 'org-agenda-mode-hook 'hl-line-mode))
Neden sonra kanca eklemek için org-agenda? Her zaman olduğu gibi C-h v org-agenda-mode-hook C-jteslim eder. Kanca, org-agenda.elgösterildiği gibi tanımlanır *help*.
Ek özellikler yükleniyor with-eval-after-load
with-eval-after-loadekstra özelliklerin yüklenmesi için de önemlidir. Muhtemelen (with-eval-after-load 'org (require 'org-inlinetask))kuruluş içi satır içi görevleri yüklemek istersiniz. Nedenini görmek için (find-library "org-inlinetask"). org-inlinetasks.elDoğrudan beri (require 'org), autoloaddost Emacs sürdürmek için büyük özen gösterdi tüm güzel "göz ardı edilecek" ve tüm org.el(c)yüklenecektir.
Peki ya (kişisel) defunbirkaç yere ihtiyaç duyulursa? Gerçekten seçiciyseniz, defuns'yi başka bir dosyaya load-pathekleyebilir ve autoloadçerezler ekleyebilir veya Emacs'a işlevle işlevi nerede bulacağını söyleyebilirsiniz autoload. Sonra böyle bir şey işe yarayacaktır:
(autoload 'org-cdlatex-mode "org" "cdlatex mode from org.")
(with-eval-after-load "latex"
(add-hook 'TeX-mode-hook 'org-cdlatex-mode))
Ya require orgda aynen çekeceği gibicdlatex
Ve dürüst olmak gerekirse, kişisel defun çoğu zaman init zaman için çok önemli olmayacaktır. 1150 satırlık kişisel defun (84 defun) init.elvanilya Emacs'a 0.02s ekliyor.
Başlatma zamanının ölçülmesi
Başlatma süresine yaklaşmanın kolay bir yolu
time emacs --eval "(kill-emacs)"
karşılaştırmalı değerlendirme emacs -q.
Ancak, başlatma darboğazlarının nerede olduğu hakkında daha ayrıntılı bir yaklaşım için Joe Schafer's'e bakın esup.
Son olarak, yükleme süresi sihirli bir şekilde kaybolmaz. Yalnızca ileriye doğru itiyorsunuz (her oturumdaki tüm özellikleri kullandığınız sürece).
with-eval-after-loadbir kez yüklendiğinden , bir tuş eşlemesi değişikliği oraya gider. Kancalar , mod her çalıştırıldığında yüklenir, örn. Modla ilişkili yeni bir dosya yüklenirken veya kanca tanımlanır. Örneğinflyspell-modeveyahl-line-modebir kancaya yüklersiniz. Benim içindeinit.elben kullanımwith-eval-after-loadyaklaşık 160 kat veadd-hook110 kez. Tembel bir init iyi bir inittir (IMO).