From 0a015e53050a21b802cfdda414ee057995dd240d Mon Sep 17 00:00:00 2001 From: Bailey Ling Date: Tue, 6 Aug 2013 21:48:00 -0400 Subject: [PATCH] use autocmds to detect whitespace, shouldn't need max anymore --- autoload/airline/extensions/whitespace.vim | 42 +++++++++++++--------- plugin/airline.vim | 1 - 2 files changed, 25 insertions(+), 18 deletions(-) diff --git a/autoload/airline/extensions/whitespace.vim b/autoload/airline/extensions/whitespace.vim index 0f0f751..ad964e7 100644 --- a/autoload/airline/extensions/whitespace.vim +++ b/autoload/airline/extensions/whitespace.vim @@ -1,36 +1,44 @@ " MIT license. Copyright (c) 2013 Bailey Ling. " vim: ts=2 sts=2 sw=2 fdm=indent +" http://got-ravings.blogspot.com/2008/10/vim-pr0n-statusline-whitespace-flags.html + function! airline#extensions#whitespace#check() - if line('$') > g:airline_whitespace_max_lines - return '' - endif + if !exists('b:airline_whitespace_check') + let b:airline_whitespace_check = '' + let trailing = search(' $', 'nw') != 0 + let mixed = search('^ ', 'nw') != 0 && search('^\t', 'nw') != 0 - let trailing = search(' $', 'nw') != 0 - let mixed = search('^ ', 'nw') != 0 && search('^\t', 'nw') != 0 - - if trailing || mixed - let text = g:airline_whitespace_symbol." " - if g:airline_detect_whitespace == 1 - if trailing - let text .= 'trailing ' - endif - if mixed - let text .= 'mixed-indent ' + if trailing || mixed + let b:airline_whitespace_check = g:airline_whitespace_symbol." " + if g:airline_detect_whitespace == 1 + if trailing + let b:airline_whitespace_check .= 'trailing ' + endif + if mixed + let b:airline_whitespace_check .= 'mixed-indent ' + endif endif endif - return text endif - return '' + return b:airline_whitespace_check endfunction! function! airline#extensions#whitespace#apply() if exists('w:airline_active') && w:airline_active - let w:airline_section_warning = '%{airline#extensions#whitespace#check()}' + if !exists('w:airline_section_warning') + let w:airline_section_warning = ' ' + endif + let w:airline_section_warning .= '%{airline#extensions#whitespace#check()}' endif endfunction function! airline#extensions#whitespace#init(ext) call a:ext.add_statusline_funcref(function('airline#extensions#whitespace#apply')) + + augroup airline_whitespace + autocmd! + autocmd CursorHold,BufWritePost * unlet! b:airline_whitespace_check + augroup END endfunction diff --git a/plugin/airline.vim b/plugin/airline.vim index 6df2204..2d47cc6 100644 --- a/plugin/airline.vim +++ b/plugin/airline.vim @@ -29,7 +29,6 @@ call s:check_defined('g:airline_detect_modified', 1) call s:check_defined('g:airline_detect_paste', 1) call s:check_defined('g:airline_detect_whitespace', 1) call s:check_defined('g:airline_whitespace_symbol', '✹') -call s:check_defined('g:airline_whitespace_max_lines', 3000) call s:check_defined('g:airline_branch_prefix', exists('g:airline_powerline_fonts')?' ':'') call s:check_defined('g:airline_readonly_symbol', exists('g:airline_powerline_fonts')?'':'RO') call s:check_defined('g:airline_linecolumn_prefix', exists('g:airline_powerline_fonts')?' ':':')