unite の action を unite で選ぶ

unite では選んだ対象に対して様々な action を実行できる。たくさんあるので、デフォルト以外の action を実行する場合は選択する必要がある。
選択したい場合は対象を選んでから を押す。すると…

こういう風になって action を選べるわけだが…ちょっと待った。これ unite だよね? 何このUI。こんなの unite じゃない!unite なら action も unite で選びたいでしょ!
と、言うわけでやってみた。

長い!と言うのも、これは unite の内部に閉じ込められてる処理を無理矢理実行するため unite 内のコードをコピペしている。細かく API が提供されていれば必要はなかったんだけど、そんな都合のいいものはないので力技。とは言え、本体はいじってない。
これで choose_action と言う action が定義されるので、今度はこれを今まで通り で実行できるように FileType unite で以下のように設定する。

" after/ftplugin/unite.vim
nnoremap <buffer> <Tab> :<C-u>call unite#mappings#do_action('choose_action')<CR>
inoremap <buffer> <Tab> <ESC>:call unite#mappings#do_action('choose_action')<CR>

これで候補を選んで を押すと…

こうなる。選んで を押せば action が実行される。もちろん選択した候補が複数あっても OK。

問題点

  • 選択した候補が表示されない。
  • 右側空いてるし action の説明文表示できるといいなぁ。

これらは本体いじらないと無理。仮にやるとしても、後者はともかく、前者のは UI 的にもどこに表示するのがいいのかよくわからんね。1 行目と 2 行目の間に付加情報を表示する領域を追加とか? うーん…。