mirror of
https://github.com/Llewellynvdm/fzf.git
synced 2024-11-11 08:10:54 +00:00
[vim] Fix issue with multiple popups (#1927)
Invoking fzf from an existing Vim popup terminal is a special case. It requires some new code to avoid E994 from being raised and the user being stuck in a non-closable popup window. Fix #1916
This commit is contained in:
parent
b1b916ce15
commit
0f5c6e8f04
@ -651,7 +651,7 @@ function! s:calc_size(max, val, dict)
|
|||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! s:getpos()
|
function! s:getpos()
|
||||||
return {'tab': tabpagenr(), 'win': winnr(), 'cnt': winnr('$'), 'tcnt': tabpagenr('$')}
|
return {'tab': tabpagenr(), 'win': winnr(), 'winid': win_getid(), 'cnt': winnr('$'), 'tcnt': tabpagenr('$')}
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! s:split(dict)
|
function! s:split(dict)
|
||||||
@ -727,8 +727,8 @@ function! s:execute_term(dict, command, temps) abort
|
|||||||
" there's no other listed buffer (nvim +'set nobuflisted')
|
" there's no other listed buffer (nvim +'set nobuflisted')
|
||||||
close
|
close
|
||||||
endif
|
endif
|
||||||
execute 'tabnext' self.ppos.tab
|
silent! execute 'tabnext' self.ppos.tab
|
||||||
execute self.ppos.win.'wincmd w'
|
silent! execute self.ppos.win.'wincmd w'
|
||||||
endif
|
endif
|
||||||
|
|
||||||
if bufexists(self.buf)
|
if bufexists(self.buf)
|
||||||
@ -837,7 +837,7 @@ if has('nvim')
|
|||||||
else
|
else
|
||||||
function! s:create_popup(hl, opts) abort
|
function! s:create_popup(hl, opts) abort
|
||||||
let is_frame = has_key(a:opts, 'border')
|
let is_frame = has_key(a:opts, 'border')
|
||||||
let buf = is_frame ? '' : term_start(&shell, #{hidden: 1})
|
let buf = is_frame ? '' : term_start(&shell, #{hidden: 1, term_finish: 'close'})
|
||||||
let id = popup_create(buf, #{
|
let id = popup_create(buf, #{
|
||||||
\ line: a:opts.row,
|
\ line: a:opts.row,
|
||||||
\ col: a:opts.col,
|
\ col: a:opts.col,
|
||||||
@ -851,7 +851,7 @@ else
|
|||||||
call setbufline(winbufnr(id), 1, a:opts.border)
|
call setbufline(winbufnr(id), 1, a:opts.border)
|
||||||
execute 'autocmd BufWipeout * ++once call popup_close('..id..')'
|
execute 'autocmd BufWipeout * ++once call popup_close('..id..')'
|
||||||
else
|
else
|
||||||
execute 'autocmd BufWipeout * ++once bwipeout! '..buf
|
execute 'autocmd BufWipeout * ++once call term_sendkeys('..buf..', "exit\<CR>")'
|
||||||
endif
|
endif
|
||||||
return winbufnr(id)
|
return winbufnr(id)
|
||||||
endfunction
|
endfunction
|
||||||
|
Loading…
Reference in New Issue
Block a user