君はselectrumとEmacsる?
Ivyがアレだと思うあなたにオススメ。
selectrum
Ivyよりシンプルな垂直表示補完インターフェイス
Ivy: もともとは Swiperのバックエンドとして生まれたが、汎用の補完インターフェイスパッケージに成長するにつれてAPIが複雑化し、スペシャルケースのハードコードが多くエッジケースバグが存在する(README.mdより)
selectrumはめちゃシンプルで、既存のEmacsの補完用APIを利用して動作するし、バグが発生しづらいとのこと
デフォルトの補完インターフェイスのUI(だけ)をシンプルな垂直補完表示でよりよくしたもの感がある
シンプルゆえにHelmやIvyにある選択した候補に対するアクション機能はない
シンプルゆえにrecentf統合機能(virtual buffer表示)もない
selectrum-mode で有効化 補完中に
M-q を押すと候補の垂直表示か水平表示かをトグルする デフォルトのソート&フィルタ(アルファベット順にソートして
completion-styles 変数に従いフィルタする)は流石にアレすぎるので、カスタマイズして使うことをおすすめしている completion-styles をカスタマイズする selectrum-precsient-mode を使う prescient
ソート: 直前に選択したもの -> それ以外の最近選択したもの -> 長さ順
フィルタ: スペースで分割したそれぞれについて、文字列、正規表現、イニシャルにマッチするかでフィルタ
M-x で最近実行したコマンドが、 C-h f でも候補上位に出てくる機能 prescient-persist-mode して利用情報を永続化consult
selectrumはUIをよくするだけなので、便利なコマンド群を提供するパッケージとしてconsultが存在する
Ivyに対するCounselとかSwiperのような感じ?
CounselのコマンドがIvyのAPIで実装されているのに対し、consultは標準の
completing-read 関数に基づくコマンドを提供する なので icomplete-vertical利用者でもconsultのコマンドを利用できる
コマンド
consult-buffer C-x b ( M-x switch-to-buffer ) の代替 virtual buffer機能
バッファだけでなく最近開いたファイルやブックマークも表示する
IdoやIvyのvirtual-buffer機能はオプション(
ivy-use-virtual-buffers など)で有効にすると勝手にrecentf-modeを有効化するが、consult-bufferにはそのようなオプションはなくユーザが明示的にrecentf-modeを有効化しておく必要がある 選択中にバッファの候補を移動すると、バッファがライブプレビューされる
b SPC でバッファだけ候補に表示する、といった機能(ナローイング)がある consult-line ほとんどSwiperっぽく使える。
他いろいろ...
marginalia
補完候補のアノテーションを提供する
端的に言えばIvy-richっぽいやつ
Ivy-richがIvyのAPIを利用して実装されているのに対し、marginaliaは
annotation-function プロパティを参照しようとする completion-metadata-get 関数の呼び出しを拡張している なので selectrumでもicomplete-verticalでもembarkでも使える
ユーザは
marginalia-cycle コマンドをどこかのキーにバインドしておく これを呼び出すごとに
marginalia-annotators 変数に従ってアノテーションが表示されるembark
補完フレームワーク非依存のミニバッファアクション
HelmとかIvyにあるアクション機能をselectrumでも利用可能にする
実のところミニバッファだけじゃなく普通のバッファ上でも動作する(コンテキストメニュー(右クリック)みたいな機能)
ユーザは
embark-act コマンドをどこかのキーにバインドしておく どんなアクションが呼べるかはembark.elの一番下を見よう(README.mdには特に詳しく書かれていない)