1
0
mirror of https://github.com/SpaceVim/SpaceVim.git synced 2025-02-02 22:20:06 +08:00

Fix tabline plugin (#3693)

This commit is contained in:
Wang Shidong 2020-08-25 21:33:31 +08:00 committed by GitHub
parent e650dceffe
commit b05721a335
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 73 additions and 8 deletions

View File

@ -7,6 +7,7 @@
"=============================================================================
let s:self = {}
let s:self.__cmp = SpaceVim#api#import('vim#compatible')
let s:self._tree = {}
@ -33,6 +34,18 @@ function! s:self.realTabBuffers(id) abort
return filter(copy(tabpagebuflist(a:id)), 'buflisted(v:val) && getbufvar(v:val, "&buftype") ==# ""')
endfunction
function! s:self.previous_tabpagenr() abort
let tabsinfo = self.__cmp.execute('tabs')
let number = 0
for line in split(tabsinfo, "\n")
if line =~# '^Tab page \d'
let number = str2nr(matchstr(line, '\d\+'))
elseif line =~# '^#'
return number
endif
endfor
endfunction
function! SpaceVim#api#vim#tab#get() abort
return deepcopy(s:self)
endfunction

View File

@ -32,6 +32,7 @@ let s:BUFFER = SpaceVim#api#import('vim#buffer')
let s:HI = SpaceVim#api#import('vim#highlight')
let s:LOG = SpaceVim#logger#derive('tabline ')
let s:SYS = SpaceVim#api#import('system')
let s:TAB = SpaceVim#api#import('vim#tab')
" }}}
@ -81,6 +82,7 @@ function! s:wrap_id(id) abort
endfunction
function! s:buffer_item(bufnr, ...) abort
call SpaceVim#logger#info('What the fuck? a:000 is :' . string(a:000))
let name = s:tabname(a:bufnr)
let item = {
\ 'bufnr' : a:bufnr,
@ -113,13 +115,13 @@ function! SpaceVim#layers#core#tabline#get() abort
if tabpage_counts > 1
let current_tabnr = tabpagenr()
let previous_tabnr = tabpagenr('#')
let previous_tabnr = s:TAB.previous_tabpagenr()
let matched_len = 0
for i in range(1, tabpage_counts)
call add(all_tabline_items, s:buffer_item(tabpagebuflist(i)[tabpagewinnr(i) - 1], i))
endfor
if previous_tabnr < current_tabnr
for i in range(previous_tabnr, current_tabnr)
for i in range(previous_tabnr == 0 ? 1 : previous_tabnr, current_tabnr)
call add(shown_items, all_tabline_items[i - 1])
if s:check_len(shown_items)
let matched_len = 1
@ -175,18 +177,35 @@ function! SpaceVim#layers#core#tabline#get() abort
endif
endif
let s:shown_items = shown_items
if empty(shown_items)
return ''
endif
let t = ''
let right_hidden_tab_number = shown_items[0].tabnr - 1
let left_hidden_tab_number = tabpage_counts - shown_items[-1].tabnr
if right_hidden_tab_number > 0
let t .= '%#SpaceVim_tabline_a#' . ' << '. right_hidden_tab_number
endif
if current_tabnr == shown_items[0].tabnr
if getbufvar(shown_items[0].bufnr, '&modified', 0)
let t = '%#SpaceVim_tabline_m# '
if s:is_modified(shown_items[0].bufnr)
if right_hidden_tab_number > 0
let t .= ' %#SpaceVim_tabline_a_SpaceVim_tabline_m#' . s:lsep
endif
let t .= '%#SpaceVim_tabline_m# '
else
let t = '%#SpaceVim_tabline_a# '
if right_hidden_tab_number > 0
let t .= ' ' . s:ilsep
endif
let t .= '%#SpaceVim_tabline_a# '
endif
else
let t = '%#SpaceVim_tabline_b# '
if right_hidden_tab_number > 0
let t .= ' %#SpaceVim_tabline_a_SpaceVim_tabline_b#' . s:lsep
endif
let t .= '%#SpaceVim_tabline_b# '
endif
let index = 1
for item in shown_items
for item in shown_items[:-2]
if has('tablineat')
let t .= '%' . index . '@SpaceVim#layers#core#tabline#jump@'
endif
@ -201,6 +220,39 @@ function! SpaceVim#layers#core#tabline#get() abort
let t .= ' ' . s:ilsep . ' '
endif
endfor
let item = shown_items[-1]
if has('tablineat')
let t .= '%' . index . '@SpaceVim#layers#core#tabline#jump@'
endif
let t .= s:wrap_id(index) . item.bufname
if item.bufnr == s:BUFFER.bufnr()
if left_hidden_tab_number > 0
if s:is_modified(item.bufnr)
let t .= ' %#SpaceVim_tabline_m_SpaceVim_tabline_a#' . s:lsep
let t .= ' %#SpaceVim_tabline_a#' . left_hidden_tab_number . ' >>'
let t .= ' %#SpaceVim_tabline_a_SpaceVim_tabline_b#' . s:lsep . '%#SpaceVim_tabline_b#'
else
let t .= ' ' . s:ilsep
let t .= ' ' . left_hidden_tab_number . ' >>'
let t .= ' %#SpaceVim_tabline_a_SpaceVim_tabline_b#' . s:lsep . '%#SpaceVim_tabline_b#'
endif
else
if s:is_modified(item.bufnr)
let t .= ' %#SpaceVim_tabline_m_SpaceVim_tabline_b#' . s:lsep . '%#SpaceVim_tabline_b#'
else
let t .= ' %#SpaceVim_tabline_a_SpaceVim_tabline_b#' . s:lsep . '%#SpaceVim_tabline_b#'
endif
endif
else
if left_hidden_tab_number > 0
let t .= ' %#SpaceVim_tabline_b_SpaceVim_tabline_a#' . s:lsep
let t .= ' %#SpaceVim_tabline_a#' . left_hidden_tab_number . ' >>'
let t .= ' %#SpaceVim_tabline_a_SpaceVim_tabline_b#' . s:lsep . '%#SpaceVim_tabline_b#'
else
let t .= ' ' . s:ilsep
endif
endif
" how many buffers after the last item are hidden?
let t .= '%=%#SpaceVim_tabline_a_SpaceVim_tabline_b#' . s:rsep
let t .= '%#SpaceVim_tabline_a# Tabs '
return t
@ -325,7 +377,7 @@ function! SpaceVim#layers#core#tabline#get() abort
let t .= ' %#SpaceVim_tabline_a_SpaceVim_tabline_b#' . s:lsep . '%#SpaceVim_tabline_b# '
endif
elseif index(s:buffers, s:BUFFER.bufnr()) > 0 && item.bufnr == s:buffers[index(s:buffers, s:BUFFER.bufnr()) - 1]
if s:is_modified(item.bufnr)
if s:is_modified(s:BUFFER.bufnr())
let t .= ' %#SpaceVim_tabline_b_SpaceVim_tabline_m#' . s:lsep . '%#SpaceVim_tabline_m# '
else
let t .= ' %#SpaceVim_tabline_b_SpaceVim_tabline_a#' . s:lsep . '%#SpaceVim_tabline_a# '