cloverrose's blog

Python, Machine learning, Emacs, CI/CD, Webアプリなど

MarvericksのEmacsでdefault-directoryがルートになってしまうバグへの対応

Marvericksがリリースされてからかなり経ちましたが、Marvericks版のEmacsに以下の不具合があります。

不具合

Dockから起動したEmacsのdefault-directory(Find-file等でファイルを開こうとした時に、最初にミニバッファに表示されるディレクトリ)がルート・ディレクトリになっている。

以前はユーザのホームディレクトリだった。
エディタで編集するときはホームディレクトリから検索が始まって欲しい。

Homebrewを使ってる場合

すでにこのバグはHomebrewでは修正されたEmacsがリリースされているようです。

自分の場合

しかし、Homebrewではなく、GNU Emacs For Mac OS Xからインストールしている場合、2014/6/13現在まだFix版はリリースされていません。
Pretest版等はすでにリリースされているのかもしれませんが確認していません。
そして自分は、Homebrewではなく、かつリリース版を使いたい。

自分の対処方法

init.elに以下を追加することで対応しました。

;; for Mac OS X Marvericks
(if (and (eq window-system 'ns) ;; Mac OS X
         (equal (getenv "PATH") "/usr/bin:/bin:/usr/sbin:/sbin")) ;; launch from Dock
    (progn
      (setq default-directory "~/")
      (setq command-line-default-directory "~/")))
注意点とelisp解説

単にOSがMacだったときにdefault-directoryを"~/"にすると、ターミナルからファイル名を指定してEmacsを起動した時に、そのファイル名がホームディレクトリからの相対パスとして認識されてしまいます。
なので、default-directoryの設定はEmacsがDockから起動された時に限定する必要があります。

ここでは、微妙な設定かもしれませんが、Dockから起動したEmacsだとPATHが.bash_profileなどの影響を受けていない、基本的なPATHであることを利用することにしました。

まとめとか感想

今回はMarvericks版のEmacsでdefault-directoryがルートになってしまっているバグに設定ファイルで対応する方法を紹介しました。

当初このバグに遭遇した時は、Mountain LionからMarvericksにUpdateしたからバグったんだろうなと考えていたのですが、
もともとMarvericksのMacでも同じ症状が出たことからいろいろ検討してきました。最初は、注意点でも述べたようにDockとターミナルで場合分けしていなかったため、どちらかで使いづらいという日々を過ごしていました。最終的にどっちから起動されたかで環境変数が異なっているということに着目してちょっときたないやり方ですが、対応することが出来ました。