mirror of
https://github.com/SpaceVim/SpaceVim.git
synced 2025-03-23 17:49:57 +08:00
Fix: smart quit should skip floating windows and popup (#3640)
@bug vim winnr('$') do not include popup ref: https://github.com/vim/vim/issues/6474
This commit is contained in:
parent
c937c0e2fd
commit
823d288b35
@ -29,7 +29,7 @@ if exists('*nvim_win_get_cursor')
|
|||||||
endfunction
|
endfunction
|
||||||
elseif g:_spacevim_if_lua
|
elseif g:_spacevim_if_lua
|
||||||
function! s:self.get_cursor(winid) abort
|
function! s:self.get_cursor(winid) abort
|
||||||
lua require("spacevim.api.vim.window").get_cursor(vim.eval("a:winid"))
|
lua require("spacevim.api.vim.window").get_cursor(vim.eval("a:winid"))
|
||||||
endfunction
|
endfunction
|
||||||
else
|
else
|
||||||
function! s:self.get_cursor(winid) abort
|
function! s:self.get_cursor(winid) abort
|
||||||
@ -42,23 +42,47 @@ if exists('*nvim_win_set_cursor')
|
|||||||
return nvim_win_set_cursor(a:winid, a:pos)
|
return nvim_win_set_cursor(a:winid, a:pos)
|
||||||
endfunction
|
endfunction
|
||||||
elseif exists('*win_execute')
|
elseif exists('*win_execute')
|
||||||
function! s:self.set_cursor(win, pos) abort
|
function! s:self.set_cursor(win, pos) abort
|
||||||
" @fixme use g` to move to cursor line
|
" @fixme use g` to move to cursor line
|
||||||
" this seem to be a bug of vim
|
" this seem to be a bug of vim
|
||||||
" https://github.com/vim/vim/issues/5022
|
" https://github.com/vim/vim/issues/5022
|
||||||
call win_execute(a:win, ':call cursor(' . a:pos[0] . ', ' . a:pos[1] . ')')
|
call win_execute(a:win, ':call cursor(' . a:pos[0] . ', ' . a:pos[1] . ')')
|
||||||
" call win_execute(a:win, ':' . a:pos[0])
|
" call win_execute(a:win, ':' . a:pos[0])
|
||||||
call win_execute(a:win, ':normal! g"')
|
call win_execute(a:win, ':normal! g"')
|
||||||
endfunction
|
endfunction
|
||||||
elseif g:_spacevim_if_lua
|
elseif g:_spacevim_if_lua
|
||||||
function! s:self.set_cursor(winid, pos) abort
|
function! s:self.set_cursor(winid, pos) abort
|
||||||
lua require("spacevim.api.vim.window").set_cursor(vim.eval("a:winid"), vim.eval("a:pos"))
|
lua require("spacevim.api.vim.window").set_cursor(vim.eval("a:winid"), vim.eval("a:pos"))
|
||||||
endfunction
|
endfunction
|
||||||
else
|
else
|
||||||
function! s:self.set_cursor(winid, pos) abort
|
function! s:self.set_cursor(winid, pos) abort
|
||||||
endfunction
|
endfunction
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
if has('nvim')
|
||||||
|
function! s:self.is_float(winnr) abort
|
||||||
|
let id = win_getid(a:winnr)
|
||||||
|
if id > 0
|
||||||
|
return has_key(nvim_win_get_config(id), 'col')
|
||||||
|
else
|
||||||
|
return 0
|
||||||
|
endif
|
||||||
|
endfunction
|
||||||
|
else
|
||||||
|
function! s:self.is_float(winnr) abort
|
||||||
|
let id = win_getid(a:winnr)
|
||||||
|
if id > 0
|
||||||
|
try
|
||||||
|
return has_key(popup_getoptions(id), 'col')
|
||||||
|
catch /^Vim\%((\a\+)\)\=:E993/
|
||||||
|
return 0
|
||||||
|
endtry
|
||||||
|
else
|
||||||
|
return 0
|
||||||
|
endif
|
||||||
|
endfunction
|
||||||
|
endif
|
||||||
|
|
||||||
|
|
||||||
function! SpaceVim#api#vim#window#get() abort
|
function! SpaceVim#api#vim#window#get() abort
|
||||||
return deepcopy(s:self)
|
return deepcopy(s:self)
|
||||||
|
@ -9,6 +9,7 @@
|
|||||||
scriptencoding utf-8
|
scriptencoding utf-8
|
||||||
|
|
||||||
let s:BUFFER = SpaceVim#api#import('vim#buffer')
|
let s:BUFFER = SpaceVim#api#import('vim#buffer')
|
||||||
|
let s:WIN = SpaceVim#api#import('vim#window')
|
||||||
|
|
||||||
|
|
||||||
let g:unite_source_menu_menus =
|
let g:unite_source_menu_menus =
|
||||||
@ -289,6 +290,8 @@ endfunction
|
|||||||
fu! SpaceVim#mapping#SmartClose() abort
|
fu! SpaceVim#mapping#SmartClose() abort
|
||||||
let ignorewin = get(g:,'spacevim_smartcloseignorewin',[])
|
let ignorewin = get(g:,'spacevim_smartcloseignorewin',[])
|
||||||
let ignoreft = get(g:, 'spacevim_smartcloseignoreft',[])
|
let ignoreft = get(g:, 'spacevim_smartcloseignoreft',[])
|
||||||
|
" @bug vim winnr('$') do not include popup
|
||||||
|
" ref: https://github.com/vim/vim/issues/6474
|
||||||
let win_count = winnr('$')
|
let win_count = winnr('$')
|
||||||
let num = win_count
|
let num = win_count
|
||||||
for i in range(1,win_count)
|
for i in range(1,win_count)
|
||||||
@ -298,6 +301,8 @@ fu! SpaceVim#mapping#SmartClose() abort
|
|||||||
let num = num - 1
|
let num = num - 1
|
||||||
elseif getwinvar(i, '&previewwindow') == 1 && winnr() !=# i
|
elseif getwinvar(i, '&previewwindow') == 1 && winnr() !=# i
|
||||||
let num = num - 1
|
let num = num - 1
|
||||||
|
elseif s:WIN.is_float(i)
|
||||||
|
let num = num - 1
|
||||||
endif
|
endif
|
||||||
endfor
|
endfor
|
||||||
if num == 1
|
if num == 1
|
||||||
|
Loading…
x
Reference in New Issue
Block a user