Emacsを1つの設定ファイルで複数の環境で使うために、 設定をEmacsバージョンや OS、ログインユーザー名によって切り替える方法を紹介します。
Emacs のバージョンで設定を切り分ける
2016-09-17 にEmacs 25.1がリリースされましたね!早速アップデートした方もいらっしゃるかと思います。 Emacsを新しいバージョンにアップデートしたときに問題になるのが、互換性の問題です。 メンテナンスが追いついていないパッケージがあったり機能の仕様が変わったりすることがあります。 例えば今回のEmacs 25.1では、以前開いたファイルを再度開いたときに元のカーソル位置を復元する機能であるSavePlaceを有効にするための記述方法が変わりました。 詳細はEmacsWiki Save Place に記載があります。
そこで、Emacsのバージョンで処理を分けます。emacs-major-version emacs-minor-versionを使えばよいです。
例として、下記のようになります。
| |
これで、新しいバージョン Emacs 25.1 でも古いバージョンでも、同じ Emacs初期化ファイルで共有させることができます。
ちなみに、今使っているEmacsのバージョンを確認するコマンドは M-x versionです。
エコーエリアに下記のように Emacsの情報が表示されます。
| |
OSによって設定を切り替える
Emacs は WindowsやLinux、Mac OS X などいろんな OS上で動作します。 そこで複数の OSで設定を切り替える方法を説明します。
いま使用している OS を表示させてみる|message 関数と system-type 変数
まずは、いま使用している OS を確認してみます。
message 関数と system-type 変数を使用します。
message 関数はC言語でいう printf と同じようなフォーマット表示関数で、
system-type 変数はOSの情報が格納されています。
下記の elispを評価してみてください。閉じ括弧のところで C-x C-e とします。
| |
するとエコーエリアにメッセージが表示されます。OS によって表示されるメッセージが異なります。下記のようになるはずです。
- Mac OS X の場合
OS is darwin.
- Windows
OS is windows-nt.
- Linux
OS is gnu/linux.
- WSL
OS is gnu/linux.
Linux と WSL は同じになりますね。
WSL と Linux の判別
上述の通り system-type では Linux と WSLの区別がつきません。
そこでもうひと手間かけます。WSL には WSL_DISTRO_NAME という環境変数にディストリビューションの名前が設定されます。
たとえば Ubuntu-20.04 のように設定されているはずです。
そこで下記のようにWSL_DISTRO_NAME の長さが0かそれより大きいかで判断します。
| |
OS を判定して処理を分岐させる設定ファイル例
これを利用して OSによって処理を分岐させることで、設定ファイルを共有させます。 例として、OS によって PATH設定の切り替えをする例を書きます。 今回はWindows と Mac OS X の例です。Linux でも OS 判定の方法は同様です。
| |
ログインユーザー名で設定を切り替える
ログインユーザー名でも切替可能です。
user-login-nameを利用します。
| |
まとめ
今回は、Emacsバージョン、OS, ユーザー名で設定を切り替える方法を説明しました。 これで複数の環境で設定ファイルをうまく共有できますよ!