From a36eb377dbe0b5ff4b0677477502517178577d5c Mon Sep 17 00:00:00 2001 From: wsdjeg Date: Wed, 20 Apr 2022 22:58:34 +0800 Subject: [PATCH] fix(scrollbar): fix scrollbar on SPC number key binding Problem:If win_count < number, SPC number will close scrollbar Solution: use vim#window.win_count api instead of winnr('$') --- autoload/SpaceVim/api/vim/window.vim | 8 ++++++++ autoload/SpaceVim/layers/core/statusline.vim | 5 +++-- config/plugins/defx.vim | 11 ++--------- 3 files changed, 13 insertions(+), 11 deletions(-) diff --git a/autoload/SpaceVim/api/vim/window.vim b/autoload/SpaceVim/api/vim/window.vim index 699ca207a..967e0dc20 100644 --- a/autoload/SpaceVim/api/vim/window.vim +++ b/autoload/SpaceVim/api/vim/window.vim @@ -98,6 +98,14 @@ else endfunction endif +function! s:self.win_count() abort + if has('nvim') && exists('*nvim_win_get_config') + return len(filter(range(1, winnr('$')), '!has_key(nvim_win_get_config(win_getid(v:val)), "col")')) + else + return winnr('$') + endif +endfunction + function! s:self.winexists(winid) abort if !exists('win_id2tabwin') return 0 diff --git a/autoload/SpaceVim/layers/core/statusline.vim b/autoload/SpaceVim/layers/core/statusline.vim index 07fe74424..7353b0ab7 100644 --- a/autoload/SpaceVim/layers/core/statusline.vim +++ b/autoload/SpaceVim/layers/core/statusline.vim @@ -37,7 +37,8 @@ let s:LANG = SpaceVim#api#import('language') let s:JSON = SpaceVim#api#import('data#json') -let s:VIM = SpaceVim#api#import('vim') +let s:VIM = SpaceVim#api#import('vim') +let s:WIN = SpaceVim#api#import('vim#window') " init @@ -834,7 +835,7 @@ function! SpaceVim#layers#core#statusline#ctrlp_status(str) abort endfunction function! SpaceVim#layers#core#statusline#jump(i) abort - if winnr('$') >= a:i + if s:WIN.win_count() >= a:i exe a:i . 'wincmd w' endif endfunction diff --git a/config/plugins/defx.vim b/config/plugins/defx.vim index 41a2f09c8..55e3feee3 100644 --- a/config/plugins/defx.vim +++ b/config/plugins/defx.vim @@ -11,6 +11,7 @@ scriptencoding utf-8 let s:SYS = SpaceVim#api#import('system') let s:FILE = SpaceVim#api#import('file') let s:VCOP = SpaceVim#api#import('vim#compatible') +let s:WIN = SpaceVim#api#import('vim#window') if g:spacevim_filetree_direction ==# 'right' let s:direction = 'rightbelow' @@ -61,19 +62,11 @@ augroup vfinit autocmd FileType defx call s:defx_init() " auto close last defx windows autocmd BufEnter * nested if - \ (!has('vim_starting') && s:win_count() == 1 && g:_spacevim_autoclose_filetree + \ (!has('vim_starting') && s:WIN.win_count() == 1 && g:_spacevim_autoclose_filetree \ && &filetype ==# 'defx') | \ call s:close_last_vimfiler_windows() | endif augroup END -function! s:win_count() abort - if has('nvim') && exists('*nvim_win_get_config') - return len(filter(range(1, winnr('$')), '!has_key(nvim_win_get_config(win_getid(v:val)), "col")')) - else - return winnr('$') - endif -endfunction - " in this function, we should check if shell terminal still exists, " then close the terminal job before close vimfiler function! s:close_last_vimfiler_windows() abort