allow to show the statusline on top

This is an experimental feature that allows to display the statusline in
the tabline. It might still be a bit rough, but seems to work so far.

Remaining problem:
- Mode changes are not immediately detected, only after moving the
  cursor

fixes #1388
closes #1867
This commit is contained in:
Christian Brabandt
2019-02-03 17:30:55 +01:00
parent 58bbc512f9
commit fd5bde1a3a
15 changed files with 94 additions and 33 deletions
+16 -7
View File
@@ -1,17 +1,26 @@
" MIT License. Copyright (c) 2013-2018 Bailey Ling et al.
" vim: et ts=2 sts=2 sw=2
" TODO: Try to cache winwidth(0) function
" e.g. store winwidth per window and access that, only update it, if the size
" actually changed.
scriptencoding utf-8
call airline#init#bootstrap()
let s:spc = g:airline_symbols.space
let s:nomodeline = (v:version > 703 || (v:version == 703 && has("patch438"))) ? '<nomodeline>' : ''
" TODO: Try to cache winwidth(0) function
" e.g. store winwidth per window and access that, only update it, if the size
" actually changed.
function! airline#util#winwidth(...)
let nr = get(a:000, 0, 0)
if get(g:, 'airline_statusline_ontop', 0)
return &columns
else
return winwidth(nr)
endif
endfunction
function! airline#util#shorten(text, winwidth, minwidth, ...)
if winwidth(0) < a:winwidth && len(split(a:text, '\zs')) > a:minwidth
if airline#util#winwidth() < a:winwidth && len(split(a:text, '\zs')) > a:minwidth
if get(a:000, 0, 0)
" shorten from tail
return '…'.matchstr(a:text, '.\{'.a:minwidth.'}$')
@@ -25,14 +34,14 @@ function! airline#util#shorten(text, winwidth, minwidth, ...)
endfunction
function! airline#util#wrap(text, minwidth)
if a:minwidth > 0 && winwidth(0) < a:minwidth
if a:minwidth > 0 && airline#util#winwidth() < a:minwidth
return ''
endif
return a:text
endfunction
function! airline#util#append(text, minwidth)
if a:minwidth > 0 && winwidth(0) < a:minwidth
if a:minwidth > 0 && airline#util#winwidth() < a:minwidth
return ''
endif
let prefix = s:spc == "\ua0" ? s:spc : s:spc.s:spc
@@ -46,7 +55,7 @@ function! airline#util#warning(msg)
endfunction
function! airline#util#prepend(text, minwidth)
if a:minwidth > 0 && winwidth(0) < a:minwidth
if a:minwidth > 0 && airline#util#winwidth() < a:minwidth
return ''
endif
return empty(a:text) ? '' : a:text.s:spc.g:airline_right_alt_sep.s:spc