Subscribed unsubscribe Subscribe Subscribe

起動時にはanythingを読み込まないようにして起動速度を上げる

Emacs

設定を見直し中 - すぎゃーんメモ シリーズ。
まぁ普通は一度立ち上げたらそうそう落とさないので起動速度を上げること自体がほとんど意味ないのだろうけど… 設定見直すために何度も立ち上げ直して確認したりするには速い方が嬉しいので。
autoloadとセットでeval-after-loadを使うのが良い? - すぎゃーんメモ で書いた通り、eval-after-loadを使うことで即時loadではなく指定したファイルが読み込まれたタイミングで評価するように仕込んでおくことができる。

(eval-after-load "anything-config"
  '(progn
     (setq anything-input-idle-delay 0.1)
     ;; anything-grep
     ;; (auto-install-from-emacswiki "anything-grep.el")
     (require 'anything-grep)
     ;; replace commands
     (define-key global-map (kbd "C-x b") 'anything-for-files)
     (define-key global-map (kbd "M-y")   'anything-show-kill-ring)
     (define-key global-map (kbd "M-x")   'anything-M-x)
     ;; anything comamnd
     (define-key anything-command-map (kbd "r") 'anything-resume)
     (define-key anything-command-map (kbd "o") 'anything-occur)
     (define-key anything-command-map (kbd "g") 'anything-grep)))

のような形で、「初めて"anything-config"が読み込まれたタイミングでanythingに関する諸々の設定を評価する」ようにできる。そのようにセットするだけで実際には評価しないのでこの式自体の評価は速い。これに加えて

(defvar my-anything-key (kbd "C-z"))
(define-key global-map my-anything-key
  (lambda ()
    (interactive)
    (require 'anything-config)
    (define-key global-map my-anything-key 'anything-command-map)))

のような形で「あるキーを押したときにanything-configをrequireする」ようにしておくことで、これを押したときに初めてanythingが読み込まれて、そしてeval-after-loadに登録していた諸設定も評価されることになる。その後、トリガーとなったキーをanything-command-mapにセット。
挙動としては起動時にはanything系のコマンドは一切使えないが、初めてあるキー(この場合だと"C-z")を押したときにloadと設定が行われ、それ以降は普通に使えるようになる。起動直後はanything系は使えないけど一個キーを押せばすぐに使えるようになるしそんなに不便はないはず。


起動時間で最もボトルネックになっていた部分だったので、これによって全体として約1700ms -> 約1200msと、起動時間を500msくらい短縮できるようになった。

https://github.com/sugyan/dotfiles/blob/78a32530cf2fb19f575692fd9f2df74ff2baf7fe/.emacs.d/inits/10-anything.el