neotree には
(setq projectile-switch-project-action 'neotree-projectile-action)
とすることで、 Projectile でプロジェクトを切り替えた時に neotree を起動するというオプションがある。
設定当時、結構この挙動が気に行ってたんだけど 気付いたらそういう挙動をしなくなっていて その代わりに find-file 的な挙動をするようになっていた。
で、その挙動をされると、絞り込みが結構だるい。 何しろプロジェクト以下のファイル全部が候補になるので。
というわけで、自分としてはプロジェクトの切り替えの後は Rails のプロジェクトなら projectile-rails の機能で絞り込みをするとか org-mode のリポジトリなら find-file するとか 自分に選択権がある状態にしたかった。
で、原因を調べてみると
projectile-switch-project ではなく
counsel-projectile-switch-project を使うようになってるから
記事冒頭に書いた設定が活かされない、というのに気付いた。
もはや ivy に飼い馴らされて来ている体を持つ者としては counsel-projectile-switch-project は手放せないので そっちで動かしても基本的には neotree が動くようにしたらいいよねってことで対応した
まず counsel-projectile-switch-project は
(defun counsel-projectile-switch-project (&optional default-action)
という感じで default-action を指定できるので、
(counsel-projectile-switch-project 'neotree-dir)
とかすれば良いだろうと考えて実行すると
(error "Action not found: neotree-dir")
とか怒られた。
原因を調べると
https://github.com/ericdanan/counsel-projectile/blob/06b03c1080d3ccc3fa9b9c41b1ccbcf13f058e4b/counsel-projectile.el#L99-L125 に書いてるように どうも、action-list に登録されてない action は実行されないようになってるらしい。
じゃあ追加したらいいよね〜っってことで
counsel-projectile-remove-current-project という変数を調べると defcustom で定義されている
個人的には Customize で設定した情報は普段設定を書き込んでるファイルから遠い位置に書き込まれるので
あんまり好きじゃないんだけど
今回に関しては Customize じゃない方法で変更しているとだるそうだったので
Customize 画面から neotree-dir を counsel-projectile-remove-current-project に登録。
すると無事 counsel-projectilw-switch-project が動くようになってハッピー。
ってのが以下の Pull Request
https://github.com/mugijiru/.emacs.d/pull/183
あと、まだ ivy リキが足らなくて default じゃないアクションを動かす方法を気にしてなかったんだけど
M-o でコマンドリストが出るのね。便利そう。
ただ確実にその操作忘れるので posframe のどこかにその情報残したいなって気持ちになったので 宿題としておく。

