dpp.vimと戯れる
config部分に何を書いていいのかよくわからないのでいろいろ叩いて動かしてみる
とりあえずの目標: skkeletonを導入→認識→動作までさせる
最低でもPlugin[]型の配列は必要 他は必要に応じてという具合か checkFilesやhooksFilesなどが何のためのものなのかはまだ分かっていない
必須としてマークされているのはnameのみ ただrepo(protocol-gitと話させる用?)あるいはpath(これ書いておけばローカルプラグイン認識してくれる?)は要る気がする 両方もありえる?
local読み込みも遅延読み込みもさせる予定はないのでdpp-ext-tomlの機構でも解析すればよさそう
dpp-ext-tomlはtomlファイルを読み出してplugins部分だけ整形して返すだけの機構っぽい
整形は標準パラメータを注入しつつ必須のnameを適当に埋める感じ?
ここの章読む限り標準パラメータというのは変数で与えられるcontextbuilderというものがもっているっぽい
contextの方はext-lazyとか向け?
toml読み出しただけだと基本的にrepoだけ持ったPluginの配列が読み出されるっぽいのでrepo+name+標準設定 があればinstallerやprotocol-gitは認識できる(はず)
MultipleHook: (プラグイン同士は特別依存関係を持たない)複数プラグインに依存する設定コードが存在するとき用に指定したプラグイン全てが読み込まれた(前後)で実行されるコードを設定できる機構 skkeletonがなぜか(プラグインマネージャ上では)nvim-cmpに依存しているみたいな状況を回避できる?
ext-lazyと組み合わせた時に真価を発揮しそう
contextbuilderの吐くoptionsとtomlに注入されるそれは別っぽい
ひとまず
{depends?, hooks_file?, repo} | {depends?, hooks_file?, local, path}
あたりでリスト列挙してそれを整形して返してみる
type LocalPlugin = {
depends?: string | string[];
hooks_file?: string | string[];
local: true;
path: string;
repo?: string;
};
type RepoPlugin = {
depends?: string | string[];
hooks_file?: string | string[];
repo: string;
path?: string;
};
export type PluginUnformatted = LocalPlugin | RepoPlugin;
import { PluginUnformatted } from "./dpp_types.ts";
import { Plugin } from "jsr:@shougo/dpp-vim@~4.0.0/types";
import { basename } from "jsr:@std/path@~1.0.2/basename";
export function format( unformatted_plugins: PluginUnformatted[], defaultOptions?: Record<string, never> ): Plugin[] {
const plugins = unformatted_plugins.map((plugin: PluginUnformatted) => {
return {
...defaultOptions,
...plugin,
name: basename( "local" in plugin ? plugin.path : plugin.repo),
};
});
return plugins;
}
こんな感じのものを用意して
import { PluginUnformatted } from "./dpp_types.ts";
export const PluginList: PluginUnformatted[] = [
{ repo: "vim-denops/denops.vim", },
{ repo: "Shougo/dpp.vim", },
{ repo: "Shougo/dpp-ext-installer", },
{ repo: "Shougo/dpp-protocol-git", },
{ repo: "vim-skk/skkeleton", },
];
こんな配列を読ませて帰り値にしてext-installer呼んだら無事skkeletonがインストールされた あとはhookまわりの挙動を思い出せばいい?
~~~
{
repo: "vim-skk/skkeleton",
depends: "vim-denops/denops.vim",
hooks_file: "~/.config/vim/skkeleton.vim",
},
~~~
とかして.config/vim/skkeleton.vimにそれっぽい設定書いたらいつもと同じ具合に使えるようになった
次なにかやるとすれば遅延読み込みを使ってみるとか...?
hooks_fileのパスはなんか自動展開されてほしいかもしれない
CheckFilesはcacheの自動更新のフック?
自動更新が走るわけではなくて起動時に走らせるautocmdとかを差し込むのに使えるというイメージ?
hooksfilesはhooks_fileまとめておけば勝手にCheckFilesに突っ込んだりその他処理を行ってくれる何かっぽさがある(その他は未確定 確実にhooks_fileをCheckFilesに追加するための機構っぽいしどうも自動生成される)