Some checks failed
Detach Plugins / check (FlyGrep.vim) (push) Has been cancelled
Detach Plugins / check (GitHub.vim) (push) Has been cancelled
Detach Plugins / check (JavaUnit.vim) (push) Has been cancelled
Detach Plugins / check (SourceCounter.vim) (push) Has been cancelled
Detach Plugins / check (cpicker.nvim) (push) Has been cancelled
Detach Plugins / check (dein-ui.vim) (push) Has been cancelled
Detach Plugins / check (git.vim) (push) Has been cancelled
Detach Plugins / check (iedit.vim) (push) Has been cancelled
Detach Plugins / check (scrollbar.vim) (push) Has been cancelled
Detach Plugins / check (vim-chat) (push) Has been cancelled
Detach Plugins / check (vim-cheat) (push) Has been cancelled
Detach Plugins / check (vim-todo) (push) Has been cancelled
Detach Plugins / check (xmake.vim) (push) Has been cancelled
test / Linux (nvim, nightly) (push) Has been cancelled
test / Linux (nvim, v0.3.8) (push) Has been cancelled
test / Linux (nvim, v0.4.0) (push) Has been cancelled
test / Linux (nvim, v0.4.2) (push) Has been cancelled
test / Linux (nvim, v0.4.3) (push) Has been cancelled
test / Linux (nvim, v0.4.4) (push) Has been cancelled
test / Linux (nvim, v0.5.0) (push) Has been cancelled
test / Linux (nvim, v0.5.1) (push) Has been cancelled
test / Linux (nvim, v0.6.0) (push) Has been cancelled
test / Linux (nvim, v0.6.1) (push) Has been cancelled
test / Linux (nvim, v0.7.0) (push) Has been cancelled
test / Linux (nvim, v0.7.2) (push) Has been cancelled
test / Linux (nvim, v0.8.0) (push) Has been cancelled
test / Linux (nvim, v0.8.1) (push) Has been cancelled
test / Linux (nvim, v0.8.2) (push) Has been cancelled
test / Linux (nvim, v0.8.3) (push) Has been cancelled
test / Linux (nvim, v0.9.0) (push) Has been cancelled
test / Linux (nvim, v0.9.1) (push) Has been cancelled
test / Linux (true, vim, v7.4.052) (push) Has been cancelled
test / Linux (true, vim, v7.4.1689) (push) Has been cancelled
test / Linux (true, vim, v7.4.629) (push) Has been cancelled
test / Linux (true, vim, v8.0.0027) (push) Has been cancelled
test / Linux (true, vim, v8.0.0183) (push) Has been cancelled
test / Linux (vim, nightly) (push) Has been cancelled
test / Linux (vim, v8.0.0184) (push) Has been cancelled
test / Linux (vim, v8.0.1453) (push) Has been cancelled
test / Linux (vim, v8.1.2269) (push) Has been cancelled
test / Linux (vim, v8.2.2434) (push) Has been cancelled
test / Linux (vim, v8.2.3995) (push) Has been cancelled
test / Windows (nvim, nightly) (push) Has been cancelled
test / Windows (nvim, v0.3.8) (push) Has been cancelled
test / Windows (nvim, v0.4.2) (push) Has been cancelled
test / Windows (nvim, v0.4.3) (push) Has been cancelled
test / Windows (nvim, v0.4.4) (push) Has been cancelled
test / Windows (nvim, v0.5.0) (push) Has been cancelled
test / Windows (nvim, v0.5.1) (push) Has been cancelled
test / Windows (nvim, v0.6.0) (push) Has been cancelled
test / Windows (nvim, v0.6.1) (push) Has been cancelled
test / Windows (nvim, v0.7.0) (push) Has been cancelled
test / Windows (nvim, v0.7.2) (push) Has been cancelled
test / Windows (nvim, v0.8.0) (push) Has been cancelled
test / Windows (nvim, v0.8.1) (push) Has been cancelled
test / Windows (nvim, v0.8.2) (push) Has been cancelled
test / Windows (nvim, v0.8.3) (push) Has been cancelled
test / Windows (nvim, v0.9.0) (push) Has been cancelled
test / Windows (nvim, v0.9.1) (push) Has been cancelled
test / Windows (vim, nightly) (push) Has been cancelled
test / Windows (vim, v7.4.1185) (push) Has been cancelled
test / Windows (vim, v7.4.1689) (push) Has been cancelled
test / Windows (vim, v8.0.0027) (push) Has been cancelled
test / Windows (vim, v8.0.1453) (push) Has been cancelled
test / Windows (vim, v8.1.2269) (push) Has been cancelled
test / Windows (vim, v8.2.2434) (push) Has been cancelled
test / Windows (vim, v8.2.3995) (push) Has been cancelled
docker / docker (push) Has been cancelled
mirror / check (coding) (push) Has been cancelled
mirror / check (gitee) (push) Has been cancelled
mirror / check (gitlab) (push) Has been cancelled
188 lines
5.6 KiB
VimL
188 lines
5.6 KiB
VimL
"=============================================================================
|
|
" statusline.vim --- SpaceVim statusline API
|
|
" Copyright (c) 2016-2023 Wang Shidong & Contributors
|
|
" Author: Wang Shidong < wsdjeg@outlook.com >
|
|
" URL: https://spacevim.org
|
|
" License: GPLv3
|
|
"=============================================================================
|
|
|
|
let s:self = {}
|
|
if has('nvim')
|
|
let s:self.__floating = SpaceVim#api#import('neovim#floating')
|
|
else
|
|
let s:self.__floating = SpaceVim#api#import('vim#floating')
|
|
endif
|
|
let s:self.__buffer = SpaceVim#api#import('vim#buffer')
|
|
let s:self.__cmp = SpaceVim#api#import('vim#compatible')
|
|
|
|
function! s:self.check_width(len, sec, winwidth) abort
|
|
return a:len + self.len(a:sec) < a:winwidth
|
|
endfunction
|
|
|
|
let s:self.__winid = -1
|
|
let s:self.__bufnr = -1
|
|
|
|
function! s:self.len(sec) abort
|
|
let str = matchstr(a:sec, '%{.*}')
|
|
if !empty(str)
|
|
let pos = match(str, '}')
|
|
return len(a:sec) - len(str) + len(eval(str[2:pos-1])) + 4
|
|
else
|
|
return len(a:sec) + 4
|
|
endif
|
|
endfunction
|
|
|
|
function! s:self.eval(sec) abort
|
|
return substitute(a:sec, '%{.*}', '', 'g')
|
|
endfunction
|
|
|
|
function! s:self.build(left_sections, right_sections, lsep, rsep, fname, tag, hi_a, hi_b, hi_c, hi_z, winwidth) abort
|
|
let l = '%#' . a:hi_a . '#' . a:left_sections[0]
|
|
let l .= '%#' . a:hi_a . '_' . a:hi_b . '#' . a:lsep
|
|
let flag = 1
|
|
let len = 0
|
|
for sec in filter(a:left_sections[1:], '!empty(v:val)')
|
|
if self.check_width(len, sec, a:winwidth)
|
|
let len += self.len(sec)
|
|
if flag == 1
|
|
let l .= '%#' . a:hi_b . '#' . sec
|
|
let l .= '%#' . a:hi_b . '_' . a:hi_c . '#' . a:lsep
|
|
else
|
|
let l .= '%#' . a:hi_c . '#' . sec
|
|
let l .= '%#' . a:hi_c . '_' . a:hi_b . '#' . a:lsep
|
|
endif
|
|
let flag = flag * -1
|
|
endif
|
|
endfor
|
|
let l = l[:len(a:lsep) * -1 - 1]
|
|
if empty(a:right_sections)
|
|
if flag == 1
|
|
return l . '%#' . a:hi_c . '#'
|
|
else
|
|
return l . '%#' . a:hi_b . '#'
|
|
endif
|
|
endif
|
|
if self.check_width(len, a:fname, a:winwidth)
|
|
let len += self.len(a:fname)
|
|
if flag == 1
|
|
let l .= '%#' . a:hi_c . '_' . a:hi_z . '#' . a:lsep . '%#' . a:hi_z . '#' . a:fname . '%='
|
|
else
|
|
let l .= '%#' . a:hi_b . '_' . a:hi_z . '#' . a:lsep . '%#' . a:hi_z . '#' . a:fname . '%='
|
|
endif
|
|
else
|
|
if flag == 1
|
|
let l .= '%#' . a:hi_c . '_' . a:hi_z . '#' . a:lsep . '%='
|
|
else
|
|
let l .= '%#' . a:hi_b . '_' . a:hi_z . '#' . a:lsep . '%='
|
|
endif
|
|
endif
|
|
if self.check_width(len, a:tag, a:winwidth) && g:spacevim_enable_statusline_tag
|
|
let l .= '%#' . a:hi_z . '#' . a:tag
|
|
endif
|
|
let l .= '%#' . a:hi_b . '_' . a:hi_z . '#' . a:rsep
|
|
let flag = 1
|
|
for sec in filter(a:right_sections, '!empty(v:val)')
|
|
if self.check_width(len, sec, a:winwidth)
|
|
let len += self.len(sec)
|
|
if flag == 1
|
|
let l .= '%#' . a:hi_b . '#' . sec
|
|
let l .= '%#' . a:hi_c . '_' . a:hi_b . '#' . a:rsep
|
|
else
|
|
let l .= '%#' . a:hi_c . '#' . sec
|
|
let l .= '%#' . a:hi_b . '_' . a:hi_c . '#' . a:rsep
|
|
endif
|
|
let flag = flag * -1
|
|
endif
|
|
endfor
|
|
return l[:-4]
|
|
endfunction
|
|
|
|
function! s:self.support_float() abort
|
|
return self.__floating.exists()
|
|
endfunction
|
|
|
|
if has('nvim')
|
|
function! s:self.opened() abort
|
|
return win_id2tabwin(self.__winid)[0] == tabpagenr()
|
|
endfunction
|
|
else
|
|
function! s:self.opened() abort
|
|
"tabpage" will be -1 for a global popup, zero for a popup on
|
|
"the current tabpage and a positive number for a popup on
|
|
"another tabpage.
|
|
if exists('*popup_list')
|
|
return index(popup_list(), self.__winid) != -1
|
|
else
|
|
return index([-1, 0], get(popup_getoptions(self.__winid), 'tabpage', -2)) != -1
|
|
endif
|
|
endfunction
|
|
endif
|
|
|
|
function! s:self.open_float(st) abort
|
|
if !has_key(self, '__bufnr') || !bufexists(self.__bufnr)
|
|
let self.__bufnr = self.__buffer.bufadd('')
|
|
endif
|
|
if has_key(self, '__winid') && self.opened()
|
|
else
|
|
let self.__winid = self.__floating.open_win(self.__bufnr,
|
|
\ v:false,
|
|
\ {
|
|
\ 'relative': 'editor',
|
|
\ 'width' : &columns,
|
|
\ 'height' : 1,
|
|
\ 'highlight' : 'SpaceVim_statusline_a_bold',
|
|
\ 'row': &lines - 2 ,
|
|
\ 'col': 0
|
|
\ })
|
|
endif
|
|
call setbufvar(self.__bufnr, '&relativenumber', 0)
|
|
call setbufvar(self.__bufnr, '&number', 0)
|
|
call setbufvar(self.__bufnr, '&bufhidden', 'wipe')
|
|
call setbufvar(self.__bufnr, '&cursorline', 0)
|
|
call setbufvar(self.__bufnr, '&modifiable', 1)
|
|
if exists('*nvim_buf_set_virtual_text')
|
|
call setwinvar(win_id2win(self.__winid), '&cursorline', 0)
|
|
call nvim_buf_set_virtual_text(
|
|
\ self.__bufnr,
|
|
\ -1,
|
|
\ 0,
|
|
\ a:st,
|
|
\ {})
|
|
else
|
|
let l = ''
|
|
for [str, hg] in a:st
|
|
let l .= str
|
|
endfor
|
|
call self.__buffer.buf_set_lines(self.__bufnr, 0, -1, 0, [l])
|
|
let begin = 1
|
|
let end = 0
|
|
for [str, hg] in a:st
|
|
let end = strlen(str)
|
|
call win_execute(self.__winid, 'call self.__cmp.matchaddpos(hg, [[1, begin, end]])')
|
|
let begin += end
|
|
endfor
|
|
endif
|
|
call setbufvar(self.__bufnr, '&modifiable', 0)
|
|
return self.__winid
|
|
endfunction
|
|
|
|
if s:self.__floating.exists()
|
|
function! s:self.close_float() abort
|
|
if get(self, '__winid', -1) != -1
|
|
call self.__floating.win_close(self.__winid, 1)
|
|
endif
|
|
endfunction
|
|
else
|
|
function! s:self.close_float() abort
|
|
if get(self, '__winid', -1) != -1 && win_id2tabwin(self.__winid)[0] == tabpagenr()
|
|
noautocmd execute win_id2win(self.__winid).'wincmd w'
|
|
noautocmd close
|
|
endif
|
|
endfunction
|
|
endif
|
|
function! SpaceVim#api#vim#statusline#get() abort
|
|
return deepcopy(s:self)
|
|
endfunction
|
|
|
|
" vim:set et sw=2 cc=80 nowrap:
|