Emacsの次世代ミニバッファ補完UI を読んでvertico/consultの環境に移行して半年ばかり。それ以前はivy/counselを使ってきましたがどうもしっくり来なかったので乗り換えました。こちらの操作性はとてもよくて気に入っています。anythingに始まったミニバッファ補完UIの旅はここに落ち着きそうです。
それで一点だけどうしても不満だったのが M-x consult-project-buffer
の動作でした。プロジェクトに関するバッファとファイルを絞り込みの対象にするのですが、ファイルが「プロジェクト内にある以前開いたことのあるファイル (recentf)」を対象にするのです。「プロジェクト内にあるgit等vcに登録された全ファイル」ではないのです。
一から作っていったツリーならそれでもいいのですが、git clone
してきたツリーだったり、rails new
などで配置したファイルだったりすると find-file
で探し回らなければなりません。
ところでvertico/consultがインストールされた状態で M-x project-find-file
を行うとvc管理下にあるファイルが絞り込みの対象になります。このソースを consult のソースにして M-x consult-project-buffer
のソースリスト (consult-project-buffer-sources
) に加えてやればよいかと思いました。ついでに recentf
はいらなくなるので外しました。
ということで快適になりました。
(defvar my-consult--source-project-file
`(:name "Project Whole File"
:narrow (?p . "Project")
:category file
:face consult-file
:history file-name-history
:state ,#'consult--file-state
:new ,#'consult--file-action
:items
,(lambda ()
(let ((current-project (project-current)))
(if current-project
(project-files current-project)
nil))))
"Project file candidate source for `project-files'.")
(add-to-list 'consult-buffer-sources 'my-consult--source-project-file t)
(setq consult-project-buffer-sources
(list
`(:hidden nil :narrow ?b ,@consult--source-project-buffer)
`(:hidden nil :narrow ?f ,@my-consult--source-project-file)))