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

Split the statusline API

This commit is contained in:
wsdjeg 2017-05-20 20:07:28 +08:00
parent 365e11d29d
commit 8ad3998ab4
4 changed files with 95 additions and 34 deletions

View File

@ -1,7 +1,7 @@
let s:self = {} let s:self = {}
function! s:self.group2dict(name) abort function! s:self.group2dict(name) abort
let id = index(map(range(999), 'synIDattr(v:val, "name")'), a:name) let id = index(map(range(999), "synIDattr(v:val, 'name')"), a:name)
if id == -1 if id == -1
return {} return {}
endif endif
@ -80,6 +80,28 @@ function! s:self.hide_in_normal(name) abort
call self.hi(group) call self.hi(group)
endfunction endfunction
function! s:self.hi_separator(a, b) abort
let hi_a = self.group2dict(a:a)
let hi_b = self.group2dict(a:b)
let hi_a_b = {
\ 'name' : a:a . '_' . a:b,
\ 'guibg' : hi_b.guibg,
\ 'guifg' : hi_a.guibg,
\ 'ctermbg' : hi_b.ctermbg,
\ 'ctermfg' : hi_a.ctermbg,
\ }
let hi_b_a = {
\ 'name' : a:b . '_' . a:a,
\ 'guibg' : hi_a.guibg,
\ 'guifg' : hi_b.guibg,
\ 'ctermbg' : hi_a.ctermbg,
\ 'ctermfg' : hi_b.ctermbg,
\ }
call self.hi(hi_a_b)
call self.hi(hi_b_a)
endfunction
function! SpaceVim#api#vim#highlight#get() abort function! SpaceVim#api#vim#highlight#get() abort
return deepcopy(s:self) return deepcopy(s:self)
endfunction endfunction

View File

@ -0,0 +1,41 @@
let s:self = {}
function! s:self.build(left_sections, right_sections, lsep, rsep, hi_a, hi_b, hi_c, hi_z) abort
let l = '%#' . a:hi_a . '#' . a:left_sections[0]
let l .= '%#' . a:hi_a . '_' . a:hi_b . '#' . a:lsep
let flag = 1
for sec in a:left_sections[1:]
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
endfor
let l = l[:-4]
if flag
let l .= '%#' . a:hi_c . '_' . a:hi_z . '#' . a:lsep . '%='
else
let l .= '%#' . a:hi_b . '_' . a:hi_z . '#' . a:lsep . '%='
endif
let l .= '%#' . a:hi_b . '_' . a:hi_z . '#' . a:rsep
let flag = 1
for sec in a:right_sections
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
endfor
return l[:-4]
endfunction
function! SpaceVim#api#vim#statusline#get() abort
return deepcopy(s:self)
endfunction

View File

@ -12,6 +12,8 @@ let g:_spacevim_statusline_loaded = 1
" APIs " APIs
let s:MESSLETTERS = SpaceVim#api#import('messletters') let s:MESSLETTERS = SpaceVim#api#import('messletters')
let s:TIME = SpaceVim#api#import('time') let s:TIME = SpaceVim#api#import('time')
let s:HI = SpaceVim#api#import('vim#highlight')
let s:STATUSLINE = SpaceVim#api#import('vim#statusline')
" init " init
let s:separators = { let s:separators = {
@ -19,6 +21,7 @@ let s:separators = {
\ 'curve' : ["\ue0b4", "\ue0b6"], \ 'curve' : ["\ue0b4", "\ue0b6"],
\ 'slant' : ["\ue0b8", "\ue0ba"], \ 'slant' : ["\ue0b8", "\ue0ba"],
\ 'brace' : ["\ue0d2", "\ue0d4"], \ 'brace' : ["\ue0d2", "\ue0d4"],
\ 'fire' : ["\ue0c0", "\ue0c2"],
\ 'nil' : ['', ''], \ 'nil' : ['', ''],
\ } \ }
let s:loaded_modes = ['syntax-checking'] let s:loaded_modes = ['syntax-checking']
@ -49,7 +52,7 @@ let s:loaded_sections = ['syntax checking']
function! s:battery_status() abort function! s:battery_status() abort
if executable('acpi') if executable('acpi')
return '⚡' . substitute(split(system('acpi'))[-1], '%', '%%', 'g') return ' ⚡' . substitute(split(system('acpi'))[-1], '%', '%%', 'g') . ' '
else else
return '' return ''
endif endif
@ -57,7 +60,7 @@ endfunction
function! s:time() abort function! s:time() abort
return s:TIME.current_time() return ' ' . s:TIME.current_time() . ' '
endfunction endfunction
if g:spacevim_enable_neomake if g:spacevim_enable_neomake
@ -74,24 +77,24 @@ else
endif endif
function! s:winnr() abort function! s:winnr() abort
return s:MESSLETTERS.circled_num(winnr(), g:spacevim_buffer_index_type) return ' ' . s:MESSLETTERS.circled_num(winnr(), g:spacevim_buffer_index_type) . ' '
endfunction endfunction
function! s:filename() abort function! s:filename() abort
return (&modified ? ' * ' : ' - ') . s:filesize() . fnamemodify(bufname('%'), ':t') return (&modified ? ' * ' : ' - ') . s:filesize() . fnamemodify(bufname('%'), ':t') . ' '
endfunction endfunction
function! s:git_branch() abort function! s:git_branch() abort
if exists('g:loaded_fugitive') if exists('g:loaded_fugitive')
let l:head = fugitive#head() let l:head = fugitive#head()
return empty(l:head) ? '' : ' '.l:head . ' ' return empty(l:head) ? '' : '  '.l:head . ' '
endif endif
return '' return ''
endfunction endfunction
function! s:modes() abort function! s:modes() abort
let m = '❖ ' let m = ' ❖ '
for mode in s:loaded_modes for mode in s:loaded_modes
let m .= s:modes[mode].icon . ' ' let m .= s:modes[mode].icon . ' '
endfor endfor
@ -130,32 +133,25 @@ function! SpaceVim#layers#core#statusline#get(...) abort
endfunction endfunction
function! s:active() abort function! s:active() abort
let l = '%#SpaceVim_statusline_a# ' . s:winnr() . ' %#SpaceVim_statusline_a_b#' . s:lsep let lsec = [s:winnr(), s:filename(), ' ' . &filetype . ' ']
\ . '%#SpaceVim_statusline_b# ' . s:filename() . ' %#SpaceVim_statusline_b_c#' . s:lsep let rsec = []
\ . '%#SpaceVim_statusline_c# ' . &filetype . ' %#SpaceVim_statusline_c_b#' . s:lsep
if index(s:loaded_sections, 'syntax checking') != -1 && s:syntax_checking() != '' if index(s:loaded_sections, 'syntax checking') != -1 && s:syntax_checking() != ''
let l .= '%#SpaceVim_statusline_b# ' call add(lsec, s:syntax_checking())
\ . s:syntax_checking()
\ . ' %#SpaceVim_statusline_b_c#' . s:lsep
let l .= '%#SpaceVim_statusline_c# ' . s:modes() . ' %#SpaceVim_statusline_c_b#' . s:lsep
\ . '%#SpaceVim_statusline_b# ' . s:git_branch() . ' %#SpaceVim_statusline_z_b#' . s:lsep
\ . '%#SpaceVim_statusline_z#%='
else
let l .= '%#SpaceVim_statusline_b# ' . s:modes() . ' %#SpaceVim_statusline_b_c#' . s:lsep
\ . '%#SpaceVim_statusline_c# ' . s:git_branch() . ' %#SpaceVim_statusline_c_z#' . s:lsep
\ . '%#SpaceVim_statusline_z#%='
endif endif
call add(lsec, s:modes())
call add(lsec, s:git_branch())
if index(s:loaded_sections, 'battery status') != -1 if index(s:loaded_sections, 'battery status') != -1
let l .= '%#SpaceVim_statusline_z_b#' . s:rsep . '%#SpaceVim_statusline_b# ' . s:battery_status() . ' %#SpaceVim_statusline_c_b#' call add(rsec, s:battery_status())
else
let l .= '%#SpaceVim_statusline_c_z#'
endif endif
let l .= s:rsep . '%#SpaceVim_statusline_c#%{" " . &ff . "|" . (&fenc!=""?&fenc:&enc) . " "}' call add(rsec, '%{" " . &ff . "|" . (&fenc!=""?&fenc:&enc) . " "}')
\ . '%#SpaceVim_statusline_b_c#' . s:rsep . '%#SpaceVim_statusline_b# %P ' call add(rsec, ' %P ')
if index(s:loaded_sections, 'time') != -1 if index(s:loaded_sections, 'time') != -1
let l .= '%#SpaceVim_statusline_c_b#' . s:rsep . '%#SpaceVim_statusline_c# ' . s:time() . ' ' call add(rsec, s:time())
endif endif
return l
return s:STATUSLINE.build(lsec, rsec, s:lsep, s:rsep,
\ 'SpaceVim_statusline_a', 'SpaceVim_statusline_b', 'SpaceVim_statusline_c', 'SpaceVim_statusline_z')
endfunction endfunction
function! s:inactive() abort function! s:inactive() abort
@ -188,18 +184,15 @@ endfunction
function! SpaceVim#layers#core#statusline#def_colors() abort function! SpaceVim#layers#core#statusline#def_colors() abort
hi! SpaceVim_statusline_a ctermbg=003 ctermfg=Black guibg=#a89984 guifg=#282828 hi! SpaceVim_statusline_a ctermbg=003 ctermfg=Black guibg=#a89984 guifg=#282828
hi! SpaceVim_statusline_a_b ctermbg=003 ctermfg=Black guibg=#504945 guifg=#a89984
hi! SpaceVim_statusline_b ctermbg=003 ctermfg=Black guibg=#504945 guifg=#a89984 hi! SpaceVim_statusline_b ctermbg=003 ctermfg=Black guibg=#504945 guifg=#a89984
hi! SpaceVim_statusline_b_c ctermbg=003 ctermfg=Black guibg=#3c3836 guifg=#504945
hi! SpaceVim_statusline_c ctermbg=003 ctermfg=Black guibg=#3c3836 guifg=#a89984 hi! SpaceVim_statusline_c ctermbg=003 ctermfg=Black guibg=#3c3836 guifg=#a89984
hi! SpaceVim_statusline_c_b ctermbg=003 ctermfg=Black guibg=#504945 guifg=#3c3836
hi! SpaceVim_statusline_c_z ctermbg=003 ctermfg=Black guibg=#665c54 guifg=#3c3836
hi! SpaceVim_statusline_z_c ctermbg=003 ctermfg=Black guibg=#3c3836 guifg=#665c54
hi! SpaceVim_statusline_z_b ctermbg=003 ctermfg=Black guibg=#665c54 guifg=#504945
hi! SpaceVim_statusline_b_z ctermbg=003 ctermfg=Black guibg=#504945 guifg=#665c54
hi! SpaceVim_statusline_z ctermbg=003 ctermfg=Black guibg=#665c54 guifg=#665c54 hi! SpaceVim_statusline_z ctermbg=003 ctermfg=Black guibg=#665c54 guifg=#665c54
hi! SpaceVim_statusline_error ctermbg=003 ctermfg=Black guibg=#504945 guifg=#fb4934 gui=bold hi! SpaceVim_statusline_error ctermbg=003 ctermfg=Black guibg=#504945 guifg=#fb4934 gui=bold
hi! SpaceVim_statusline_warn ctermbg=003 ctermfg=Black guibg=#504945 guifg=#fabd2f gui=bold hi! SpaceVim_statusline_warn ctermbg=003 ctermfg=Black guibg=#504945 guifg=#fabd2f gui=bold
call s:HI.hi_separator('SpaceVim_statusline_a', 'SpaceVim_statusline_b')
call s:HI.hi_separator('SpaceVim_statusline_b', 'SpaceVim_statusline_c')
call s:HI.hi_separator('SpaceVim_statusline_b', 'SpaceVim_statusline_z')
call s:HI.hi_separator('SpaceVim_statusline_c', 'SpaceVim_statusline_z')
endfunction endfunction
function! SpaceVim#layers#core#statusline#toggle_mode(name) abort function! SpaceVim#layers#core#statusline#toggle_mode(name) abort
@ -226,6 +219,10 @@ endfunction
function! SpaceVim#layers#core#statusline#config() abort function! SpaceVim#layers#core#statusline#config() abort
let [s:lsep , s:rsep] = get(s:separators, g:spacevim_statusline_separator, s:separators['arrow']) let [s:lsep , s:rsep] = get(s:separators, g:spacevim_statusline_separator, s:separators['arrow'])
call SpaceVim#mapping#space#def('nnoremap', ['t', 'm', 'm'], 'call SpaceVim#layers#core#statusline#toggle_section("minor mode lighters")',
\ 'toggle the minor mode lighters', 1)
call SpaceVim#mapping#space#def('nnoremap', ['t', 'm', 'M'], 'call SpaceVim#layers#core#statusline#toggle_section("major mode")',
\ 'toggle the major mode', 1)
call SpaceVim#mapping#space#def('nnoremap', ['t', 'm', 'b'], 'call SpaceVim#layers#core#statusline#toggle_section("battery status")', call SpaceVim#mapping#space#def('nnoremap', ['t', 'm', 'b'], 'call SpaceVim#layers#core#statusline#toggle_section("battery status")',
\ 'toggle the battery status', 1) \ 'toggle the battery status', 1)
call SpaceVim#mapping#space#def('nnoremap', ['t', 'm', 't'], 'call SpaceVim#layers#core#statusline#toggle_section("time")', call SpaceVim#mapping#space#def('nnoremap', ['t', 'm', 't'], 'call SpaceVim#layers#core#statusline#toggle_section("time")',

View File

@ -413,6 +413,7 @@ Separator | Screenshot
`curve` | ![separator-curve](https://cloud.githubusercontent.com/assets/13142418/26248272/42bbf6e8-3cd4-11e7-8792-665447040f49.png) `curve` | ![separator-curve](https://cloud.githubusercontent.com/assets/13142418/26248272/42bbf6e8-3cd4-11e7-8792-665447040f49.png)
`slant` | ![separator-slant](https://cloud.githubusercontent.com/assets/13142418/26248515/53a65ea2-3cd5-11e7-8758-d079c5a9c2d6.png) `slant` | ![separator-slant](https://cloud.githubusercontent.com/assets/13142418/26248515/53a65ea2-3cd5-11e7-8758-d079c5a9c2d6.png)
`nil` | ![separator-nil](https://cloud.githubusercontent.com/assets/13142418/26249776/645a5a96-3cda-11e7-9655-0aa1f76714f4.png) `nil` | ![separator-nil](https://cloud.githubusercontent.com/assets/13142418/26249776/645a5a96-3cda-11e7-9655-0aa1f76714f4.png)
`fire` | ![separator-fire](https://cloud.githubusercontent.com/assets/13142418/26274142/434cdd10-3d75-11e7-811b-e44cebfdca58.png)
`alternate` | `alternate` |
arrow-fade | arrow-fade |
bar | bar |