Merge pull request #1206 from chrisbra/width

Cache hunk values, shorten for small windows
This commit is contained in:
Christian Brabandt 2016-07-24 10:08:40 +02:00 committed by GitHub
commit 657cf773ad
3 changed files with 13 additions and 5 deletions

View File

@ -166,7 +166,8 @@ function! airline#extensions#branch#head()
if empty(b:airline_head) || !found_fugitive_head && !s:check_in_path() if empty(b:airline_head) || !found_fugitive_head && !s:check_in_path()
let b:airline_head = '' let b:airline_head = ''
endif endif
let b:airline_head = airline#util#shorten(b:airline_head, 120, 9) let minwidth = empty(get(b:, 'airline_hunks', '')) ? 14 : 7
let b:airline_head = airline#util#shorten(b:airline_head, 120, minwidth)
return b:airline_head return b:airline_head
endfunction endfunction

View File

@ -65,19 +65,27 @@ function! airline#extensions#hunks#get_hunks()
if !get(w:, 'airline_active', 0) if !get(w:, 'airline_active', 0)
return '' return ''
endif endif
" Cache vavlues, so that it isn't called too often
if exists("b:airline_hunks") &&
\ get(b:, 'airline_changenr', 0) == changenr() &&
\ winwidth(0) == get(s:, 'airline_winwidth', 0)
return b:airline_hunks
endif
let hunks = s:get_hunks() let hunks = s:get_hunks()
let string = '' let string = ''
if !empty(hunks) if !empty(hunks)
for i in [0, 1, 2] for i in [0, 1, 2]
if s:non_zero_only == 0 || hunks[i] > 0 if (s:non_zero_only == 0 && winwidth(0) > 100) || hunks[i] > 0
let string .= printf('%s%s ', s:hunk_symbols[i], hunks[i]) let string .= printf('%s%s ', s:hunk_symbols[i], hunks[i])
endif endif
endfor endfor
endif endif
let b:airline_hunks = string
let b:airline_changenr = changenr()
let s:airline_winwidth = winwidth(0)
return string return string
endfunction endfunction
function! airline#extensions#hunks#init(ext) function! airline#extensions#hunks#init(ext)
call airline#parts#define_function('hunks', 'airline#extensions#hunks#get_hunks') call airline#parts#define_function('hunks', 'airline#extensions#hunks#get_hunks')
endfunction endfunction

View File

@ -82,10 +82,9 @@ function! airline#parts#readonly()
endfunction endfunction
function! airline#parts#filetype() function! airline#parts#filetype()
return &filetype return winwidth(0) < 100 && strlen(&filetype) > 3 ? matchstr(&filetype, '...'). '…' : &filetype
endfunction endfunction
function! airline#parts#ffenc() function! airline#parts#ffenc()
return printf('%s%s%s', &fenc, &l:bomb ? '[BOM]' : '', strlen(&ff) > 0 ? '['.&ff.']' : '') return printf('%s%s%s', &fenc, &l:bomb ? '[BOM]' : '', strlen(&ff) > 0 ? '['.&ff.']' : '')
endfunction endfunction