From e2cb874ed1aee5ea9a75137e8bb262496e09a81d Mon Sep 17 00:00:00 2001 From: Wang Shidong <wsdjeg@outlook.com> Date: Tue, 2 Apr 2019 22:57:20 +0800 Subject: [PATCH] Fix project switch function (#2718) Add fzf menu support --- autoload/SpaceVim/layers/fzf.vim | 36 ++++++++++++++++++++ autoload/SpaceVim/plugins/projectmanager.vim | 13 ++++++- 2 files changed, 48 insertions(+), 1 deletion(-) diff --git a/autoload/SpaceVim/layers/fzf.vim b/autoload/SpaceVim/layers/fzf.vim index ba8e29354..dfd8cdf7e 100644 --- a/autoload/SpaceVim/layers/fzf.vim +++ b/autoload/SpaceVim/layers/fzf.vim @@ -425,3 +425,39 @@ function! s:helptags(...) abort \ 'down': '40%' \ })) endfunction + + +" fzf menu command +function! SpaceVim#layers#fzf#complete_menu(ArgLead, CmdLine, CursorPos) abort + return join(keys(g:unite_source_menu_menus), "\n") +endfunction + +command! -nargs=* -complete=custom,SpaceVim#layers#fzf#complete_menu FzfMenu call <SID>menu(<q-args>) +function! s:menu_action(e) abort + let action = get(s:menu_action, a:e, '') + exe action +endfunction +function! s:menu(name) abort + let s:source = 'menu' + let s:menu_name = a:name + let s:menu_action = {} + function! s:menu_content() abort + let menu = get(g:unite_source_menu_menus, s:menu_name, {}) + if has_key(menu, 'command_candidates') + let rt = [] + for item in menu.command_candidates + call add(rt, item[0]) + call extend(s:menu_action, {item[0] : item[1]}, 'force') + endfor + return rt + else + return [] + endif + endfunction + call fzf#run(fzf#wrap('menu', { + \ 'source': reverse(<sid>menu_content()), + \ 'sink': function('s:menu_action'), + \ 'options': '+m', + \ 'down': '40%' + \ })) +endfunction diff --git a/autoload/SpaceVim/plugins/projectmanager.vim b/autoload/SpaceVim/plugins/projectmanager.vim index 76bd0f705..b3aee23e0 100644 --- a/autoload/SpaceVim/plugins/projectmanager.vim +++ b/autoload/SpaceVim/plugins/projectmanager.vim @@ -36,8 +36,19 @@ let g:unite_source_menu_menus.Projects = {'description': let g:unite_source_menu_menus.Projects.command_candidates = \ get(g:unite_source_menu_menus.Projects,'command_candidates', []) +" this function will use fuzzy find layer, now only denite and unite are +" supported. + function! SpaceVim#plugins#projectmanager#list() abort - Unite menu:Projects + if SpaceVim#layers#isLoaded('unite') + Unite menu:Projects + elseif SpaceVim#layers#isLoaded('denite') + Denite menu:Projects + elseif SpaceVim#layers#isLoaded('fzf') + FzfMenu Projects + else + call SpaceVim#logger#warn('fuzzy find layer is needed to find project!') + endif endfunction function! SpaceVim#plugins#projectmanager#open(project) abort