Emacsの設定をDropboxに置く

emacsの設定はプラットフォームごとにまちまちで、統合したいなーといつも思っていた。 一時期gitで管理したりもしたんだけど、設定をいじる→リポジトリに登録→push→各プラットフォームでpullという作業があまりにも煩わしく、ついついおろそかになってしまう。 ここらへんを自動化すべく、elisp群をDropboxに置いてみた。

Mac/Linux .emacs.dをsymlinkにすると動作がおかしいので、~/elispとか適当なディレクトリを読みに行くようにして、ln -s Dropbox/elisp ~/elispとしておく。 Windows symlinkの代わりにショートカットを置いても動作しないので(このへん実に融通が効かない)、代わりにWindows7のハードリンクを使ってみる。Vista以前の人は自分で考えて下さい、すいません。

mklink /d C:\Users\name\Dropbox\elisp %HOME%\elisp

こんな感じ。

なお、分岐部分はこんな感じにした。

;; プラットフォームを判定して分岐する
(cond
 ((string-match "apple-darwin" system-configuration)
  (load "~/elisp/etc/cocoa.el")
  (load "~/elisp/etc/unix.el")
  )
 ((string-match "linux" system-configuration)
  (load "~/elisp/etc/linux.el")
  (load "~/elisp/etc/unix.el")
  )
 ((string-match "freebsd" system-configuration)
  (load "~/elisp/etc/freebsd.el")
  (load "~/elisp/etc/unix.el")
  )
 ((string-match "mingw" system-configuration)
  (load "~/elisp/etc/windows.el")
  )
 )

ここで悩んだのがバイトコンパイルの扱い。 プラットフォームをまたいでもバイトコンパイルしたlispは動作するだろうか? 当初、elcだけ別のディレクトリに置くとか、ディレクトリツリーをそっくり複製してelcだけ移動するスクリプトを書くとか考えたが、どうもうまい手が思いつかないので、普通にそのまま(バイトコンパイルしたファイルも共通)にしてみたところ、特に問題なく動いた。もちろんEmacsのバージョンが全て共通でなければならないけど… とりあえず23.2.90@Macと23.2.1@NTEmacsでは問題ないようだ。23.1@Linuxではうまく動いてないけど、これは互換性の問題だろう。(さっさと23.2にします、はい)