Emacsのバージョンによって初期化ファイル内の処理を分岐させる|emacs-major-version

どうも。ながやすです。

2016-09-17 に Emacs 25.1 がリリースされましたね!早速アップデートした方もいらっしゃるかと思いす。今回は、複数のバージョンの Emacs の初期化ファイルの共有方法です。ちなみに、複数の OSやユーザー名(ログイン名)で処理を分岐させて初期化ファイルを共有する方法は下記の記事をご参照ください。

Emacsの設定ファイルをOSの判定をして共有する方法|system-type
Emacs は WindowsやLinux、MAC OS X などいろんな OS 上で動作します。そこで、設定ファイルで OS を判定して処理を分岐する方法を紹介します。
Emacs の設定ファイルを複数環境で共有する方法|user-login-name
Emacs を使うなかで設定ファイル(通称 .emacs)を複数の環境で共有したい場合があります。複数のOS(Windows & Linux など)で1つの .emacs を共有する時や、 tramp...

Emacs を新しいバージョンにアップデートした時に問題になるのが、互換性の問題です。メンテナンスが追いついていないパッケージがあったり機能の仕様が変わったりすることがあります。例えば今回の Emacs 25.1 では、「以前開いたファイルを再度開いたときに元のカーソル位置を復元する」機能 Save Place の仕様が変わり、有効にするための記述方法が変わりました。詳細は EmacsWiki Save Place に記載があります。

Emacs を1つの環境で使う分には Emacs 初期化ファイル(.emacs, .emacs.d/init.el)を書き直すだけで良いのですが、Emacs のバージョンが異なる環境で同じ Emacs 初期化ファイルを使うには工夫が必要です。そこで、変数emacs-major-version、emacs-minor-version を使って処理を分岐させます。Save Place は EmacsWiki Save Place にあるように「For GNU Emacs 24.5 and older versions」とそれより後のバージョンでで記述の仕方が変わります。例として、下記のようになります。

;;; enable saveplace
(if (and (>= emacs-major-version 24) (>= emacs-minor-version 5))
    ;; For GNU Emacs 24.5 and older versions.
    (progn (require 'saveplace) (setq-default save-place t))
  ;; For GNU Emacs 25.1 and newer versions.
  (save-place-mode 1))

これで、新しいバージョン Emacs 25.1 でも古いバージョンでも、同じ Emacs初期化ファイル(.emacs, .d.emacs/init.el)を共有させることができます。

ちなみに、今使っているEmacs のバージョンを確認するコマンドは M-x version です。エコーエリアに下記のように Emacs の情報が表示されます。ご自身の使用しているEmacs のバージョンがわからない場合はこのコマンドでご確認ください。

GNU Emacs 24.5.1 (x86_64-apple-darwin13.4.0, NS apple-appkit-1265.21) of 2015-04-11 on builder10-9.porkrind.org

以上、異なるEmacsバージョンでのEmacs初期化ファイル(.emacs, .emacs.d/init.el)の共有の方法と、使用しているEmacsのバージョンの確認方法でした。