TypeScript -> Vim script -> TypeScriptを経由したProcessの呼び出し
TypeScriptでは FuncRef を扱うことができないので、ユーザが設定したProcess(valueがFuncRefの辞書)を扱うにはVim scriptを経由しないといけない TSで用意したデフォルトのProcessと、ユーザが設定したProcessを同じインターフェイスで呼び出すwrapperをVim script側で用意する必要がある Processes, Processの登録 で registerFunction した関数をfzf実行後に呼び出す、その際に対象の関数名をVim scriptに渡す必要があるので、実行したコマンド名と expectKey から生成する TypeScript側の関数でfzfから lines を受け取って諸々の処理をしたあとにVim scriptを経由してTypeScriptに戻ってこれるようにする
code:remote/handler_to_process.vim
function! fzf_preview#remote#handler_to_process#call_funcref_or_fallback_default_processor(default_processor_function_name, expect_key, lines, processor_name) abort
if (a:process_name == v:null)
call call(a:default_process_function_name, a:lines)
else
let processes = eval('g:' . a:processor_name)
if type(Process) == v:t_string
call call(Process, a:lines)
elseif type(Process) == v:t_func
call Process(a:lines)
endif
endif
endfunction
TSからは registerFunction した関数名をstringで引数として渡す
call call(func_name, a:lines) でTSの関数を呼び出す
--processes オプションが指定されていた場合、変数名を eval して展開して、中の関数名(string) or FuncRef を call する
string を許容している理由はユーザがProcessesを設定する際に取得する defaultProcesses 的なやつがTSの関数名が入ったものになる想定のため( FuncRef を取得することができない)