summaryrefslogtreecommitdiff
path: root/base/vim/plugin/scratch.vim
diff options
context:
space:
mode:
Diffstat (limited to 'base/vim/plugin/scratch.vim')
-rw-r--r--base/vim/plugin/scratch.vim134
1 files changed, 134 insertions, 0 deletions
diff --git a/base/vim/plugin/scratch.vim b/base/vim/plugin/scratch.vim
new file mode 100644
index 0000000..9b83ea4
--- /dev/null
+++ b/base/vim/plugin/scratch.vim
@@ -0,0 +1,134 @@
+" scratch.vim
+" Author: Abhilash Koneri (abhilash_koneri at hotmail dot com)
+" Improved By: Hari Krishna Dara (hari_vim at yahoo dot com)
+" Last Change: 25-Feb-2004 @ 09:48
+" Created: 17-Aug-2002
+" Version: 1.0.0
+" Download From:
+" http://www.vim.org/script.php?script_id=389
+"----------------------------------------------------------------------
+" This is a simple plugin that creates a scratch buffer for your
+" vim session and helps to access it when you need it.
+"
+" If you like the custom mappings provided in the script - hitting
+" <F8> should create a new scratch buffer. You can do your scribes
+" here and if you want to get rid of it, hit <F8> again inside scratch buffer
+" window. If you want to get back to the scratch buffer repeat <F8>. Use
+" <Plug>ShowScratchBuffer and <Plug>InsShowScratchBuffer to customize these
+" mappings.
+"
+" If you want to designate a file into which the scratch buffer contents
+" should automatically be dumped to, when Vim exits, set its path to
+" g:scratchBackupFile global variable. This file can be accessed just in case
+" you happen to have some important information in the scratch buffer and quit
+" Vim (or shutdown the m/c) forgetting to copy it over. The target file is
+" force overwritten using the :write! command so make sure you set a file name
+" that can accidentally be used for other purposes (especially when you use
+" relative paths). I recommend a value of '/tmp/scratch.txt'.
+" CAUTION: This feature works only when Vim generates VimLeavePre autocommad.
+"
+" Custom mappings
+" ---------------
+" The ones defined below are not very ergonomic!
+"----------------------------------------------------------------------
+"Standard Inteface: <F8> to make a new ScratchBuffer, <F8>-again to hide one
+
+if exists('loaded_scratch')
+ finish
+endif
+let loaded_scratch = 1
+
+" Make sure line-continuations won't cause any problem. This will be restored
+" at the end
+let s:save_cpo = &cpo
+set cpo&vim
+
+if (! exists("no_plugin_maps") || ! no_plugin_maps) &&
+ \ (! exists("no_scratch_maps") || ! no_scratch_maps)
+ if !hasmapto('<Plug>ShowScratchBuffer',"n")
+ nmap <unique> <silent> <F8> <Plug>ShowScratchBuffer
+ endif
+ if !hasmapto('<Plug>InsShowScratchBuffer',"i")
+ imap <unique> <silent> <F8> <Plug>InsShowScratchBuffer
+ endif
+endif
+
+" User Overrideable Plugin Interface
+nmap <script> <silent> <Plug>ShowScratchBuffer
+ \ :silent call <SID>ShowScratchBuffer()<cr>
+imap <script> <silent> <Plug>InsShowScratchBuffer
+ \ <c-o>:silent call <SID>ShowScratchBuffer()<cr>
+
+command! -nargs=0 Scratch :call <SID>ShowScratchBuffer()
+
+if !exists('g:scratchBackupFile')
+ let g:scratchBackupFile = '' " So that users can easily find this var.
+endif
+aug ScratchBackup
+ au!
+ au VimLeavePre * :call <SID>BackupScratchBuffer()
+aug END
+
+let s:SCRATCH_BUFFER_NAME="[Scratch]"
+if !exists('s:buffer_number') " Supports reloading.
+ let s:buffer_number = -1
+endif
+
+"----------------------------------------------------------------------
+" Diplays the scratch buffer. Creates one if it is an already
+" present
+"----------------------------------------------------------------------
+function! <SID>ShowScratchBuffer()
+ if(s:buffer_number == -1 || bufexists(s:buffer_number) == 0)
+ " Temporarily modify isfname to avoid treating the name as a pattern.
+ let _isf = &isfname
+ set isfname-=\
+ set isfname-=[
+ if exists('+shellslash')
+ exec "sp \\\\". s:SCRATCH_BUFFER_NAME
+ else
+ exec "sp \\". s:SCRATCH_BUFFER_NAME
+ endif
+ let &isfname = _isf
+ let s:buffer_number = bufnr('%')
+ else
+ let buffer_win=bufwinnr(s:buffer_number)
+ if(buffer_win == -1)
+ exec 'sb '. s:buffer_number
+ else
+ exec buffer_win.'wincmd w'
+ endif
+ endif
+ " Do setup always, just in case.
+ setlocal buftype=nofile
+ setlocal bufhidden=hide
+ setlocal nobuflisted
+ setlocal noswapfile
+ setlocal noro
+ nmap <buffer> <silent> <Plug>ShowScratchBuffer :hide<cr>
+ imap <buffer> <silent> <Plug>InsShowScratchBuffer <c-o>:hide<cr>
+ command! -buffer -nargs=0 Scratch :hide
+endfunction
+
+function! s:BackupScratchBuffer()
+ if s:buffer_number != -1 && exists('g:scratchBackupFile') &&
+ \ g:scratchBackupFile != ''
+ exec 'split #' . s:buffer_number
+ " Avoid writing empty scratch buffers.
+ if line('$') > 1 || getline(1) !~ '^\s*$'
+ let _cpo=&cpo
+ try
+ set cpo-=A
+ exec 'write!' g:scratchBackupFile
+ finally
+ let &cpo=_cpo
+ endtry
+ endif
+ endif
+endfunction
+
+" Restore cpo.
+let &cpo = s:save_cpo
+unlet s:save_cpo
+
+" vim6: sw=2 et