QFixHowm のリストを unite.vim で出力する

欲しかったのでちょっと書いてみました。

[unite-qfixlist]

let s:source = {
\   "name" : "qfixlist",
\   "description" : "qfixlist",
\   "action_table" : {
\       "new_memo" : {
\           "is_selectable" : 0,
\       }
\   }
\}

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

function! s:source.gather_candidates(args, context)
    call qfixmemo#ListCmd()
    if get(a:args, 0, "") == "close"
        close
    endif

    return map(copy(qfixlist#GetList("")[0]), '{
\       "word" : v:val.text,
\       "kind" : "file",
\       "action__path" : v:val.filename
\   }')
endfunction

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

[コマンド]

:Unite qfixlist

" qfixlist のウィンドウを閉じる場合は引数に close を渡す
:Unite qfixlist:close


とりあえず、Vim script のソース見つつ書いてみたのでこれで問題がないかどうかは分からない。
一瞬ウィンドウが開いてしまうのはどうにかしたいけども…ぐぬぬ
ちなみに起動1回目にキャッシングを行なっているので、再キャッシュする場合は、,ra を行う必要があります。


あと本記事とは全く関係ないですが gather_candidates の candidate に default_action を設定したいですね。

[{ "word" : "[ new memo ]", "default_action" : "new_memo" }]

みたいな感じで。