Tembel bir init iyi bir inittir.
(IMO)
Ne zaman kullanılır? with-eval-after-load
with-eval-after-load
yü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-key
kancaları.
Son olarak, with-eval-after-load
GNU Emacs 24.4'ün, alıntı yapılmasının gerekmediği eval-after-load
yerlerde 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-mode
veya 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-hooks
akı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-j
teslim eder. Kanca, org-agenda.el
gösterildiği gibi tanımlanır *help*
.
Ek özellikler yükleniyor with-eval-after-load
with-eval-after-load
ekstra ö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.el
Doğrudan beri (require 'org)
, autoload
dost 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) defun
birkaç yere ihtiyaç duyulursa? Gerçekten seçiciyseniz, defun
s'yi başka bir dosyaya load-path
ekleyebilir 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
org
da 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.el
vanilya 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-load
bir 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-mode
veyahl-line-mode
bir kancaya yüklersiniz. Benim içindeinit.el
ben kullanımwith-eval-after-load
yaklaşık 160 kat veadd-hook
110 kez. Tembel bir init iyi bir inittir (IMO).