Edited at

init-loader.el と package.el を導入して快適 Emacs ライフ

More than 5 years have passed since last update.

今まで(恥ずかしながら)適当だった Emacs の設定を改革したらとても快適だったので紹介します

今回紹介したいのは


  • init-loader.el

  • package.el

です


init-loader.el

今まで .emacs に適当に設定を書いていたので以下の様な問題で悩んでいました


  • 環境依存(具体的には Mac と Ubuntu)な設定を分離出来ないので環境構築に手作業が発生する

  • 設定を追加しても上の事情で各々の環境に手作業で導入する必要がある

ということで init-loader.el の出番です

https://github.com/emacs-jp/init-loader

~/.emacs.d/site-lisp/ 以下に init-loader.el を置いて ~/.emacs.d/init.el


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 を置いて


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 に置きました

参考程度に御覧ください