カレントディレクトリが変になったときに戻す


毎日いっぱいEmacsを使ってると非常にまれに、なにかのコマンドが悪さをして現在のディレクトリ(default-directory)が変になることがある。C-x C-fとかM-x find-fileとかでファイルを開こうとするけど、現在編集中のファイルがある場所とは全然別のディレクトリが選択されてめんどくさいことになってる状態。厄介なので直したい。

わざわざパッケージにするほどでもないかなって気がするので、init.elとかに書く。

(defun my/reset-default-directory-by-buffer-file-name ()
  "Set default-directory by `buffer-file-name'."
  (interactive)
  (require 'f)
  (when buffer-file-name
    (setq default-directory (f-dirname buffer-file-name))))

セットアップ

f.elがあるとファイルの操作とかファイルパスの操作がラクなので入れる。MELPAのセットアップをして、M-x ielmとか起動して、以下のようなコードを打ち込む。

ielm
(package-install 'f)

下記のような表示なら、特に何もしなくていい。

動かしかた

おっ壊れやがったな、と思ったらM-x my/reset-default-directory-by-buffer-file-nameを起動する。

ただし人類はそんなに長いコマンド名を覚えられないので、君は誰とEmacsる? (補完インターフェイス紹介篇)を読んで、部分一致でコマンド呼び出しできるようにすると良い。

(写真はhelm-smexのもの)

りくつ

カレントディレクトリはdefault-directoryって変数に文字列が入ってるだけなので、これをsetqしてやるだけ。buffer-file-nameを見てるので、実ファイルを編集してるとき以外は特に何もしない。

あとがき

てきとーにEmacs Lispのコードを書きながら動かしてるときが一番壊れる。