aboutsummaryrefslogtreecommitdiffstats
path: root/buffer.vim
diff options
context:
space:
mode:
authorPeter Odding <peter@peterodding.com>2011-09-04 14:59:22 +0200
committerPeter Odding <peter@peterodding.com>2011-09-04 14:59:22 +0200
commit2cfd5153a2cd25f5513a9c6aa72196691dd74d19 (patch)
tree9541183942f3c5631838b2e646edcdc1164e4ce1 /buffer.vim
parent571abe35c99566996381b716c6f87756fef34748 (diff)
downloadvim-easytags-2cfd5153a2cd25f5513a9c6aa72196691dd74d19.tar.gz
Functions to manage Vim buffers with generated contents
Diffstat (limited to 'buffer.vim')
-rw-r--r--buffer.vim37
1 files changed, 37 insertions, 0 deletions
diff --git a/buffer.vim b/buffer.vim
new file mode 100644
index 0000000..e4472e6
--- /dev/null
+++ b/buffer.vim
@@ -0,0 +1,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