mirror of
https://github.com/SpaceVim/SpaceVim.git
synced 2025-02-03 00:50:05 +08:00
Fix tabline plugin (#3693)
This commit is contained in:
parent
e650dceffe
commit
b05721a335
@ -7,6 +7,7 @@
|
|||||||
"=============================================================================
|
"=============================================================================
|
||||||
|
|
||||||
let s:self = {}
|
let s:self = {}
|
||||||
|
let s:self.__cmp = SpaceVim#api#import('vim#compatible')
|
||||||
|
|
||||||
let s:self._tree = {}
|
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") ==# ""')
|
return filter(copy(tabpagebuflist(a:id)), 'buflisted(v:val) && getbufvar(v:val, "&buftype") ==# ""')
|
||||||
endfunction
|
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
|
function! SpaceVim#api#vim#tab#get() abort
|
||||||
return deepcopy(s:self)
|
return deepcopy(s:self)
|
||||||
endfunction
|
endfunction
|
||||||
|
@ -32,6 +32,7 @@ let s:BUFFER = SpaceVim#api#import('vim#buffer')
|
|||||||
let s:HI = SpaceVim#api#import('vim#highlight')
|
let s:HI = SpaceVim#api#import('vim#highlight')
|
||||||
let s:LOG = SpaceVim#logger#derive('tabline ')
|
let s:LOG = SpaceVim#logger#derive('tabline ')
|
||||||
let s:SYS = SpaceVim#api#import('system')
|
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
|
endfunction
|
||||||
|
|
||||||
function! s:buffer_item(bufnr, ...) abort
|
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 name = s:tabname(a:bufnr)
|
||||||
let item = {
|
let item = {
|
||||||
\ 'bufnr' : a:bufnr,
|
\ 'bufnr' : a:bufnr,
|
||||||
@ -113,13 +115,13 @@ function! SpaceVim#layers#core#tabline#get() abort
|
|||||||
|
|
||||||
if tabpage_counts > 1
|
if tabpage_counts > 1
|
||||||
let current_tabnr = tabpagenr()
|
let current_tabnr = tabpagenr()
|
||||||
let previous_tabnr = tabpagenr('#')
|
let previous_tabnr = s:TAB.previous_tabpagenr()
|
||||||
let matched_len = 0
|
let matched_len = 0
|
||||||
for i in range(1, tabpage_counts)
|
for i in range(1, tabpage_counts)
|
||||||
call add(all_tabline_items, s:buffer_item(tabpagebuflist(i)[tabpagewinnr(i) - 1], i))
|
call add(all_tabline_items, s:buffer_item(tabpagebuflist(i)[tabpagewinnr(i) - 1], i))
|
||||||
endfor
|
endfor
|
||||||
if previous_tabnr < current_tabnr
|
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])
|
call add(shown_items, all_tabline_items[i - 1])
|
||||||
if s:check_len(shown_items)
|
if s:check_len(shown_items)
|
||||||
let matched_len = 1
|
let matched_len = 1
|
||||||
@ -175,18 +177,35 @@ function! SpaceVim#layers#core#tabline#get() abort
|
|||||||
endif
|
endif
|
||||||
endif
|
endif
|
||||||
let s:shown_items = shown_items
|
let s:shown_items = shown_items
|
||||||
|
if empty(shown_items)
|
||||||
|
return ''
|
||||||
|
endif
|
||||||
let t = ''
|
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 current_tabnr == shown_items[0].tabnr
|
||||||
if getbufvar(shown_items[0].bufnr, '&modified', 0)
|
if s:is_modified(shown_items[0].bufnr)
|
||||||
let t = '%#SpaceVim_tabline_m# '
|
if right_hidden_tab_number > 0
|
||||||
|
let t .= ' %#SpaceVim_tabline_a_SpaceVim_tabline_m#' . s:lsep
|
||||||
|
endif
|
||||||
|
let t .= '%#SpaceVim_tabline_m# '
|
||||||
else
|
else
|
||||||
let t = '%#SpaceVim_tabline_a# '
|
if right_hidden_tab_number > 0
|
||||||
|
let t .= ' ' . s:ilsep
|
||||||
|
endif
|
||||||
|
let t .= '%#SpaceVim_tabline_a# '
|
||||||
endif
|
endif
|
||||||
else
|
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
|
endif
|
||||||
let index = 1
|
let index = 1
|
||||||
for item in shown_items
|
for item in shown_items[:-2]
|
||||||
if has('tablineat')
|
if has('tablineat')
|
||||||
let t .= '%' . index . '@SpaceVim#layers#core#tabline#jump@'
|
let t .= '%' . index . '@SpaceVim#layers#core#tabline#jump@'
|
||||||
endif
|
endif
|
||||||
@ -201,6 +220,39 @@ function! SpaceVim#layers#core#tabline#get() abort
|
|||||||
let t .= ' ' . s:ilsep . ' '
|
let t .= ' ' . s:ilsep . ' '
|
||||||
endif
|
endif
|
||||||
endfor
|
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_SpaceVim_tabline_b#' . s:rsep
|
||||||
let t .= '%#SpaceVim_tabline_a# Tabs '
|
let t .= '%#SpaceVim_tabline_a# Tabs '
|
||||||
return t
|
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# '
|
let t .= ' %#SpaceVim_tabline_a_SpaceVim_tabline_b#' . s:lsep . '%#SpaceVim_tabline_b# '
|
||||||
endif
|
endif
|
||||||
elseif index(s:buffers, s:BUFFER.bufnr()) > 0 && item.bufnr == s:buffers[index(s:buffers, s:BUFFER.bufnr()) - 1]
|
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# '
|
let t .= ' %#SpaceVim_tabline_b_SpaceVim_tabline_m#' . s:lsep . '%#SpaceVim_tabline_m# '
|
||||||
else
|
else
|
||||||
let t .= ' %#SpaceVim_tabline_b_SpaceVim_tabline_a#' . s:lsep . '%#SpaceVim_tabline_a# '
|
let t .= ' %#SpaceVim_tabline_b_SpaceVim_tabline_a#' . s:lsep . '%#SpaceVim_tabline_a# '
|
||||||
|
Loading…
Reference in New Issue
Block a user