From 7e1206469c87f16dab64dca264d12548f3d0da98 Mon Sep 17 00:00:00 2001 From: Bailey Ling Date: Sat, 31 Aug 2013 12:33:58 -0400 Subject: [PATCH] basic support for hiding based on win size per part (#200). --- autoload/airline/parts.vim | 4 ++++ autoload/airline/section.vim | 8 +++++--- autoload/airline/util.vim | 17 +++++++++++++++-- t/parts.vim | 5 +++++ t/section.vim | 6 +++--- t/util.vim | 20 ++++++++++++++++---- 6 files changed, 48 insertions(+), 12 deletions(-) diff --git a/autoload/airline/parts.vim b/autoload/airline/parts.vim index 02c0c654..fc39efa5 100644 --- a/autoload/airline/parts.vim +++ b/autoload/airline/parts.vim @@ -22,6 +22,10 @@ function! airline#parts#define_raw(key, raw) call airline#parts#define(a:key, { 'raw': a:raw }) endfunction +function! airline#parts#define_minwidth(key, width) + call airline#parts#define(a:key, { 'minwidth': a:width }) +endfunction + function! airline#parts#define_empty(keys) for key in a:keys call airline#parts#define_raw(key, '') diff --git a/autoload/airline/section.vim b/autoload/airline/section.vim index 1c7e7897..4ad881ba 100644 --- a/autoload/airline/section.vim +++ b/autoload/airline/section.vim @@ -19,12 +19,14 @@ function! s:get_val(key, append) return a:key endif + let minwidth = get(part, 'minwidth', 0) + if a:append > 0 - let val .= '%{airline#util#append('.func.')}' + let val .= printf('%%{airline#util#append(%s,%s)}', func, minwidth) elseif a:append < 0 - let val .= '%{airline#util#prepend('.func.')}' + let val .= printf('%%{airline#util#prepend(%s,%s)}', func, minwidth) else - let val .= '%{'.func.'}' + let val .= printf('%%{airline#util#wrap(%s,%s)}', func, minwidth) endif return val endfunction diff --git a/autoload/airline/util.vim b/autoload/airline/util.vim index e7b27f8d..1dd918f1 100644 --- a/autoload/airline/util.vim +++ b/autoload/airline/util.vim @@ -1,11 +1,24 @@ " MIT License. Copyright (c) 2013 Bailey Ling. " vim: et ts=2 sts=2 sw=2 -function! airline#util#append(text) +function! airline#util#wrap(text, minwidth) + if a:minwidth > 0 && winwidth(0) < a:minwidth + return '' + endif + return a:text +endfunction + +function! airline#util#append(text, minwidth) + if a:minwidth > 0 && winwidth(0) < a:minwidth + return '' + endif return empty(a:text) ? '' : ' '.g:airline_left_alt_sep.' '.a:text endfunction -function! airline#util#prepend(text) +function! airline#util#prepend(text, minwidth) + if a:minwidth > 0 && winwidth(0) < a:minwidth + return '' + endif return empty(a:text) ? '' : a:text.' '.g:airline_right_alt_sep.' ' endfunction diff --git a/t/parts.vim b/t/parts.vim index 03fee1eb..5891536a 100644 --- a/t/parts.vim +++ b/t/parts.vim @@ -20,5 +20,10 @@ describe 'parts' call airline#parts#define_raw('raw', 'bar') Expect airline#parts#get('raw').raw == 'bar' end + + it 'can define a minwidth' + call airline#parts#define_minwidth('mw', 123) + Expect airline#parts#get('mw').minwidth == 123 + end end diff --git a/t/section.vim b/t/section.vim index 433dc0a2..b3af070a 100644 --- a/t/section.vim +++ b/t/section.vim @@ -16,17 +16,17 @@ describe 'section' it 'should create sections with no separators' let s = airline#section#create(['text', 'raw', 'func']) - Expect s == '%{"text"}raw%{SectionSpec()}' + Expect s == '%{airline#util#wrap("text",0)}raw%{airline#util#wrap(SectionSpec(),0)}' end it 'should create left sections with separators' let s = airline#section#create_left(['text', 'text']) - Expect s == '%{"text"}%{airline#util#append("text")}' + Expect s == '%{airline#util#wrap("text",0)}%{airline#util#append("text",0)}' end it 'should create right sections with separators' let s = airline#section#create_right(['text', 'text']) - Expect s == '%{airline#util#prepend("text")}%{"text"}' + Expect s == '%{airline#util#prepend("text",0)}%{airline#util#wrap("text",0)}' end it 'should prefix with highlight group if provided' diff --git a/t/util.vim b/t/util.vim index 60606c7c..913de9d8 100644 --- a/t/util.vim +++ b/t/util.vim @@ -16,13 +16,13 @@ describe 'util' end it 'has append wrapper function' - Expect airline#util#append('') == '' - Expect airline#util#append('1') == ' > 1' + Expect airline#util#append('', 0) == '' + Expect airline#util#append('1', 0) == ' > 1' end it 'has prepend wrapper function' - Expect airline#util#prepend('') == '' - Expect airline#util#prepend('1') == '1 < ' + Expect airline#util#prepend('', 0) == '' + Expect airline#util#prepend('1', 0) == '1 < ' end it 'has getwinvar function' @@ -38,5 +38,17 @@ describe 'util' call airline#util#exec_funcrefs([function('Util3')], 1, 2, 3, 4) Expect g:count == 4 end + + it 'should ignore minwidth if less than 0' + Expect airline#util#append('foo', -1) == ' > foo' + Expect airline#util#prepend('foo', -1) == 'foo < ' + Expect airline#util#wrap('foo', -1) == 'foo' + end + + it 'should return empty if winwidth() > minwidth' + Expect airline#util#append('foo', 99999) == '' + Expect airline#util#prepend('foo', 99999) == '' + Expect airline#util#wrap('foo', 99999) == '' + end end