summaryrefslogtreecommitdiffstats
path: root/runtime/plugin
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2006-03-20 21:59:49 +0000
committerBram Moolenaar <Bram@vim.org>2006-03-20 21:59:49 +0000
commitb3656edcb96bd36277db157baec80cb5e7a6f534 (patch)
tree196eed24afb857886081bbdc690e385715c59cb9 /runtime/plugin
parent9b2200acd6bd572eea00ea89eeb3b2c0764c8942 (diff)
updated for version 7.0230v7.0230
Diffstat (limited to 'runtime/plugin')
-rw-r--r--runtime/plugin/vimball.vim256
1 files changed, 256 insertions, 0 deletions
diff --git a/runtime/plugin/vimball.vim b/runtime/plugin/vimball.vim
new file mode 100644
index 0000000000..89d2ee182c
--- /dev/null
+++ b/runtime/plugin/vimball.vim
@@ -0,0 +1,256 @@
+" vimball : construct a file containing both paths and files
+" Author: Charles E. Campbell, Jr.
+" Date: Mar 20, 2006
+" Version: 3
+" GetLatestVimScripts: 1502 1 :AutoInstall: vimball.vim
+" Copyright: (c) 2004-2006 by Charles E. Campbell, Jr.
+" The VIM LICENSE applies to Vimball.vim, and Vimball.txt
+" (see |copyright|) except use "Vimball" instead of "Vim".
+" No warranty, express or implied.
+" *** *** Use At-Your-Own-Risk! *** ***
+
+" ---------------------------------------------------------------------
+" Load Once: {{{1
+if &cp || exists("g:loaded_vimball")
+ finish
+endif
+
+let s:keepcpo = &cpo
+let g:loaded_vimball = "v3"
+set cpo&vim
+
+" ------------------------------------------------------------------------------
+" Public Interface: {{{1
+com! -ra -na=+ -bang MkVimball call s:MkVimball(<line1>,<line2>,<bang>0,<f-args>)
+com! -na=0 UseVimball call s:Vimball(1)
+com! -na=0 VimballList call s:Vimball(0)
+au BufReadPost *.vba echohl WarningMsg | echo "Source this file to extract it! (:so %)" | echohl None
+
+" =====================================================================
+" Functions: {{{1
+
+" ---------------------------------------------------------------------
+" MkVimball: creates a vimball given a list of paths to files {{{2
+" Vimball Format:
+" path
+" filesize
+" [file]
+" path
+" filesize
+" [file]
+fun! s:MkVimball(line1,line2,writelevel,vimballname) range
+" call Dfunc("MkVimball(line1=".a:line1." line2=".a:line2." writelevel=".a:writelevel." vimballname<".a:vimballname.">")
+ let vbname= substitute(a:vimballname,'\.[^.]*$','','e').'.vba'
+ if !a:writelevel && filereadable(vbname)
+ echohl Error | echoerr "(MkVimball) file<".vbname."> exists; use ! to insist" | echohl None
+" call Dret("MkVimball : file<".vbname."> already exists; use ! to insist")
+ return
+ endif
+
+ " user option bypass
+ let eikeep= &ei
+ set ei=all
+
+ let home = substitute(&rtp,',.*$','','')
+ let curdir = getcwd()
+ exe "cd ".home
+
+ " record current tab, initialize while loop index
+ let curtabnr = tabpagenr()
+ let linenr = a:line1
+" call Decho("curtabnr=".curtabnr)
+
+ while linenr <= a:line2
+ let svfile = getline(linenr)
+" call Decho("svfile<".svfile.">")
+
+ if !filereadable(svfile)
+ echohl Error | echo "unable to read file<".svfile.">" | echohl None
+ let &ei= eikeep
+ exe "cd ".curdir
+" call Dret("MkVimball")
+ return
+ endif
+
+ " create/switch to mkvimball tab
+ if !exists("vbtabnr")
+ tabnew
+ silent! file Vimball
+ let vbtabnr= tabpagenr()
+ else
+ exe "tabn ".vbtabnr
+ endif
+
+ let lastline= line("$") + 1
+ if lastline == 2 && getline("$") == ""
+ call setline(1,'" Vimball Archiver by Charles E. Campbell, Jr., Ph.D.')
+ call setline(2,'UseVimball')
+ call setline(3,'finish')
+ let lastline= 4
+ endif
+ call setline(lastline ,svfile)
+ call setline(lastline+1,0)
+ exe "$r ".svfile
+ call setline(lastline+1,line("$") - lastline - 1)
+" call Decho("lastline=".lastline." line$=".line("$"))
+
+ " restore to normal tab
+ exe "tabn ".curtabnr
+ let linenr= linenr + 1
+ endwhile
+
+ " write the vimball
+ exe "tabn ".vbtabnr
+ exe "cd ".curdir
+ if a:really
+ if a:writelevel
+ exe "w! ".vbname
+ else
+ exe "w ".vbname
+ endif
+ endif
+" call Decho("Vimball<".vbname."> created")
+ echo "Vimball<".vbname."> created"
+
+ " remove the evidence
+ setlocal nomod bh=wipe
+ exe "tabn ".curtabnr
+ exe "tabc ".vbtabnr
+
+ " restore options
+ let &ei= eikeep
+
+" call Dret("MkVimball")
+endfun
+
+" ---------------------------------------------------------------------
+" Vimball: {{{2
+fun! s:Vimball(really)
+" call Dfunc("Vimball(really=".a:really.")")
+
+ if getline(1) !~ '^" Vimball Archiver by Charles E. Campbell, Jr., Ph.D.$'
+ echoerr "(Vimball) The current file does not appear to be a Vimball!"
+" call Dret("Vimball")
+ return
+ endif
+
+ " initialize
+ let regakeep = @a
+ let eikeep = &ei
+ let vekeep = &ve
+ let makeep = getpos("'a")
+ let curtabnr = tabpagenr()
+ set ei=all ve=all
+
+ " set up vimball tab
+ tabnew
+ silent! file Vimball
+ let vbtabnr= tabpagenr()
+ let didhelp= ""
+
+ " go to vim plugin home
+ let home = substitute(&rtp,',.*$','','')
+ let curdir = getcwd()
+" call Decho("exe cd ".home)
+ exe "cd ".home
+ let linenr = 4
+ let filecnt = 0
+
+ " give title to listing of (extracted) files from Vimball Archive
+ if a:really
+ echohl Title | echomsg "Vimball Archive" | echohl None
+ else
+ echohl Title | echomsg "Vimball Archive Listing" | echohl None
+ endif
+
+ " apportion vimball contents to various files
+" call Decho("exe tabn ".curtabnr)
+ exe "tabn ".curtabnr
+" call Decho("linenr=".linenr." line$=".line("$"))
+ while 1 < linenr && linenr < line("$")
+ let fname = getline(linenr)
+ let fsize = getline(linenr+1)
+ let filecnt = filecnt + 1
+ if a:really
+ echomsg "extracted <".fname.">: ".fsize." lines"
+ else
+ echomsg "would extract <".fname.">: ".fsize." lines"
+ endif
+" call Decho(linenr.": will extract file<".fname.">")
+" call Decho((linenr+1).": fsize=".fsize)
+
+ " make directories if they don't exist yet
+ let fnamebuf= fname
+ while fnamebuf =~ '/'
+ let dirname = substitute(fnamebuf,'/.*$','','e')
+ let fnamebuf = substitute(fnamebuf,'^.\{-}/\(.*\)$','\1','e')
+ if !isdirectory(dirname)
+" call Decho("making <".dirname.">")
+ call mkdir(dirname)
+ endif
+ exe "cd ".dirname
+ endwhile
+ exe "cd ".home
+
+ " grab specified qty of lines and place into "a" buffer
+ exe linenr
+ norm! jjma
+ exe (linenr + fsize + 1)
+ silent norm! "ay'a
+" call Decho("yanked ".fsize." lines into register-a")
+
+" call Decho("didhelp<".didhelp."> fname<".fname.">")
+ if didhelp == "" && fname =~ 'doc/[^/]\+\.txt$'
+ let didhelp= substitute(fname,'^\(.*\<doc\)[/\\][^.]*\.txt$','\1','e')
+" call Decho("didhelp<".didhelp.">")
+ endif
+
+ " copy "a" buffer into tab
+" call Decho('copy "a buffer into tab#'.vbtabnr)
+ exe "tabn ".vbtabnr
+ silent! %d
+ silent norm! "aPGdd1G
+" call Decho("rega<".@a.">")
+
+ " write tab to file
+" call Decho("exe w! ".fname)
+ exe "silent w! ".fname
+
+" call Decho("exe tabn ".curtabnr)
+ exe "tabn ".curtabnr
+" let oldlinenr = linenr " Decho
+ let linenr = linenr + fsize + 2
+" call Decho("update linenr= [linenr=".oldlinenr."] + [fsize=".fsize."] + 2 = ".linenr)
+ endwhile
+
+ " set up help
+" call Decho("about to set up help: didhelp<".didhelp.">")
+ if didhelp != ""
+" call Decho("exe helptags ".home."/".didhelp)
+ exe "helptags ".home."/".didhelp
+ echomsg "did helptags"
+ endif
+
+ " make sure a "Press ENTER..." prompt appears to keep the messages showing!
+ while filecnt < &ch
+ echomsg " "
+ let filecnt= filecnt + 1
+ endwhile
+
+ " restore events, delete tab and buffer
+ exe "tabn ".vbtabnr
+ setlocal nomod bh=wipe
+ exe "tabn ".curtabnr
+ exe "tabc ".vbtabnr
+ let &ei= eikeep
+ let @a = regakeep
+ if makeep[0] != 0
+ " restore mark a
+" call Decho("restore mark-a: makeep=".string(makeep))
+ call setpos("'a",makeep)
+ ka
+ endif
+ exe "cd ".curdir
+
+" call Dret("Vimball")
+endfun