From 0f5c6e8f040833ca632bb5ff345542879769225c Mon Sep 17 00:00:00 2001 From: lacygoill Date: Sun, 29 Mar 2020 19:06:06 +0200 Subject: [PATCH] [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 --- plugin/fzf.vim | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/plugin/fzf.vim b/plugin/fzf.vim index 6fa3d14..83734ae 100644 --- a/plugin/fzf.vim +++ b/plugin/fzf.vim @@ -651,7 +651,7 @@ function! s:calc_size(max, val, dict) endfunction 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 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') close endif - execute 'tabnext' self.ppos.tab - execute self.ppos.win.'wincmd w' + silent! execute 'tabnext' self.ppos.tab + silent! execute self.ppos.win.'wincmd w' endif if bufexists(self.buf) @@ -837,7 +837,7 @@ if has('nvim') else function! s:create_popup(hl, opts) abort 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, #{ \ line: a:opts.row, \ col: a:opts.col, @@ -851,7 +851,7 @@ else call setbufline(winbufnr(id), 1, a:opts.border) execute 'autocmd BufWipeout * ++once call popup_close('..id..')' else - execute 'autocmd BufWipeout * ++once bwipeout! '..buf + execute 'autocmd BufWipeout * ++once call term_sendkeys('..buf..', "exit\")' endif return winbufnr(id) endfunction