2015/12/27 追記
ちょっとアップデートがあったので、末尾に追記しました。
追記前までのやり方で動かなくなるわけではないので面倒な人は気にしなくて良いです。
この文章はなに?
最近 Emacs の EditorConfig 環境まわりでいくつかコミットをしていたのでその宣伝をしつつ、いま Emacs で EditorConfig をどうやって使えばいいかを解説する文章です。
その前に EditorConfig ってなに?
解説記事は既にいろいろな人が書いてるので詳細は省略しますが、素敵なやつなのでみんな(コードを書く人なら誰でも)使うといいと思います。
- どんなエディタでもEditorConfigを使ってコードの統一性を高める - Qiita
- EditorConfigで文字コード設定を共有して喧嘩しなくなる話。(Frontrend Advent Calendar 2014 – 14日目) | Ginpen.com
例えばこの記事などがわかりやすいと思います。要するに、「プロジェクト自体にインデント幅などの設定を保持し、各エディタはその値に従うように自身を設定するようにしよう」みたいな考えを元に作られたプロジェクト・設定ファイルです。
すでに いろいろなエディタ が EditorConfig に対応しています。
自分が使っているエディタの EditorConfig プラグインを導入することで、そのエディタが自動的に .editorconfig
ファイルを読み込みその設定を適用してくれるようになります。
したこと
-
editorconfig-core-emacslisp
というライブラリ をつくりました- MELPA から
editorconfig-core
でインストールできます -
公式の提供するテスト
を使って CI してる
のでたぶんちゃんと動くと思います - 実装のうち、 Glob パターンマッチの部分は単体でも便利そうだったので パッケージを分けてます
- MELPA から
- EditorConfig プラグイン の Minor-Mode 化などをしました
以前から Emacs には EditorConfig プラグイン (editorconfig
パッケージ) はあったのですが、その動作には editorocnfig-core-c などの外部プログラムのインストールが必要でした。
つまり、 Emacs で EditorConfig を利用しようと思った場合、
- Emacs 用の EditorConfig プラグイン
- editorconfig-core-c などの Core プログラム
の2つを入れる必要がある、という状況でした。
EditorConfig プラグイン自体は package.el
などを使って Emacs からインストールすれば良いのですが、 Core プログラムの導入はそうはいかず、 apt
だとか yum
などのディストリのパッケージ管理システムで導入する必要があります。
これは Emacs に引きこもりたい人間としては致命的です。
なので、 Core プログラムを Emacs Lisp で再実装して editorconfig-core
として公開し、 MELPA でインストールできるようにしました。
Core プログラムには、公式が作成したテストケースを用いることができます。
自分の実装もこれを用いて CI を回すようにしてるので、きっと既存の editorconfig-core-c
などと同様にちゃんと動くはずです。
もしおかしな動作を見つけるなどしたら issue 投げて いただくとありがたいです。
また、もともとの EditorConfig プラグイン自体にも PR を投げ、 このライブラリを使えるようにするような変数を追加 したり、 マイナーモード化したり、シンボル名に使われている prefix を edconf-
から editorconfig-
に直したり してもらいました。
( prefix の変更により変数・関数名は変わってしまいましたが、変数に関して言えば、 edconf-
を prefix として用いた古いものは obsolete な変数として新しい方に alias されている ので、既存の設定のままで動かすことは(一応)できます。)
現状の EditorConfig 環境設定
MELPA から、あたらしめの editorconfig
(20151105.54
あたり以上、もともとのバージョンで v0.5
となってるもの以上) と editorconfig-core
をインストールします。
editorconfig
パッケージは marmalade などにも登録されていますが、おそらく版が古いです。
editorconfig-core
は、現状では MELPA にしかパッケージがないです。
インストールしたら、 editorconfig-mode
を有効にします。
(editorconfig-mode 1)
editorconfig
は、デフォルトでは今までどおり外部プログラムを Core として用いるようになっています。
Emacs Lisp 版の editorconfig-core
を用いる場合、以下の設定を加えます。
(setq editorconfig-get-properties-function
'editorconfig-core-get-properties-hash)
もはや外部プログラムのインストールは不要です。
2015/12/27 追記
この文章を書いたのち少しやりとりがあって、 v0.6
で editorconfig-core-emacslisp
および editorconfig-fnmatch-el
が 本家にマージ されることになりました。
それに伴い、以下のような変更があります。
- 自分がもともと持っていた2つのレポジトリは deprecated です
- MELPA のパッケージに関して、
editorconfig-core
は分かれたままにはなってますがeditorconfig
の依存として追加されるようになったので、明示的にインストールする必要はなくなりました - 変数
editorconfig-get-properties-function
を設定しなくても、Emacs Lisp 実装の Core が使われるようになりました
最後の項目については説明が必要です。
変数 editorconfig-get-properties-function
は、初期値では editorconfig-get-properties
が与えらるようになりました。
この関数は、以下のようにして Core 実装を見つけます。
-
editorconfig
外部プログラムがPATH
に見つかった場合それを用いる - 見つからなかった場合 Emacs Lisp 実装に fallback する
そのため、通常はこの変数を書き換える必要はなくなっていると思います(設定は (editorconfig-mode 1)
のみでよい)。
なお、一方追記前のように
(setq editorconfig-get-properties-function
'editorconfig-core-get-properties-hash)
とした場合の動きは、
- 外部プログラムがあってもなくても Emacs Lisp 実装を用いる
という感じです。
結局どうすれば使えるようになったの?
- MELPA から
editorconfig
パッケージをインストールし -
(editorconfig-mode 1)
で有効化すればよいです