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 に渡す方法も考えたんですが、そっちはどうだろうか。