$shibayu36->blog;

クラスター株式会社のソフトウェアエンジニアです。エンジニアリングや読書などについて書いています。

user-emacs-directoryを利用して、特定のディレクトリにemacsの設定を隔離する

d.hatena.ne.jp

上記のブログに書かれている通りなのだけれど、自分もやってみたのでメモしておく。

動機

上記のブログを見て、emacsのパッケージ管理をel-get-bundleに統一しようと考えた。しかし、パッケージ管理の設定を間違えてしまった場合、通常の開発環境が使えなくなってしまい業務に支障が出る可能性もあるので安全に移行できるようにしたい。

そのために、自分のemacsの設定を、その設定が置かれているディレクトリ以下でインストールするelispなどが完結し、emacsが起動できるようにしたいと考えた。これができれば、別のディレクトリに自分のemacsの設定をコピペもしくはcloneすることで、いつも使っている~/.emacs.d/以下に影響をあたえることなくパッケージ管理の仕組みを移行できるはずである。

特定のディレクトリ以下で完結させる

~/.emacs.d/を前提にしなければいいということなので、そこまで難しくはない。

まず以下の様な設定をすることで、設定ファイルを指定して起動した場合(-lオプションを指定した場合)に、user-emacs-directoryという変数がセットされるように設定する。

;;; emacs -q -lした時に、user-emacs-directoryが変わるように
(when load-file-name
  (setq user-emacs-directory (file-name-directory load-file-name)))


後は自分の設定ファイルの中で、~/.emacs.d/を直接参照しているところを、locate-user-emacs-fileを利用するように変更するだけだ。

(add-to-list 'load-path (locate-user-emacs-file "elisp/"))
(add-to-list 'load-path (locate-user-emacs-file "elisp/el-get/el-get/"))


このような変更を行ったpull reqはhttps://github.com/shibayu36/emacs/pull/4 にある。

特定のディレクトリ以下の設定を読み込んでemacsを起動する

このように設定されていれば、特定のディレクトリ以下の設定を読み込み、そのディレクトリ以下に完結させてemacsを起動することが出来る。

$ emacs -q -l /Users/shibayu36/development/src/github.com/shibayu36/emacs/emacs.d/init.el

もしくはMacのアプリケーション化されたEmacsで起動したい場合は以下のように起動する

$ /Applications/Emacs.app/Contents/MacOS/Emacs -q -l /Users/shibayu36/development/src/github.com/shibayu36/emacs/emacs.d/init.el

まとめ

以上の設定により、あるディレクトリ以下で設定ファイルやインストールするelispなどを完結させて起動することが可能になった。次はこのディレクトリ以下でel-get-bundleに移行できるように設定しようと思う。