おんがえしの blog

作ったプログラムと調べた技術情報

.emacs.d/init.el を複数のプラットフォームで安定して動かすためのplatform-p

platform-p/platform-p.el というライブラリをGithubに置きました。

大部分はtomoyaさんのひとつの .emacs で設定を書き分けるための Tips。 で紹介されていたものです。後で検索しやすくするために変数名に ''platform-'' プレフィックスを付けました。

インストール

  1. platform-p/platform-p.el をload-pathの通った場所に置きます。
  2. (require 'platform-p) します

使い方

例えばOSX固有の機能であるmetaキーとcommandキーの入れ替えをする場合は以下のように書きます。

(require 'platform-p)

;; 
;; ...
;;

(when platform-darwin-p  ; 以後、OSX固有の機能の記述
   ;; Meta -> Command
   (setq ns-command-modifier (quote meta))
   (setq ns-alternate-modifier (quote super))
   )

;; 
;; ...
;;

EmacsにはOS固有の機能が実装されていることがありますが、それらの関数を呼び出す時に''platform-..'' で囲んでおくと .emacs.d/init.el を他プラットフォームに移植した時に変なエラーに悩まされずに済みます。

何に使うの?

Emacsの大部分の機能は全てのプラットフォームで共通のため、自分用のinit.elを持っていると全てのOS(Windows, OSX, Linux 等)で同じ使い勝手のエディタを持つことが可能となります。

WindowsのVisualStudioや、OSXのTextMateといったエディタの完成度は素晴らしいですが、他のOSに引っ越した時に同じ様に使えるエディタを探すのは大変でしょう。これはEmacsの大きなアドバンテージです。

ですが、現実はそこまでバラ色じゃなくて、Emacsにも一部環境依存の機能が存在します。WindowsからOSXにinit.elを引っ越す時は苦労しました。

同じことを繰り返さないために、OS固有の機能を記述する時はplatfrom-p で囲む、という方法を紹介しました。皆さんがどのような方法で環境依存の機能と付き合っているのかも良かったら教えて下さい。