Windows環境ではNTEmacs64を使っていたのだけれど、Cygnusを使うためCygnus版のEmacsを使うことになった。一応、両方、インストールしておいてbookmarkなどの情報は共有していたのだけど。
このふたつはパスの表現が微妙にちがう。
Cygnus版はCygnusの環境下で動作するためだ。
なのでbookmarkを取り込んでも、Cygnus版からはbookmark-jumpできないことがある。こうなることはわかっていたのだけれど、使わないからいいや、と思っていたのだ。そんな風に考えたことは大概、あとではまる。
bookmarkファイルの中身をCygnusのパスに変換してしまえば、いいのだけれど、そうすると、NTEmacs64から使えなくなる。Emacsには関数を拡張するためにhookという仕掛けがあるのだけれど、これは拡張する関数の中に、あらかじめ定義しておかなければ、いけない。うーん。bookmarkの関数を置き換えてしまうのも手だけど、最近、advice関数というものを知ったばかりだ。それを使うことにした。
(when (eq system-type 'cygwin) (advice-add 'bookmark-get-filename :filter-return 'cygwin-convert-file-name-from-windows))
これで動いた。
動いてしまった。
何という変態ぶりだ、elisp。