4
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

init.elをデバッグする最小構成Emacsの起動方法

Posted at

メリークリスマス!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は以下です。

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点です。

  1. load-pathの設定をする
    • 普段はpackage.elが管理するパッケージのディレクトリを手動で設定します
    • 必要に応じて自前のelispディレクトリを設定します
    • (package-initialize)でpackage.elに任せることもできます
  2. 検証したい設定をする
    • 検証したい自分の設定を書きます
    • leaf.elやuse-packageを使う場合は、最低限の読み込みを追加します
  3. (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の設定沼は楽しいぞ
  1. Emacsの起動は本来とても早いものです。もし1s以上かかるのであれば、ぜろけーさんのEmacs の起動時間を""詰める""が役に立つと思います。

4
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?