概要
telescope.nvimの拡張(ソース)の作り方のいい文献があまり見つからなかったのでメモ。
基本構造
telescope.nvimの拡張は
lua/telescope/_extensions/[source]
以下のディレクトリに置き、をすることで読み込まれる。
このsourceディレクトリ以下を作成するのが基本的な流れ。
この中で
これ以下のコードでは、この拡張の名前を
この中で
telescope.register_extension
をすることで拡張を登録できる。これ以下のコードでは、この拡張の名前を
source
とする。telescope.register_extension
にはsetup
とexports
というキーを持ったテーブルを登録することができる。setup
まず、
setup
には関数を指定するが、ここではユーザーがTelescopeのsetup
関数で設定した値を受け取ることができる。つまり、上のコード内で示した部分のテーブルを受け取ることができる。これは主にキーマッピングを設定する際などに使用される。
exports
次に
exports
だが、ここに拡張の実体を指定することになる。exports
は{[command]: Picker}
の形式のテーブルを受け取る。ここでコマンド名がソース名と一致していれば、:Telescope source
を実行することでピッカーを実行できる。一方、一致していない場合はTelescope source command
に割り当てられる。picker
pickerというのがTelescope拡張の実体であり、ここに指定した関数が実行される。pickerの例を下に示す。
見ての通りだが、
telescope.pickers.new
に色々なオプションを指定することで動作をカスタマイズできる。sorter
: ソートする関数を指定する。sorters.get_generic_fuzzy_sorter()
で問題ないことが多いと思う。previewer
: (選択中の)entryを受け取り、プレビューの内容を決める。finder
: ここが一番重要なところ。ここではfinders.new_table
を使って、配列からfinderを作成している。entry_maker
で返すテーブルは、value
がpickerに渡される値、display
が一覧画面で表示される文字列、ordinal
が検索に使用される文字列。
他にも外部コマンドを実行して結果を得るなどできる。