メリークリスマス!Emacs Advent Calendarです。
Emacsの設定は楽しいですよね。
私も日々init.el
をいじったりscratchバッファで評価したりの日々です。
そんなとき、原因のわからない思わぬ動作に出会うことがあると思います。
自分の設定が悪いのか、それともパッケージのバグなのか。
後者ならIssueへのコントリビュートチャンスです。
そこで本稿では、Emacs動作の原因を切り分けする方法を紹介します。
私がやっている方法ですが、何かの参考になれば幸いです。
最小限の起動
切り分けのために、まずはEmacsに何も読み込ませずに起動する方法を使います。
これにはemacs --quick
またはemacs -Q
を使います。
以下は--quick
オプションについてのhelpです。
--quick
オプションは、設定を読み込まずEmacsをまっさらな状態で起動します。
オプション名の通り、爆速でEmacsが起動します。1
$ emacs --help
...
--no-init-file, -q load neither ~/.emacs nor default.el
--no-site-file do not load site-start.el
--no-x-resources do not load X resources
--no-site-lisp, -nsl do not add site-lisp directories to load-path
--no-splash do not display a splash screen on startup
--quick, -Q equivalent to:
-q --no-site-file --no-site-lisp --no-splash
--no-x-resources
...
最小限のinit.el
次に最小限の設定を用意します。
切り分けに必要なのは、必要なパッケージのロードと自分の設定の2つのみを書いたものになります。
例えば、前回のgoggle.el紹介に使ったinit-test.el
は以下です。
;; 見た目の設定
;; (push '(font . "VL ゴシック-20") default-frame-alist)
;; (push '(width . 50) default-frame-alist)
;; (push '(height . 13) default-frame-alist)
;; package.elが管理するパッケージのディレクトリ
(let ((default-directory "~/.config/emacs/elpa/"))
(normal-top-level-add-to-load-path '("."))
(normal-top-level-add-subdirs-to-load-path))
;; 自分のelispファイルのディレクトリ
;; (let ((default-directory "~/.config/emacs/lisp/"))
;; (normal-top-level-add-to-load-path '("."))
;; (normal-top-level-add-subdirs-to-load-path))
;; package.elに任せる
;; (package-initialize)
;; 設定管理にleaf.elを使う場合
;; (require 'leaf)
;; (require 'leaf-keywords)
;; (leaf-keywords-init)
;; 検証するパッケージの読み込みと設定
(require 'goggles)
(goggles-mode +1)
(setq goggles-pulse-iterations 10)
(setq goggles-pulse-delay 0.1)
(custom-set-faces
'(goggles-added ((t (:background "#00ff00"))))
'(goggles-changed ((t (:background "#ffff00"))))
'(goggles-removed ((t (:background "#ff0000"))))
)
ポイントは以下の2+1点です。
- load-pathの設定をする
- 普段はpackage.elが管理するパッケージのディレクトリを手動で設定します
- 必要に応じて自前のelispディレクトリを設定します
-
(package-initialize)
でpackage.elに任せることもできます
- 検証したい設定をする
- 検証したい自分の設定を書きます
- leaf.elやuse-packageを使う場合は、最低限の読み込みを追加します
- (Optional) 見やすさの設定をする
- デフォルトのフォントやフレームサイズが小さいためいれています
最小限の設定のみ読み込んで起動する
最後に、用意したinit-test.el
のみを読み込んで起動します。
これにはemacs --load FILE
またはemacs -l FILE
を使います。
前の--quick
オプションと合わせて、以下のコマンドで最小構成Emacsが起動するはずです。
このEmacs上で再現性を検証しましょう。
$ emacs -Q -l init-test.el
または
$ emacs -Q -l init-test.el TEST_FILE.ext
まとめ
- Emacsを任意の最小構成で起動する方法を紹介しました
- Emacsの設定沼は楽しいぞ
-
Emacsの起動は本来とても早いものです。もし1s以上かかるのであれば、ぜろけーさんのEmacs の起動時間を""詰める""が役に立つと思います。 ↩