今まで(恥ずかしながら)適当だった Emacs の設定を改革したらとても快適だったので紹介します
今回紹介したいのは
init-loader.el
package.el
です
init-loader.el
今まで .emacs
に適当に設定を書いていたので以下の様な問題で悩んでいました
- 環境依存(具体的には Mac と Ubuntu)な設定を分離出来ないので環境構築に手作業が発生する
- 設定を追加しても上の事情で各々の環境に手作業で導入する必要がある
ということで init-loader.el
の出番です
~/.emacs.d/site-lisp/
以下に init-loader.el
を置いて ~/.emacs.d/init.el
に
;; ~/.emacs.d/site-lisp 以下全部読み込み
(let ((default-directory (expand-file-name "~/.emacs.d/site-lisp")))
(add-to-list 'load-path default-directory)
(if (fboundp 'normal-top-level-add-subdirs-to-load-path)
(normal-top-level-add-subdirs-to-load-path)))
(require 'init-loader)
(setq init-loader-show-log-after-init nil)
(init-loader-load "~/.emacs.d/inits")
と書きます
最初に ~/.emacs.d/site-lisp
以下のものを全部読み込んでしまいます
するとそれ以下に置いた init-loader.el
が読み込まれますので単純に require するだけで実行できます
これで ~/.emacs.d/inits
ディレクトリ以下に置かれた設定ファイルを読み込ませることができます
ちなみにデフォルトもこの値なので上の設定は冗長ですが,今回は明示的に書いてあります
~/.emacs.d/inits
ディレクトリ以下のファイルは以下の設定に従って作成します
- 環境に依存しない設定はファイル名の最初に 2 桁の数字をつける
- 番号は優先度で 00 が最初に読み込まれて, 99 が最後に読み込まれる
- 同じ数字を付けても良い
- 環境依存な設定はそれぞれの環境のプレフィックスをファイル名の最初につける
プレフィックスは以下のようになります
環境 | prefix |
---|---|
Meadow | meadow |
Carbon Emacs | carbon-emacs |
Cocoa Emacs | cocoa-emacs |
emacs -nw | nw |
Windows | windows |
Linux | linux |
なので 00-keybind.el
とか cocoa-emacs-appearance.el
のように prefix
- 機能名
.el
とファイル名をつけます
ファイルを機能ごとに分割するとメンテナンス性が格段に向上するので機能ごとにファイルを分割して作成してください
番号に特に決まりはないと思いますが,次に紹介する package.el
周りの設定は 20 番台に書くことが多いようです
package.el
Emacs でも apt-get
とか gem
とか cpanm
的なあれを使いたくなります
Emacs24 から標準で入った package.el
を使えば簡単に使えるようになるので使います
ただデフォルトのままでは入れられる種類が少ないので少し設定を追加します
~/.emacs.d/inits
以下に 20-package.el
を置いて
(require 'package)
(add-to-list 'package-archives '("melpa" . "http://melpa.milkbox.net/packages/"))
(add-to-list 'package-archives '("marmalade" . "http://marmalade-repo.org/packages/"))
(package-initialize)
と書きます
これで M-x package-list-packages
とやるとインストールできるパッケージのリストが見れて,この上からインストールができます
- インストールしたいパッケージの上で
i
キーを押す - 選択し終わったら
x
を押す
これでインストールができます
リストの取得でインターネットに接続しないでキャッシュから見たい時は M-x package-list-packages-no-fetch
とします
また入れるパッケージの名前がわかっているなら M-x package-install
としてもインストールできます
自動インストール設定
最初に必ずインストールするものがあるなら自動設定しておきたいので設定します
先ほどの設定の後に(私は 20-package.el
の中に書いてしまっています)
(require 'cl)
(defvar installing-package-list
'(
;; ここに使っているパッケージを書く。
php-mode
scala-mode
markdown-mode
scss-mode
haskell-mode
google-c-style
yaml-mode
open-junk-file
))
(let ((not-installed (loop for x in installing-package-list
when (not (package-installed-p x))
collect x)))
(when not-installed
(package-refresh-contents)
(dolist (pkg not-installed)
(package-install pkg))))
こんな感じのことを書いておきます
こうするとインストールされていなければ自動でインストールされるようになります
サンプルファイル
以上の設定をしたものを catatsuy/dot.emacs.d · GitHub に置きました
参考程度に御覧ください