Skip to content

Commit 3759c5c

Browse files
committed
Merge pull request bling#17 from bentomas/master
Add two options, g:bufferline_sort_function and g:bufferline_hide_active_buffer
2 parents 1788138 + e9c71e5 commit 3759c5c

File tree

3 files changed

+58
-18
lines changed

3 files changed

+58
-18
lines changed

autoload/bufferline.vim

+45-18
Original file line numberDiff line numberDiff line change
@@ -6,16 +6,16 @@ let s:window_start = 0
66

77
function! s:generate_names()
88
let names = []
9-
let i = 1
9+
let buffer_num = 1
1010
let last_buffer = bufnr('$')
1111
let current_buffer = bufnr('%')
12-
while i <= last_buffer
13-
if bufexists(i) && buflisted(i)
12+
while buffer_num <= last_buffer
13+
if bufexists(buffer_num) && buflisted(buffer_num)
1414
let modified = ' '
15-
if getbufvar(i, '&mod')
15+
if getbufvar(buffer_num, '&mod')
1616
let modified = g:bufferline_modified
1717
endif
18-
let fname = fnamemodify(bufname(i), g:bufferline_fname_mod)
18+
let fname = fnamemodify(bufname(buffer_num), g:bufferline_fname_mod)
1919
let fname = substitute(fname, "%", "%%", "g")
2020

2121
let skip = 0
@@ -27,23 +27,50 @@ function! s:generate_names()
2727
endfor
2828

2929
if !skip
30-
let name = ''
31-
if g:bufferline_show_bufnr != 0 && g:bufferline_status_info.count >= g:bufferline_show_bufnr
32-
let name = i . ':'
33-
endif
34-
let name .= fname . modified
30+
call add(names, [buffer_num, fname])
31+
endif
32+
endif
33+
let buffer_num += 1
34+
endwhile
3535

36-
if current_buffer == i
37-
let name = g:bufferline_active_buffer_left . name . g:bufferline_active_buffer_right
38-
let g:bufferline_status_info.current = name
36+
if g:bufferline_sort_function != ''
37+
call sort(names, g:bufferline_sort_function)
38+
endif
39+
40+
let nameindex = 0
41+
let labelnum = 1
42+
while nameindex < len(names)
43+
let buffer_num = names[nameindex][0]
44+
let fname = names[nameindex][1]
45+
46+
let name = ''
47+
if g:bufferline_show_bufnr != 0 && g:bufferline_status_info.count >= g:bufferline_show_bufnr
48+
let name = labelnum . ':'
49+
endif
50+
let name .= fname . modified
51+
52+
if current_buffer == buffer_num
53+
let name = g:bufferline_active_buffer_left . name . g:bufferline_active_buffer_right
54+
let g:bufferline_status_info.current = name
55+
else
56+
let name = g:bufferline_separator . name . g:bufferline_separator
57+
endif
58+
59+
let names[nameindex][1] = name
60+
61+
if current_buffer == buffer_num && g:bufferline_hide_active_buffer == 1
62+
if nameindex == 0
63+
let names = names[nameindex+1:]
64+
elseif nameindex == len(names)-1
65+
let names = names[:nameindex-1]
3966
else
40-
let name = g:bufferline_separator . name . g:bufferline_separator
67+
let names = names[:nameindex-1] + names[nameindex+1:]
4168
endif
42-
43-
call add(names, [i, name])
69+
let nameindex -= 1
4470
endif
45-
endif
46-
let i += 1
71+
72+
let nameindex += 1
73+
let labelnum += 1
4774
endwhile
4875

4976
if len(names) > 1

doc/bufferline.txt

+11
Original file line numberDiff line numberDiff line change
@@ -80,11 +80,22 @@ values):
8080
let g:bufferline_solo_highlight = 0
8181
<
8282

83+
* denotes whether to show an entry for the active buffer.
84+
>
85+
let g:bufferline_hide_active_buffer = 1
86+
<
87+
8388
* denotes any exclude patterns.
8489
>
8590
let g:bufferline_excludes = [] "see source for defaults
8691
<
8792

93+
* allows you to pass your own sorting function to customize the order of the
94+
buffers
95+
>
96+
let g:bufferline_sort_function = 0
97+
<
98+
8899
==============================================================================
89100
STATUSLINE INTEGRATION *bufferline-statusline*
90101

plugin/bufferline.vim

+2
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,8 @@ call s:check_defined('g:bufferline_rotate', 0)
2222
call s:check_defined('g:bufferline_fixed_index', 1)
2323
call s:check_defined('g:bufferline_solo_highlight', 0)
2424
call s:check_defined('g:bufferline_excludes', ['\[vimfiler\]'])
25+
call s:check_defined('g:bufferline_sort_function', 0)
26+
call s:check_defined('g:bufferline_hide_active_buffer', 0)
2527

2628
function! bufferline#generate_string()
2729
return "bufferline#generate_string() is obsolete! Please consult README."

0 commit comments

Comments
 (0)