From d044e87adad34c5c4f218aeac7cd87b03c69344c Mon Sep 17 00:00:00 2001 From: itchyny Date: Sat, 31 Aug 2013 19:26:50 +0900 Subject: [PATCH] new function lightline#concatenate({list}, {num}) (close #18) --- README.md | 7 ++----- autoload/lightline.vim | 11 ++++++++++- doc/lightline.txt | 20 ++++++++++++-------- 3 files changed, 24 insertions(+), 14 deletions(-) diff --git a/README.md b/README.md index 816a7ac..9dfaea6 100644 --- a/README.md +++ b/README.md @@ -674,10 +674,8 @@ endfunction function! CtrlPMark() if expand('%:t') =~ 'ControlP' call lightline#link('iR'[g:lightline.ctrlp_regex]) - return g:lightline.ctrlp_prev . ' ' . g:lightline.subseparator.left . ' ' . - \ g:lightline.ctrlp_item . ' ' . g:lightline.subseparator.left . ' ' . - \ g:lightline.ctrlp_next . ' ' . g:lightline.subseparator.left . ' ' . - \ g:lightline.ctrlp_marked + return lightline#concatenate([g:lightline.ctrlp_prev, g:lightline.ctrlp_item + \ , g:lightline.ctrlp_next], 0) else return '' endif @@ -693,7 +691,6 @@ function! CtrlPStatusFunc_1(focus, byfname, regex, prev, item, next, marked) let g:lightline.ctrlp_prev = a:prev let g:lightline.ctrlp_item = a:item let g:lightline.ctrlp_next = a:next - let g:lightline.ctrlp_marked = a:marked return lightline#statusline(0) endfunction diff --git a/autoload/lightline.vim b/autoload/lightline.vim index 2b2ad6d..475f7d2 100644 --- a/autoload/lightline.vim +++ b/autoload/lightline.vim @@ -3,7 +3,7 @@ " Version: 0.0 " Author: itchyny " License: MIT License -" Last Change: 2013/08/30 01:07:12. +" Last Change: 2013/08/31 19:14:21. " ============================================================================= let s:save_cpo = &cpo @@ -136,6 +136,15 @@ function! s:subseparator(x, y, s) \'(has_key(f,v:val)?"!!strlen(exists(\"*".f[v:val]."\")?".f[v:val]."():\"\")":get(v,v:val,has_key(c,v:val)?"1":"0"))'),')+(')."))?('".a:s."'):''}" endfunction +function! lightline#concatenate(x, s) + let [_, k, s] = ['', 0, ' ' . [s:lightline.subseparator.left, s:lightline.subseparator.right][!!a:s] . ' '] + for i in range(len(a:x)) + let [_, k] = [_ . a:x[i], k || len(a:x[i])] + if k && i + 1 < len(a:x) && len(a:x[i + 1]) | let _ .= s | endif + endfor + return _ +endfunction + function! lightline#statusline(inactive) let [_, c, f, l, r] = [ '%{lightline#link()}', s:lightline.component, s:lightline.component_function, s:lightline.llen, s:lightline.rlen ] let mode = a:inactive ? 'inactive' : 'active' diff --git a/doc/lightline.txt b/doc/lightline.txt index f988af7..07963c7 100644 --- a/doc/lightline.txt +++ b/doc/lightline.txt @@ -4,7 +4,7 @@ Version: 0.0 Author: itchyny (https://github.com/itchyny) License: MIT License Repository: https://github.com/itchyny/lightline.vim -Last Change: 2013/08/30 02:19:57. +Last Change: 2013/08/31 19:26:18. CONTENTS *lightline-contents* @@ -251,16 +251,23 @@ Exposed functions for lightline.vim. lightline#update_once() *lightline#update_once()* Updates the statuslines only once. - lightline#link(...) *lightline#link()* + lightline#link([mode]) *lightline#link()* Creates links of the highlight groups for the active window. This function accepts an optional argument. It should be one of the return value of |mode()|. - lightline#highlight(inactive) *lightline#highlight()* + lightline#highlight({inactive}) *lightline#highlight()* Returns |statusline| strings. If the argument is 0, it returns the statusline for active window, and the statusline for inactive window otherwise. + lightline#concatenate({list}, {num}) *lightline#concatenate()* + A string concatenation function. Concatenating all the strings + in {list} using the sub-separator of lightline. If {num} is 0, + then the left sub-separator is used. Otherwise, the right + sub-separator is used. + + ============================================================================== EXAMPLES *lightline-examples* @@ -483,10 +490,8 @@ For users who uses lots of plugins: function! CtrlPMark() if expand('%:t') =~ 'ControlP' call lightline#link('iR'[g:lightline.ctrlp_regex]) - return g:lightline.ctrlp_prev . ' ' . g:lightline.subseparator.left . ' ' . - \ g:lightline.ctrlp_item . ' ' . g:lightline.subseparator.left . ' ' . - \ g:lightline.ctrlp_next . ' ' . g:lightline.subseparator.left . ' ' . - \ g:lightline.ctrlp_marked + return lightline#concatenate([g:lightline.ctrlp_prev, g:lightline.ctrlp_item + \ , g:lightline.ctrlp_next], 0) else return '' endif @@ -502,7 +507,6 @@ For users who uses lots of plugins: let g:lightline.ctrlp_prev = a:prev let g:lightline.ctrlp_item = a:item let g:lightline.ctrlp_next = a:next - let g:lightline.ctrlp_marked = a:marked return lightline#statusline(0) endfunction