2015/12/27 追記

ちょっとアップデートがあったので、末尾に追記しました。 追記前までのやり方で動かなくなるわけではないので面倒な人は気にしなくて良いです。

この文章はなに?

最近 Emacs の EditorConfig 環境まわりでいくつかコミットをしていたのでその宣伝をしつつ、いま Emacs で EditorConfig をどうやって使えばいいかを解説する文章です。

その前に EditorConfig ってなに?

解説記事は既にいろいろな人が書いてるので詳細は省略しますが、素敵なやつなのでみんな(コードを書く人なら誰でも)使うといいと思います。

例えばこの記事などがわかりやすいと思います。要するに、「プロジェクト自体にインデント幅などの設定を保持し、各エディタはその値に従うように自身を設定するようにしよう」みたいな考えを元に作られたプロジェクト・設定ファイルです。

すでに いろいろなエディタ が EditorConfig に対応しています。 自分が使っているエディタの EditorConfig プラグインを導入することで、そのエディタが自動的に .editorconfig ファイルを読み込みその設定を適用してくれるようになります。

したこと

以前から Emacs には EditorConfig プラグイン (editorconfig パッケージ) はあったのですが、その動作には editorocnfig-core-c などの外部プログラムのインストールが必要でした。 つまり、 Emacs で EditorConfig を利用しようと思った場合、

  1. Emacs 用の EditorConfig プラグイン
  2. 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.6editorconfig-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 実装を見つけます。

  1. editorconfig 外部プログラムが PATH に見つかった場合それを用いる
  2. 見つからなかった場合 Emacs Lisp 実装に fallback する

そのため、通常はこの変数を書き換える必要はなくなっていると思います(設定は (editorconfig-mode 1) のみでよい)。 なお、一方追記前のように

(setq editorconfig-get-properties-function
      'editorconfig-core-get-properties-hash)

とした場合の動きは、

  • 外部プログラムがあってもなくても Emacs Lisp 実装を用いる

という感じです。

結局どうすれば使えるようになったの?

  1. MELPA から editorconfig パッケージをインストールし
  2. (editorconfig-mode 1) で有効化すればよいです
Tags: qiita_mirror