quickrun の hook-point を後から有効にする
quickrun-hook は point と機能を対にして作成しているので
- success_close_buffer
- failure_close_buffer
- exit_close_quickfix
のような感じになっています。
しかし、これでは point ごとに hook を作成しなければなりません。
流石に point ごとに hook を作るのは効率が悪いし、hook の数が多くなり管理するのが大変になります。。
そこで、1つの機能に対して1つの hook を作成してあとから point を設定できるような形を考えています。
今考えているのがこんな感じであとから各必要な point を有効にする形。
let s:hook = { \ "name" : "test", \ "kind" : "hook", \ "config" : { \ "enable" : 1, \ "enable_finish" : 0, \ "enable_exit" : 0, \ }, \} function! s:hook.on_finish(...) if self.config.enable_finish call self.apply({ "point" : "finish", "args" : a:000 }) endif endfunction function! s:hook.on_exit(...) if self.config.enable_exit call self.apply({ "point" : "exit", "args" : a:000 }) endif endfunction " hook の各 point から呼ばれる処理 function! s:hook.apply(context) echom a:context.point endfunction call quickrun#module#register(s:hook, 1) unlet s:hook " exit の point を有効にする QuickRun -hook/test/enable_exit 1
ロジックはかなり泥臭いですが、各 point の enable を設定するだけなので簡単で分かりやすいかなーと。
point 名を明示的に config に渡す方法も考えたんですが、そっちはどうだろうか。