aboutsummaryrefslogtreecommitdiffstats
path: root/buffer.vim
blob: e4472e6fac4390fcebc3a07132c758356d64b5bb (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
" Vim auto-load script
" Author: Peter Odding <peter@peterodding.com>
" Last Change: September 4, 2011
" URL: http://peterodding.com/code/vim/misc/

function! xolox#misc#buffer#is_empty()
  " Check if the current buffer is an empty, unchanged buffer which can be reused.
  return !&modified && expand('%') == '' && line('$') <= 1 && getline(1) == ''
endfunction

function! xolox#misc#buffer#prepare(bufname)
  let bufname = '[' . a:bufname . ']'
  let buffers = tabpagebuflist()
  call map(buffers, 'fnamemodify(bufname(v:val), ":t:r")')
  let idx = index(buffers, bufname)
  if idx >= 0
    execute (idx + 1) . 'wincmd w'
  elseif !(xolox#misc#buffer#is_empty() || expand('%:t') == bufname)
    vsplit
  endif
  silent execute 'edit' fnameescape(bufname)
  lcd " clear working directory
  setlocal buftype=nofile bufhidden=hide noswapfile
  let &l:statusline = bufname
  call xolox#misc#buffer#unlock()
  silent %delete
endfunction

function! xolox#misc#buffer#lock()
  " Lock a special buffer so it can no longer be edited.
  setlocal readonly nomodifiable nomodified
endfunction

function! xolox#misc#buffer#unlock()
  " Unlock a special buffer so that its content can be updated.
  setlocal noreadonly modifiable
endfunction