From e60d89c7577a9ced65dca9fce4ceb9fb74eb4c43 Mon Sep 17 00:00:00 2001 From: hrsh7th Date: Tue, 16 Mar 2021 01:09:18 +0900 Subject: [PATCH 1/3] Add `compe#confirm({ 'select': v:true, 'keys': '' })` --- autoload/compe.vim | 45 +++++++++++++++++++++++++++++---------------- 1 file changed, 29 insertions(+), 16 deletions(-) diff --git a/autoload/compe.vim b/autoload/compe.vim index dcb9af5..1167bee 100644 --- a/autoload/compe.vim +++ b/autoload/compe.vim @@ -51,11 +51,18 @@ function! compe#confirm(...) abort endif endfor - if mode()[0] ==# 'i' && complete_info(['selected']).selected != -1 + let l:option = s:normalize(get(a:000, 0, {})) + let l:select = get(l:option, 'select', v:false) + if mode()[0] ==# 'i' && pumvisible() && (l:select || complete_info(['selected']).selected != -1) call luaeval('require"compe"._confirm_pre()') - call feedkeys("\(compe-confirm)") + let l:confirm = '' + if l:select && empty(v:completed_item) + let l:confirm .= "\" + endif + let l:confirm .= "\(compe-confirm)" + call feedkeys(l:confirm) else - call s:fallback(get(a:000, 0, v:null)) + call s:fallback(l:option) endif return "\" endfunction @@ -68,27 +75,27 @@ function! compe#close(...) abort if mode()[0] ==# 'i' && pumvisible() return "\\=luaeval('require\"compe\"._close()')\" endif - call s:fallback(get(a:000, 0, v:null)) + call s:fallback(s:normalize(get(a:000, 0, {}))) return "\" endfunction " " compe#scroll " -function! compe#scroll(args) abort +function! compe#scroll(option) abort let l:ctx = {} - function! l:ctx.callback(args) abort + function! l:ctx.callback(option) abort let l:winids = s:Window.find({ winid -> !!getwinvar(winid, 'compe_documentation', v:false) }) if !empty(l:winids) - let l:delta = get(a:args, 'delta', 4) + let l:delta = get(a:option, 'delta', 4) for l:winid in l:winids call s:Window.scroll(l:winid, s:Window.info(l:winid).topline + l:delta) endfor else - call s:fallback(get(a:args, 'fallback', v:null)) + call s:fallback(a:option) endif endfunction - call timer_start(0, { -> l:ctx.callback(a:args) }) + call timer_start(0, { -> l:ctx.callback(s:normalize(a:option)) }) return "\" endfunction @@ -110,16 +117,22 @@ function! compe#_has_completed_item() abort return !empty(v:completed_item) ? v:true : v:false endfunction +" +" normalize +" +function! s:normalize(option) abort + if type(a:option) == v:t_string + return { 'fallback': { 'keys': a:option, 'mode': 'n' } } + endif + return a:option +endfunction + " " fallback " -function! s:fallback(fallback) abort - if type(a:fallback) == v:t_string - return feedkeys(a:fallback, 'n') - elseif type(a:fallback) == v:t_dict - if has_key(a:fallback, 'keys') - return feedkeys(a:fallback.keys, get(a:fallback, 'mode', '')) - endif +function! s:fallback(option) abort + if has_key(a:option, 'keys') && !empty(a:option.keys) + call feedkeys(a:option.keys, get(a:option, 'mode', 'n')) endif endfunction From 236946deaead596b1629af1046a590580d66ecea Mon Sep 17 00:00:00 2001 From: hrsh7th Date: Tue, 16 Mar 2021 01:12:06 +0900 Subject: [PATCH 2/3] Fix --- autoload/compe.vim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/autoload/compe.vim b/autoload/compe.vim index 1167bee..ecaf203 100644 --- a/autoload/compe.vim +++ b/autoload/compe.vim @@ -122,7 +122,7 @@ endfunction " function! s:normalize(option) abort if type(a:option) == v:t_string - return { 'fallback': { 'keys': a:option, 'mode': 'n' } } + return { 'keys': a:option, 'mode': 'n' } endif return a:option endfunction From 384cbdd6be10116e221c9b35e85682d07562fe7a Mon Sep 17 00:00:00 2001 From: hrsh7th Date: Tue, 16 Mar 2021 01:14:12 +0900 Subject: [PATCH 3/3] Improve --- autoload/compe.vim | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/autoload/compe.vim b/autoload/compe.vim index ecaf203..1f2d152 100644 --- a/autoload/compe.vim +++ b/autoload/compe.vim @@ -53,12 +53,11 @@ function! compe#confirm(...) abort let l:option = s:normalize(get(a:000, 0, {})) let l:select = get(l:option, 'select', v:false) - if mode()[0] ==# 'i' && pumvisible() && (l:select || complete_info(['selected']).selected != -1) + let l:selected = complete_info(['selected']).selected != -1 + if mode()[0] ==# 'i' && pumvisible() && (l:select || l:selected) call luaeval('require"compe"._confirm_pre()') let l:confirm = '' - if l:select && empty(v:completed_item) - let l:confirm .= "\" - endif + let l:confirm .= l:select && !l:selected ? "\" : '' let l:confirm .= "\(compe-confirm)" call feedkeys(l:confirm) else