unite.vim で候補ごとに default_action を設定する

先日書いた記事なんですが、コメントでやり方を教えていただいたので覚書。
kind で default_action を設定すれば出来るみたいです。

[unite-qfixlist]

let s:source = {
\   "name" : "qfixhowm",
\   "description" : "qfixhowm",
\}

function! s:source.gather_candidates(args, context)
    let list = qfixmemo#ListCmd()

    let new_memo = [{
\       "word" : "[ new memo ]",
\       "default_action" : "new_memo",
\       "kind" : "qfixlist_new_memo"
\   }]

    return new_memo + map(list, '{
\       "word" : v:val.text,
\       "kind" : "file",
\       "action__path" : v:val.filename
\   }')
endfunction

call unite#define_source(s:source)
unlet s:source


let s:kind = {
\   "name" : "qfixlist_new_memo",
\   "default_action" : "new_memo",
\   "action_table" : {
\       "new_memo" : {
\           "is_selectable" : 0,
\       }
\   }
\}

function! s:kind.action_table.new_memo.func(candidates)
    tabnew
    call qfixmemo#EditNew()
endfunction

call unite#define_kind(s:kind)
unlet s:kind


" QFixList 側でウィンドウを出さないように設定
" g,a 等の呼び出し時にもウィンドウが出なくなるので注意
function! QFixListAltOpen(qflist, dir)
    return a:qflist
endfunction

let QFixListAltOpen = 1

これで [new memo] を選択した場合は new_memo-action が起動して、それ以外の場合は各々の action が起動します。
この考えはなかったなぁ…。
あと一瞬ウィンドウがでないやり方も教えていただいたので書いてみました。