Initial checkin
This commit is contained in:
@@ -0,0 +1,130 @@
|
||||
" keep track of vimrc setting
|
||||
let s:updatetime = &updatetime
|
||||
|
||||
" keep track of scrollinf window start
|
||||
let s:window_start = 0
|
||||
|
||||
function! s:generate_names()
|
||||
let names = []
|
||||
let i = 1
|
||||
let last_buffer = bufnr('$')
|
||||
let current_buffer = bufnr('%')
|
||||
while i <= last_buffer
|
||||
if bufexists(i) && buflisted(i)
|
||||
let modified = ' '
|
||||
if getbufvar(i, '&mod')
|
||||
let modified = g:bufferline_modified
|
||||
endif
|
||||
let fname = fnamemodify(bufname(i), g:bufferline_fname_mod)
|
||||
if g:bufferline_pathshorten != 0
|
||||
let fname = pathshorten(fname)
|
||||
endif
|
||||
let fname = substitute(fname, "%", "%%", "g")
|
||||
|
||||
let skip = 0
|
||||
for ex in g:bufferline_excludes
|
||||
if match(fname, ex) > -1
|
||||
let skip = 1
|
||||
break
|
||||
endif
|
||||
endfor
|
||||
|
||||
if !skip
|
||||
let name = ''
|
||||
if g:bufferline_show_bufnr != 0 && g:bufferline_status_info.count >= g:bufferline_show_bufnr
|
||||
let name = i . ':'
|
||||
endif
|
||||
let name .= fname . modified
|
||||
|
||||
if current_buffer == i
|
||||
let name = g:bufferline_active_buffer_left . name . g:bufferline_active_buffer_right
|
||||
let g:bufferline_status_info.current = name
|
||||
else
|
||||
let name = g:bufferline_separator . name . g:bufferline_separator
|
||||
endif
|
||||
|
||||
call add(names, [i, name])
|
||||
endif
|
||||
endif
|
||||
let i += 1
|
||||
endwhile
|
||||
|
||||
if len(names) > 1
|
||||
if g:bufferline_rotate == 1
|
||||
call bufferline#algos#fixed_position#modify(names)
|
||||
endif
|
||||
endif
|
||||
|
||||
return names
|
||||
endfunction
|
||||
|
||||
function! bufferline#get_echo_string()
|
||||
" check for special cases like help files
|
||||
let current = bufnr('%')
|
||||
if !bufexists(current) || !buflisted(current)
|
||||
return bufname('%')
|
||||
endif
|
||||
|
||||
let names = s:generate_names()
|
||||
let line = ''
|
||||
for val in names
|
||||
let line .= val[1]
|
||||
endfor
|
||||
|
||||
let index = match(line, '\V'.g:bufferline_status_info.current)
|
||||
let g:bufferline_status_info.count = len(names)
|
||||
let g:bufferline_status_info.before = strpart(line, 0, index)
|
||||
let g:bufferline_status_info.after = strpart(line, index + len(g:bufferline_status_info.current))
|
||||
return line
|
||||
endfunction
|
||||
|
||||
function! s:echo()
|
||||
if &filetype ==# 'unite'
|
||||
return
|
||||
endif
|
||||
|
||||
let line = bufferline#get_echo_string()
|
||||
|
||||
" 12 is magical and is the threshold for when it doesn't wrap text anymore
|
||||
let width = &columns - 12
|
||||
if g:bufferline_rotate == 2
|
||||
let current_buffer_start = stridx(line, g:bufferline_active_buffer_left)
|
||||
let current_buffer_end = stridx(line, g:bufferline_active_buffer_right)
|
||||
if current_buffer_start < s:window_start
|
||||
let s:window_start = current_buffer_start
|
||||
endif
|
||||
if current_buffer_end > (s:window_start + width)
|
||||
let s:window_start = current_buffer_end - width + 1
|
||||
endif
|
||||
let line = strpart(line, s:window_start, width)
|
||||
else
|
||||
let line = strpart(line, 0, width)
|
||||
endif
|
||||
|
||||
echo line
|
||||
|
||||
if &updatetime != s:updatetime
|
||||
let &updatetime = s:updatetime
|
||||
endif
|
||||
endfunction
|
||||
|
||||
function! s:cursorhold_callback()
|
||||
call s:echo()
|
||||
autocmd! bufferline CursorHold
|
||||
endfunction
|
||||
|
||||
function! s:refresh(updatetime)
|
||||
let &updatetime = a:updatetime
|
||||
autocmd bufferline CursorHold * call s:cursorhold_callback()
|
||||
endfunction
|
||||
|
||||
function! bufferline#init_echo()
|
||||
augroup bufferline
|
||||
au!
|
||||
|
||||
" events which output a message which should be immediately overwritten
|
||||
autocmd BufWinEnter,WinEnter,InsertLeave,VimResized * call s:refresh(1)
|
||||
augroup END
|
||||
|
||||
autocmd CursorHold * call s:echo()
|
||||
endfunction
|
||||
Reference in New Issue
Block a user