blob: b5107782663100913c0f0fdf14302e61e8ba6fd6 [file] [log] [blame]
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +00001" vimball.vim : construct a file containing both paths and files
2" Author: Charles E. Campbell, Jr.
Bram Moolenaar15146672011-10-20 22:22:38 +02003" Date: Sep 26, 2011
4" Version: 34
Bram Moolenaareee697b2006-03-21 21:20:39 +00005" GetLatestVimScripts: 1502 1 :AutoInstall: vimball.vim
Bram Moolenaar251e1912011-06-19 05:09:16 +02006" Copyright: (c) 2004-2011 by Charles E. Campbell, Jr.
Bram Moolenaareee697b2006-03-21 21:20:39 +00007" The VIM LICENSE applies to Vimball.vim, and Vimball.txt
8" (see |copyright|) except use "Vimball" instead of "Vim".
9" No warranty, express or implied.
10" *** *** Use At-Your-Own-Risk! *** ***
11
12" ---------------------------------------------------------------------
13" Load Once: {{{1
Bram Moolenaar5c736222010-01-06 20:54:52 +010014if &cp || exists("g:loaded_vimball")
Bram Moolenaareee697b2006-03-21 21:20:39 +000015 finish
16endif
Bram Moolenaar15146672011-10-20 22:22:38 +020017let g:loaded_vimball = "v34"
Bram Moolenaar5c736222010-01-06 20:54:52 +010018if v:version < 702
19 echohl WarningMsg
20 echo "***warning*** this version of vimball needs vim 7.2"
21 echohl Normal
22 finish
23endif
24let s:keepcpo= &cpo
Bram Moolenaareee697b2006-03-21 21:20:39 +000025set cpo&vim
Bram Moolenaarf2330482008-06-24 20:19:36 +000026"DechoTabOn
Bram Moolenaareee697b2006-03-21 21:20:39 +000027
28" =====================================================================
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +000029" Constants: {{{1
30if !exists("s:USAGE")
31 let s:USAGE = 0
32 let s:WARNING = 1
33 let s:ERROR = 2
Bram Moolenaarf2330482008-06-24 20:19:36 +000034
35 " determine if cygwin is in use or not
36 if !exists("g:netrw_cygwin")
37 if has("win32") || has("win95") || has("win64") || has("win16")
38 if &shell =~ '\%(\<bash\>\|\<zsh\>\)\%(\.exe\)\=$'
39 let g:netrw_cygwin= 1
40 else
41 let g:netrw_cygwin= 0
42 endif
43 else
44 let g:netrw_cygwin= 0
45 endif
46 endif
47
48 " set up g:vimball_mkdir if the mkdir() call isn't defined
49 if !exists("*mkdir")
50 if exists("g:netrw_local_mkdir")
51 let g:vimball_mkdir= g:netrw_local_mkdir
52 elseif executable("mkdir")
53 let g:vimball_mkdir= "mkdir"
54 elseif executable("makedir")
55 let g:vimball_mkdir= "makedir"
56 endif
57 if !exists(g:vimball_mkdir)
58 call vimball#ShowMesg(s:WARNING,"(vimball) g:vimball_mkdir undefined")
59 endif
60 endif
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +000061endif
62
63" =====================================================================
Bram Moolenaareee697b2006-03-21 21:20:39 +000064" Functions: {{{1
65
66" ---------------------------------------------------------------------
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +000067" vimball#MkVimball: creates a vimball given a list of paths to files {{{2
Bram Moolenaarf2330482008-06-24 20:19:36 +000068" Input:
69" line1,line2: a range of lines containing paths to files to be included in the vimball
Bram Moolenaar251e1912011-06-19 05:09:16 +020070" writelevel : if true, force a write to filename.vmb, even if it exists
Bram Moolenaarf2330482008-06-24 20:19:36 +000071" (usually accomplished with :MkVimball! ...
Bram Moolenaar251e1912011-06-19 05:09:16 +020072" filename : base name of file to be created (ie. filename.vmb)
73" Output: a filename.vmb using vimball format:
Bram Moolenaareee697b2006-03-21 21:20:39 +000074" path
75" filesize
76" [file]
77" path
78" filesize
79" [file]
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +000080fun! vimball#MkVimball(line1,line2,writelevel,...) range
81" call Dfunc("MkVimball(line1=".a:line1." line2=".a:line2." writelevel=".a:writelevel." vimballname<".a:1.">) a:0=".a:0)
Bram Moolenaarf2330482008-06-24 20:19:36 +000082 if a:1 =~ '\.vim$' || a:1 =~ '\.txt$'
Bram Moolenaar251e1912011-06-19 05:09:16 +020083 let vbname= substitute(a:1,'\.\a\{3}$','.vmb','')
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +000084 else
85 let vbname= a:1
86 endif
Bram Moolenaar251e1912011-06-19 05:09:16 +020087 if vbname !~ '\.vmb$'
88 let vbname= vbname.'.vmb'
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +000089 endif
90" call Decho("vbname<".vbname.">")
Bram Moolenaar5c736222010-01-06 20:54:52 +010091 if !a:writelevel && a:1 =~ '[\/]'
92 call vimball#ShowMesg(s:ERROR,"(MkVimball) vimball name<".a:1."> should not include slashes; use ! to insist")
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +000093" call Dret("MkVimball : vimball name<".a:1."> should not include slashes")
94 return
95 endif
Bram Moolenaareee697b2006-03-21 21:20:39 +000096 if !a:writelevel && filereadable(vbname)
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +000097 call vimball#ShowMesg(s:ERROR,"(MkVimball) file<".vbname."> exists; use ! to insist")
Bram Moolenaareee697b2006-03-21 21:20:39 +000098" call Dret("MkVimball : file<".vbname."> already exists; use ! to insist")
99 return
100 endif
101
102 " user option bypass
Bram Moolenaarf2330482008-06-24 20:19:36 +0000103 call vimball#SaveSettings()
Bram Moolenaareee697b2006-03-21 21:20:39 +0000104
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +0000105 if a:0 >= 2
106 " allow user to specify where to get the files
107 let home= expand(a:2)
108 else
109 " use first existing directory from rtp
Bram Moolenaar5c736222010-01-06 20:54:52 +0100110 let home= vimball#VimballHome()
Bram Moolenaarf193fff2006-04-27 00:02:13 +0000111 endif
Bram Moolenaarf193fff2006-04-27 00:02:13 +0000112
113 " save current directory
Bram Moolenaareee697b2006-03-21 21:20:39 +0000114 let curdir = getcwd()
Bram Moolenaarf193fff2006-04-27 00:02:13 +0000115 call s:ChgDir(home)
Bram Moolenaareee697b2006-03-21 21:20:39 +0000116
117 " record current tab, initialize while loop index
118 let curtabnr = tabpagenr()
119 let linenr = a:line1
120" call Decho("curtabnr=".curtabnr)
121
122 while linenr <= a:line2
123 let svfile = getline(linenr)
124" call Decho("svfile<".svfile.">")
125
126 if !filereadable(svfile)
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +0000127 call vimball#ShowMesg(s:ERROR,"unable to read file<".svfile.">")
Bram Moolenaarf193fff2006-04-27 00:02:13 +0000128 call s:ChgDir(curdir)
Bram Moolenaarf2330482008-06-24 20:19:36 +0000129 call vimball#RestoreSettings()
Bram Moolenaareee697b2006-03-21 21:20:39 +0000130" call Dret("MkVimball")
131 return
132 endif
133
134 " create/switch to mkvimball tab
135 if !exists("vbtabnr")
136 tabnew
Bram Moolenaar251e1912011-06-19 05:09:16 +0200137 sil! file Vimball
Bram Moolenaareee697b2006-03-21 21:20:39 +0000138 let vbtabnr= tabpagenr()
139 else
140 exe "tabn ".vbtabnr
141 endif
142
143 let lastline= line("$") + 1
144 if lastline == 2 && getline("$") == ""
145 call setline(1,'" Vimball Archiver by Charles E. Campbell, Jr., Ph.D.')
146 call setline(2,'UseVimball')
147 call setline(3,'finish')
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +0000148 let lastline= line("$") + 1
Bram Moolenaareee697b2006-03-21 21:20:39 +0000149 endif
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +0000150 call setline(lastline ,substitute(svfile,'$',' [[[1',''))
Bram Moolenaareee697b2006-03-21 21:20:39 +0000151 call setline(lastline+1,0)
Bram Moolenaarf193fff2006-04-27 00:02:13 +0000152
153 " write the file from the tab
Bram Moolenaare37d50a2008-08-06 17:06:04 +0000154" call Decho("exe $r ".fnameescape(svfile))
155 exe "$r ".fnameescape(svfile)
Bram Moolenaarf193fff2006-04-27 00:02:13 +0000156
Bram Moolenaareee697b2006-03-21 21:20:39 +0000157 call setline(lastline+1,line("$") - lastline - 1)
158" call Decho("lastline=".lastline." line$=".line("$"))
159
160 " restore to normal tab
161 exe "tabn ".curtabnr
162 let linenr= linenr + 1
163 endwhile
164
165 " write the vimball
166 exe "tabn ".vbtabnr
Bram Moolenaarf193fff2006-04-27 00:02:13 +0000167 call s:ChgDir(curdir)
Bram Moolenaarf2330482008-06-24 20:19:36 +0000168 setlocal ff=unix
Bram Moolenaar8ab561d2006-03-23 22:44:10 +0000169 if a:writelevel
Bram Moolenaare37d50a2008-08-06 17:06:04 +0000170" call Decho("exe w! ".fnameescape(vbname))
171 exe "w! ".fnameescape(vbname)
Bram Moolenaar8ab561d2006-03-23 22:44:10 +0000172 else
Bram Moolenaare37d50a2008-08-06 17:06:04 +0000173" call Decho("exe w ".fnameescape(vbname))
174 exe "w ".fnameescape(vbname)
Bram Moolenaareee697b2006-03-21 21:20:39 +0000175 endif
176" call Decho("Vimball<".vbname."> created")
177 echo "Vimball<".vbname."> created"
178
179 " remove the evidence
180 setlocal nomod bh=wipe
181 exe "tabn ".curtabnr
182 exe "tabc ".vbtabnr
183
184 " restore options
Bram Moolenaarf2330482008-06-24 20:19:36 +0000185 call vimball#RestoreSettings()
Bram Moolenaareee697b2006-03-21 21:20:39 +0000186
187" call Dret("MkVimball")
188endfun
189
190" ---------------------------------------------------------------------
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +0000191" vimball#Vimball: extract and distribute contents from a vimball {{{2
Bram Moolenaarf2330482008-06-24 20:19:36 +0000192" (invoked the the UseVimball command embedded in
193" vimballs' prologue)
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +0000194fun! vimball#Vimball(really,...)
195" call Dfunc("vimball#Vimball(really=".a:really.") a:0=".a:0)
Bram Moolenaareee697b2006-03-21 21:20:39 +0000196
Bram Moolenaare37d50a2008-08-06 17:06:04 +0000197 if v:version < 701 || (v:version == 701 && !exists('*fnameescape'))
Bram Moolenaar251e1912011-06-19 05:09:16 +0200198 echoerr "your vim is missing the fnameescape() function (pls upgrade to vim 7.2 or later)"
199" call Dret("vimball#Vimball : needs 7.1 with patch 299 or later")
Bram Moolenaarf2330482008-06-24 20:19:36 +0000200 return
201 endif
202
Bram Moolenaar5c736222010-01-06 20:54:52 +0100203 if getline(1) !~ '^" Vimball Archiver'
Bram Moolenaareee697b2006-03-21 21:20:39 +0000204 echoerr "(Vimball) The current file does not appear to be a Vimball!"
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +0000205" call Dret("vimball#Vimball")
Bram Moolenaareee697b2006-03-21 21:20:39 +0000206 return
207 endif
208
Bram Moolenaar25e2c9e2006-04-27 21:40:34 +0000209 " set up standard settings
Bram Moolenaarf2330482008-06-24 20:19:36 +0000210 call vimball#SaveSettings()
211 let curtabnr = tabpagenr()
212 let vimballfile = expand("%:tr")
Bram Moolenaareee697b2006-03-21 21:20:39 +0000213
214 " set up vimball tab
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +0000215" call Decho("setting up vimball tab")
Bram Moolenaareee697b2006-03-21 21:20:39 +0000216 tabnew
Bram Moolenaar251e1912011-06-19 05:09:16 +0200217 sil! file Vimball
Bram Moolenaareee697b2006-03-21 21:20:39 +0000218 let vbtabnr= tabpagenr()
219 let didhelp= ""
220
221 " go to vim plugin home
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +0000222 if a:0 > 0
Bram Moolenaar15146672011-10-20 22:22:38 +0200223 " let user specify the directory where the vimball is to be unpacked.
224 " If, however, the user did not specify a full path, set the home to be below the current directory
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +0000225 let home= expand(a:1)
Bram Moolenaar15146672011-10-20 22:22:38 +0200226 if has("win32") || has("win95") || has("win64") || has("win16")
227 if home !~ '^\a:[/\\]'
228 let home= getcwd().'/'.a:1
229 endif
230 elseif home !~ '^/'
231 let home= getcwd().'/'.a:1
232 endif
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +0000233 else
Bram Moolenaar5c736222010-01-06 20:54:52 +0100234 let home= vimball#VimballHome()
Bram Moolenaarf193fff2006-04-27 00:02:13 +0000235 endif
236" call Decho("home<".home.">")
237
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +0000238 " save current directory and remove older same-named vimball, if any
Bram Moolenaareee697b2006-03-21 21:20:39 +0000239 let curdir = getcwd()
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +0000240" call Decho("home<".home.">")
241" call Decho("curdir<".curdir.">")
242
Bram Moolenaarf193fff2006-04-27 00:02:13 +0000243 call s:ChgDir(home)
Bram Moolenaarf2330482008-06-24 20:19:36 +0000244 let s:ok_unablefind= 1
245 call vimball#RmVimball(vimballfile)
246 unlet s:ok_unablefind
Bram Moolenaarf193fff2006-04-27 00:02:13 +0000247
Bram Moolenaareee697b2006-03-21 21:20:39 +0000248 let linenr = 4
249 let filecnt = 0
250
251 " give title to listing of (extracted) files from Vimball Archive
252 if a:really
Bram Moolenaarf2330482008-06-24 20:19:36 +0000253 echohl Title | echomsg "Vimball Archive" | echohl None
254 else
255 echohl Title | echomsg "Vimball Archive Listing" | echohl None
Bram Moolenaar25e2c9e2006-04-27 21:40:34 +0000256 echohl Statement | echomsg "files would be placed under: ".home | echohl None
Bram Moolenaareee697b2006-03-21 21:20:39 +0000257 endif
258
259 " apportion vimball contents to various files
260" call Decho("exe tabn ".curtabnr)
261 exe "tabn ".curtabnr
262" call Decho("linenr=".linenr." line$=".line("$"))
263 while 1 < linenr && linenr < line("$")
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +0000264 let fname = substitute(getline(linenr),'\t\[\[\[1$','','')
265 let fname = substitute(fname,'\\','/','g')
Bram Moolenaar5c736222010-01-06 20:54:52 +0100266 let fsize = substitute(getline(linenr+1),'^\(\d\+\).\{-}$','\1','')+0
Bram Moolenaar251e1912011-06-19 05:09:16 +0200267 let fenc = substitute(getline(linenr+1),'^\d\+\s*\(\S\{-}\)$','\1','')
Bram Moolenaareee697b2006-03-21 21:20:39 +0000268 let filecnt = filecnt + 1
Bram Moolenaar251e1912011-06-19 05:09:16 +0200269" call Decho("fname<".fname."> fsize=".fsize." filecnt=".filecnt. " fenc=".fenc)
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +0000270
Bram Moolenaareee697b2006-03-21 21:20:39 +0000271 if a:really
272 echomsg "extracted <".fname.">: ".fsize." lines"
273 else
274 echomsg "would extract <".fname.">: ".fsize." lines"
275 endif
Bram Moolenaarf9393ef2006-04-24 19:47:27 +0000276" call Decho("using L#".linenr.": will extract file<".fname.">")
277" call Decho("using L#".(linenr+1).": fsize=".fsize)
Bram Moolenaareee697b2006-03-21 21:20:39 +0000278
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +0000279 " Allow AsNeeded/ directory to take place of plugin/ directory
Bram Moolenaarf2330482008-06-24 20:19:36 +0000280 " when AsNeeded/filename is filereadable or was present in VimballRecord
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +0000281 if fname =~ '\<plugin/'
282 let anfname= substitute(fname,'\<plugin/','AsNeeded/','')
Bram Moolenaarf2330482008-06-24 20:19:36 +0000283 if filereadable(anfname) || (exists("s:VBRstring") && s:VBRstring =~ anfname)
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +0000284" call Decho("using anfname<".anfname."> instead of <".fname.">")
285 let fname= anfname
286 endif
287 endif
288
Bram Moolenaareee697b2006-03-21 21:20:39 +0000289 " make directories if they don't exist yet
Bram Moolenaar25e2c9e2006-04-27 21:40:34 +0000290 if a:really
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +0000291" call Decho("making directories if they don't exist yet (fname<".fname.">)")
292 let fnamebuf= substitute(fname,'\\','/','g')
293 let dirpath = substitute(home,'\\','/','g')
Bram Moolenaar15146672011-10-20 22:22:38 +0200294" call Decho("init: fnamebuf<".fnamebuf.">")
295" call Decho("init: dirpath <".dirpath.">")
Bram Moolenaar25e2c9e2006-04-27 21:40:34 +0000296 while fnamebuf =~ '/'
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +0000297 let dirname = dirpath."/".substitute(fnamebuf,'/.*$','','')
298 let dirpath = dirname
299 let fnamebuf = substitute(fnamebuf,'^.\{-}/\(.*\)$','\1','')
300" call Decho("dirname<".dirname.">")
Bram Moolenaar15146672011-10-20 22:22:38 +0200301" call Decho("dirpath<".dirpath.">")
Bram Moolenaar25e2c9e2006-04-27 21:40:34 +0000302 if !isdirectory(dirname)
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +0000303" call Decho("making <".dirname.">")
Bram Moolenaarf2330482008-06-24 20:19:36 +0000304 if exists("g:vimball_mkdir")
Bram Moolenaar5c736222010-01-06 20:54:52 +0100305 call system(g:vimball_mkdir." ".shellescape(dirname))
Bram Moolenaarf2330482008-06-24 20:19:36 +0000306 else
307 call mkdir(dirname)
308 endif
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +0000309 call s:RecordInVar(home,"rmdir('".dirname."')")
Bram Moolenaar25e2c9e2006-04-27 21:40:34 +0000310 endif
311 endwhile
312 endif
Bram Moolenaarf193fff2006-04-27 00:02:13 +0000313 call s:ChgDir(home)
Bram Moolenaareee697b2006-03-21 21:20:39 +0000314
315 " grab specified qty of lines and place into "a" buffer
Bram Moolenaarf9393ef2006-04-24 19:47:27 +0000316 " (skip over path/filename and qty-lines)
317 let linenr = linenr + 2
318 let lastline = linenr + fsize - 1
319" call Decho("exe ".linenr.",".lastline."yank a")
Bram Moolenaar251e1912011-06-19 05:09:16 +0200320 " no point in handling a zero-length file
321 if lastline >= linenr
322 exe "silent ".linenr.",".lastline."yank a"
Bram Moolenaareee697b2006-03-21 21:20:39 +0000323
Bram Moolenaar251e1912011-06-19 05:09:16 +0200324 " copy "a" buffer into tab
Bram Moolenaareee697b2006-03-21 21:20:39 +0000325" call Decho('copy "a buffer into tab#'.vbtabnr)
Bram Moolenaar251e1912011-06-19 05:09:16 +0200326 exe "tabn ".vbtabnr
327 setlocal ma
328 sil! %d
329 silent put a
330 1
331 sil! d
Bram Moolenaareee697b2006-03-21 21:20:39 +0000332
Bram Moolenaar251e1912011-06-19 05:09:16 +0200333 " write tab to file
334 if a:really
335 let fnamepath= home."/".fname
Bram Moolenaarf2330482008-06-24 20:19:36 +0000336" call Decho("exe w! ".fnameescape(fnamepath))
Bram Moolenaar5c736222010-01-06 20:54:52 +0100337 if fenc != ""
338 exe "silent w! ++enc=".fnameescape(fenc)." ".fnameescape(fnamepath)
339 else
340 exe "silent w! ".fnameescape(fnamepath)
341 endif
342 echo "wrote ".fnameescape(fnamepath)
343 call s:RecordInVar(home,"call delete('".fnamepath."')")
Bram Moolenaar251e1912011-06-19 05:09:16 +0200344 endif
Bram Moolenaareee697b2006-03-21 21:20:39 +0000345
Bram Moolenaar251e1912011-06-19 05:09:16 +0200346 " return to tab with vimball
Bram Moolenaareee697b2006-03-21 21:20:39 +0000347" call Decho("exe tabn ".curtabnr)
Bram Moolenaar251e1912011-06-19 05:09:16 +0200348 exe "tabn ".curtabnr
Bram Moolenaarf9393ef2006-04-24 19:47:27 +0000349
Bram Moolenaar251e1912011-06-19 05:09:16 +0200350 " set up help if its a doc/*.txt file
Bram Moolenaarf9393ef2006-04-24 19:47:27 +0000351" call Decho("didhelp<".didhelp."> fname<".fname.">")
Bram Moolenaar251e1912011-06-19 05:09:16 +0200352 if a:really && didhelp == "" && fname =~ 'doc/[^/]\+\.\(txt\|..x\)$'
353 let didhelp= substitute(fname,'^\(.*\<doc\)[/\\][^.]*\.\(txt\|..x\)$','\1','')
Bram Moolenaarf9393ef2006-04-24 19:47:27 +0000354" call Decho("didhelp<".didhelp.">")
Bram Moolenaar251e1912011-06-19 05:09:16 +0200355 endif
Bram Moolenaarf9393ef2006-04-24 19:47:27 +0000356 endif
357
358 " update for next file
Bram Moolenaarf2330482008-06-24 20:19:36 +0000359" call Decho("update linenr= [linenr=".linenr."] + [fsize=".fsize."] = ".(linenr+fsize))
360 let linenr= linenr + fsize
Bram Moolenaareee697b2006-03-21 21:20:39 +0000361 endwhile
362
363 " set up help
364" call Decho("about to set up help: didhelp<".didhelp.">")
365 if didhelp != ""
Bram Moolenaare37d50a2008-08-06 17:06:04 +0000366 let htpath= home."/".didhelp
Bram Moolenaarf193fff2006-04-27 00:02:13 +0000367" call Decho("exe helptags ".htpath)
Bram Moolenaare37d50a2008-08-06 17:06:04 +0000368 exe "helptags ".fnameescape(htpath)
Bram Moolenaarf193fff2006-04-27 00:02:13 +0000369 echo "did helptags"
Bram Moolenaareee697b2006-03-21 21:20:39 +0000370 endif
371
372 " make sure a "Press ENTER..." prompt appears to keep the messages showing!
Bram Moolenaar8ab561d2006-03-23 22:44:10 +0000373 while filecnt <= &ch
Bram Moolenaareee697b2006-03-21 21:20:39 +0000374 echomsg " "
375 let filecnt= filecnt + 1
376 endwhile
377
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +0000378 " record actions in <.VimballRecord>
379 call s:RecordInFile(home)
380
Bram Moolenaareee697b2006-03-21 21:20:39 +0000381 " restore events, delete tab and buffer
382 exe "tabn ".vbtabnr
383 setlocal nomod bh=wipe
384 exe "tabn ".curtabnr
385 exe "tabc ".vbtabnr
Bram Moolenaarf2330482008-06-24 20:19:36 +0000386 call vimball#RestoreSettings()
Bram Moolenaarf193fff2006-04-27 00:02:13 +0000387 call s:ChgDir(curdir)
Bram Moolenaareee697b2006-03-21 21:20:39 +0000388
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +0000389" call Dret("vimball#Vimball")
390endfun
391
392" ---------------------------------------------------------------------
393" vimball#RmVimball: remove any files, remove any directories made by any {{{2
394" previous vimball extraction based on a file of the current
395" name.
396" Usage: RmVimball (assume current file is a vimball; remove)
397" RmVimball vimballname
398fun! vimball#RmVimball(...)
399" call Dfunc("vimball#RmVimball() a:0=".a:0)
400 if exists("g:vimball_norecord")
401" call Dret("vimball#RmVimball : (g:vimball_norecord)")
402 return
403 endif
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +0000404
405 if a:0 == 0
Bram Moolenaarf2330482008-06-24 20:19:36 +0000406 let curfile= expand("%:tr")
407" call Decho("case a:0=0: curfile<".curfile."> (used expand(%:tr))")
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +0000408 else
409 if a:1 =~ '[\/]'
410 call vimball#ShowMesg(s:USAGE,"RmVimball vimballname [path]")
411" call Dret("vimball#RmVimball : suspect a:1<".a:1.">")
412 return
413 endif
414 let curfile= a:1
Bram Moolenaarf2330482008-06-24 20:19:36 +0000415" call Decho("case a:0=".a:0.": curfile<".curfile.">")
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +0000416 endif
Bram Moolenaar251e1912011-06-19 05:09:16 +0200417 if curfile =~ '\.vmb$'
418 let curfile= substitute(curfile,'\.vmb','','')
419 elseif curfile =~ '\.vba$'
Bram Moolenaarf2330482008-06-24 20:19:36 +0000420 let curfile= substitute(curfile,'\.vba','','')
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +0000421 endif
422 if a:0 >= 2
423 let home= expand(a:2)
424 else
Bram Moolenaar5c736222010-01-06 20:54:52 +0100425 let home= vimball#VimballHome()
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +0000426 endif
427 let curdir = getcwd()
428" call Decho("home <".home.">")
429" call Decho("curfile<".curfile.">")
430" call Decho("curdir <".curdir.">")
431
432 call s:ChgDir(home)
433 if filereadable(".VimballRecord")
434" call Decho(".VimballRecord is readable")
435" call Decho("curfile<".curfile.">")
436 keepalt keepjumps 1split
Bram Moolenaar251e1912011-06-19 05:09:16 +0200437 sil! keepalt keepjumps e .VimballRecord
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +0000438 let keepsrch= @/
Bram Moolenaar5c736222010-01-06 20:54:52 +0100439" call Decho('search for ^\M'.curfile.'.\m: ')
Bram Moolenaar251e1912011-06-19 05:09:16 +0200440" call Decho('search for ^\M'.curfile.'.\m{vba|vmb}: ')
441" call Decho('search for ^\M'.curfile.'\m[-0-9.]*\.{vba|vmb}: ')
Bram Moolenaar5c736222010-01-06 20:54:52 +0100442 if search('^\M'.curfile."\m: ".'cw')
Bram Moolenaarf2330482008-06-24 20:19:36 +0000443 let foundit= 1
Bram Moolenaar251e1912011-06-19 05:09:16 +0200444 elseif search('^\M'.curfile.".\mvmb: ",'cw')
445 let foundit= 2
446 elseif search('^\M'.curfile.'\m[-0-9.]*\.vmb: ','cw')
447 let foundit= 2
Bram Moolenaar5c736222010-01-06 20:54:52 +0100448 elseif search('^\M'.curfile.".\mvba: ",'cw')
Bram Moolenaarf2330482008-06-24 20:19:36 +0000449 let foundit= 1
Bram Moolenaar5c736222010-01-06 20:54:52 +0100450 elseif search('^\M'.curfile.'\m[-0-9.]*\.vba: ','cw')
Bram Moolenaarf2330482008-06-24 20:19:36 +0000451 let foundit= 1
452 else
453 let foundit = 0
454 endif
455 if foundit
Bram Moolenaar251e1912011-06-19 05:09:16 +0200456 if foundit == 1
457 let exestring = substitute(getline("."),'^\M'.curfile.'\m\S\{-}\.vba: ','','')
458 else
459 let exestring = substitute(getline("."),'^\M'.curfile.'\m\S\{-}\.vmb: ','','')
460 endif
Bram Moolenaarf2330482008-06-24 20:19:36 +0000461 let s:VBRstring= substitute(exestring,'call delete(','','g')
462 let s:VBRstring= substitute(s:VBRstring,"[')]",'','g')
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +0000463" call Decho("exe ".exestring)
Bram Moolenaar251e1912011-06-19 05:09:16 +0200464 sil! keepalt keepjumps exe exestring
465 sil! keepalt keepjumps d
Bram Moolenaarf2330482008-06-24 20:19:36 +0000466 let exestring= strlen(substitute(exestring,'call delete(.\{-})|\=',"D","g"))
467" call Decho("exestring<".exestring.">")
468 echomsg "removed ".exestring." files"
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +0000469 else
Bram Moolenaarf2330482008-06-24 20:19:36 +0000470 let s:VBRstring= ''
Bram Moolenaar251e1912011-06-19 05:09:16 +0200471 let curfile = substitute(curfile,'\.vmb','','')
Bram Moolenaarf2330482008-06-24 20:19:36 +0000472" call Decho("unable to find <".curfile."> in .VimballRecord")
473 if !exists("s:ok_unablefind")
474 call vimball#ShowMesg(s:WARNING,"(RmVimball) unable to find <".curfile."> in .VimballRecord")
475 endif
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +0000476 endif
Bram Moolenaar251e1912011-06-19 05:09:16 +0200477 sil! keepalt keepjumps g/^\s*$/d
478 sil! keepalt keepjumps wq!
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +0000479 let @/= keepsrch
480 endif
481 call s:ChgDir(curdir)
482
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +0000483" call Dret("vimball#RmVimball")
Bram Moolenaareee697b2006-03-21 21:20:39 +0000484endfun
485
Bram Moolenaar551dbcc2006-04-25 22:13:59 +0000486" ---------------------------------------------------------------------
487" vimball#Decompress: attempts to automatically decompress vimballs {{{2
Bram Moolenaar5c736222010-01-06 20:54:52 +0100488fun! vimball#Decompress(fname,...)
489" call Dfunc("Decompress(fname<".a:fname.">) a:0=".a:0)
Bram Moolenaar551dbcc2006-04-25 22:13:59 +0000490
491 " decompression:
492 if expand("%") =~ '.*\.gz' && executable("gunzip")
Bram Moolenaarf2330482008-06-24 20:19:36 +0000493 " handle *.gz with gunzip
Bram Moolenaar5c736222010-01-06 20:54:52 +0100494 silent exe "!gunzip ".shellescape(a:fname)
Bram Moolenaarf2330482008-06-24 20:19:36 +0000495 if v:shell_error != 0
496 call vimball#ShowMesg(s:WARNING,"(vimball#Decompress) gunzip may have failed with <".a:fname.">")
497 endif
Bram Moolenaar551dbcc2006-04-25 22:13:59 +0000498 let fname= substitute(a:fname,'\.gz$','','')
Bram Moolenaarf193fff2006-04-27 00:02:13 +0000499 exe "e ".escape(fname,' \')
Bram Moolenaar5c736222010-01-06 20:54:52 +0100500 if a:0 == 0| call vimball#ShowMesg(s:USAGE,"Source this file to extract it! (:so %)") | endif
Bram Moolenaarf2330482008-06-24 20:19:36 +0000501
502 elseif expand("%") =~ '.*\.gz' && executable("gzip")
503 " handle *.gz with gzip -d
Bram Moolenaar5c736222010-01-06 20:54:52 +0100504 silent exe "!gzip -d ".shellescape(a:fname)
Bram Moolenaarf2330482008-06-24 20:19:36 +0000505 if v:shell_error != 0
506 call vimball#ShowMesg(s:WARNING,'(vimball#Decompress) "gzip -d" may have failed with <'.a:fname.">")
507 endif
508 let fname= substitute(a:fname,'\.gz$','','')
509 exe "e ".escape(fname,' \')
Bram Moolenaar5c736222010-01-06 20:54:52 +0100510 if a:0 == 0| call vimball#ShowMesg(s:USAGE,"Source this file to extract it! (:so %)") | endif
Bram Moolenaarf2330482008-06-24 20:19:36 +0000511
Bram Moolenaar551dbcc2006-04-25 22:13:59 +0000512 elseif expand("%") =~ '.*\.bz2' && executable("bunzip2")
Bram Moolenaarf2330482008-06-24 20:19:36 +0000513 " handle *.bz2 with bunzip2
Bram Moolenaar5c736222010-01-06 20:54:52 +0100514 silent exe "!bunzip2 ".shellescape(a:fname)
Bram Moolenaarf2330482008-06-24 20:19:36 +0000515 if v:shell_error != 0
516 call vimball#ShowMesg(s:WARNING,"(vimball#Decompress) bunzip2 may have failed with <".a:fname.">")
517 endif
Bram Moolenaar551dbcc2006-04-25 22:13:59 +0000518 let fname= substitute(a:fname,'\.bz2$','','')
Bram Moolenaarf193fff2006-04-27 00:02:13 +0000519 exe "e ".escape(fname,' \')
Bram Moolenaar5c736222010-01-06 20:54:52 +0100520 if a:0 == 0| call vimball#ShowMesg(s:USAGE,"Source this file to extract it! (:so %)") | endif
Bram Moolenaarf2330482008-06-24 20:19:36 +0000521
522 elseif expand("%") =~ '.*\.bz2' && executable("bzip2")
523 " handle *.bz2 with bzip2 -d
Bram Moolenaar5c736222010-01-06 20:54:52 +0100524 silent exe "!bzip2 -d ".shellescape(a:fname)
Bram Moolenaarf2330482008-06-24 20:19:36 +0000525 if v:shell_error != 0
526 call vimball#ShowMesg(s:WARNING,'(vimball#Decompress) "bzip2 -d" may have failed with <'.a:fname.">")
527 endif
528 let fname= substitute(a:fname,'\.bz2$','','')
529 exe "e ".escape(fname,' \')
Bram Moolenaar5c736222010-01-06 20:54:52 +0100530 if a:0 == 0| call vimball#ShowMesg(s:USAGE,"Source this file to extract it! (:so %)") | endif
Bram Moolenaarf2330482008-06-24 20:19:36 +0000531
Bram Moolenaar551dbcc2006-04-25 22:13:59 +0000532 elseif expand("%") =~ '.*\.zip' && executable("unzip")
Bram Moolenaarf2330482008-06-24 20:19:36 +0000533 " handle *.zip with unzip
Bram Moolenaar5c736222010-01-06 20:54:52 +0100534 silent exe "!unzip ".shellescape(a:fname)
Bram Moolenaarf2330482008-06-24 20:19:36 +0000535 if v:shell_error != 0
536 call vimball#ShowMesg(s:WARNING,"(vimball#Decompress) unzip may have failed with <".a:fname.">")
537 endif
Bram Moolenaar551dbcc2006-04-25 22:13:59 +0000538 let fname= substitute(a:fname,'\.zip$','','')
Bram Moolenaarf193fff2006-04-27 00:02:13 +0000539 exe "e ".escape(fname,' \')
Bram Moolenaar5c736222010-01-06 20:54:52 +0100540 if a:0 == 0| call vimball#ShowMesg(s:USAGE,"Source this file to extract it! (:so %)") | endif
Bram Moolenaar551dbcc2006-04-25 22:13:59 +0000541 endif
Bram Moolenaarf2330482008-06-24 20:19:36 +0000542
Bram Moolenaar5c736222010-01-06 20:54:52 +0100543 if a:0 == 0| setlocal noma bt=nofile fmr=[[[,]]] fdm=marker | endif
Bram Moolenaar551dbcc2006-04-25 22:13:59 +0000544
545" call Dret("Decompress")
546endfun
547
Bram Moolenaarf193fff2006-04-27 00:02:13 +0000548" ---------------------------------------------------------------------
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +0000549" vimball#ShowMesg: {{{2
550fun! vimball#ShowMesg(level,msg)
551" call Dfunc("vimball#ShowMesg(level=".a:level." msg<".a:msg.">)")
Bram Moolenaar5c736222010-01-06 20:54:52 +0100552
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +0000553 let rulerkeep = &ruler
554 let showcmdkeep = &showcmd
555 set noruler noshowcmd
556 redraw!
557
558 if &fo =~ '[ta]'
Bram Moolenaar5c736222010-01-06 20:54:52 +0100559 echomsg "***vimball*** ".a:msg
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +0000560 else
561 if a:level == s:WARNING || a:level == s:USAGE
562 echohl WarningMsg
563 elseif a:level == s:ERROR
564 echohl Error
565 endif
Bram Moolenaar5c736222010-01-06 20:54:52 +0100566 echomsg "***vimball*** ".a:msg
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +0000567 echohl None
568 endif
569
570 if a:level != s:USAGE
571 call inputsave()|let ok= input("Press <cr> to continue")|call inputrestore()
572 endif
573
574 let &ruler = rulerkeep
575 let &showcmd = showcmdkeep
576
577" call Dret("vimball#ShowMesg")
578endfun
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +0000579" =====================================================================
580" s:ChgDir: change directory (in spite of Windoze) {{{2
Bram Moolenaarf193fff2006-04-27 00:02:13 +0000581fun! s:ChgDir(newdir)
582" call Dfunc("ChgDir(newdir<".a:newdir.">)")
583 if (has("win32") || has("win95") || has("win64") || has("win16"))
Bram Moolenaar15146672011-10-20 22:22:38 +0200584 try
585 exe 'silent cd '.fnameescape(substitute(a:newdir,'/','\\','g'))
586 catch /^Vim\%((\a\+)\)\=:E/
587 call mkdir(fnameescape(substitute(a:newdir,'/','\\','g')))
588 exe 'silent cd '.fnameescape(substitute(a:newdir,'/','\\','g'))
589 endtry
Bram Moolenaarf193fff2006-04-27 00:02:13 +0000590 else
Bram Moolenaar15146672011-10-20 22:22:38 +0200591 try
592 exe 'silent cd '.fnameescape(a:newdir)
593 catch /^Vim\%((\a\+)\)\=:E/
594 call mkdir(fnameescape(a:newdir))
595 exe 'silent cd '.fnameescape(a:newdir)
596 endtry
Bram Moolenaarf193fff2006-04-27 00:02:13 +0000597 endif
Bram Moolenaarf2330482008-06-24 20:19:36 +0000598" call Dret("ChgDir : curdir<".getcwd().">")
Bram Moolenaarf193fff2006-04-27 00:02:13 +0000599endfun
600
601" ---------------------------------------------------------------------
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +0000602" s:RecordInVar: record a un-vimball command in the .VimballRecord file {{{2
603fun! s:RecordInVar(home,cmd)
604" call Dfunc("RecordInVar(home<".a:home."> cmd<".a:cmd.">)")
605 if a:cmd =~ '^rmdir'
606" if !exists("s:recorddir")
607" let s:recorddir= substitute(a:cmd,'^rmdir',"call s:Rmdir",'')
608" else
609" let s:recorddir= s:recorddir."|".substitute(a:cmd,'^rmdir',"call s:Rmdir",'')
610" endif
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +0000611 elseif !exists("s:recordfile")
612 let s:recordfile= a:cmd
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +0000613 else
614 let s:recordfile= s:recordfile."|".a:cmd
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +0000615 endif
Bram Moolenaarf2330482008-06-24 20:19:36 +0000616" call Dret("RecordInVar : s:recordfile<".(exists("s:recordfile")? s:recordfile : "")."> s:recorddir<".(exists("s:recorddir")? s:recorddir : "").">")
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +0000617endfun
618
619" ---------------------------------------------------------------------
620" s:RecordInFile: {{{2
621fun! s:RecordInFile(home)
Bram Moolenaarf2330482008-06-24 20:19:36 +0000622" call Dfunc("s:RecordInFile()")
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +0000623 if exists("g:vimball_norecord")
Bram Moolenaarf2330482008-06-24 20:19:36 +0000624" call Dret("s:RecordInFile : g:vimball_norecord")
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +0000625 return
626 endif
627
628 if exists("s:recordfile") || exists("s:recorddir")
629 let curdir= getcwd()
630 call s:ChgDir(a:home)
631 keepalt keepjumps 1split
Bram Moolenaarf2330482008-06-24 20:19:36 +0000632
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +0000633 let cmd= expand("%:tr").": "
Bram Moolenaarf2330482008-06-24 20:19:36 +0000634" call Decho("cmd<".cmd.">")
635
Bram Moolenaar251e1912011-06-19 05:09:16 +0200636 sil! keepalt keepjumps e .VimballRecord
Bram Moolenaarf2330482008-06-24 20:19:36 +0000637 setlocal ma
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +0000638 $
639 if exists("s:recordfile") && exists("s:recorddir")
640 let cmd= cmd.s:recordfile."|".s:recorddir
641 elseif exists("s:recorddir")
642 let cmd= cmd.s:recorddir
643 elseif exists("s:recordfile")
644 let cmd= cmd.s:recordfile
645 else
Bram Moolenaarf2330482008-06-24 20:19:36 +0000646" call Dret("s:RecordInFile : neither recordfile nor recorddir exist")
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +0000647 return
648 endif
Bram Moolenaarf2330482008-06-24 20:19:36 +0000649" call Decho("cmd<".cmd.">")
650
651 " put command into buffer, write .VimballRecord `file
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +0000652 keepalt keepjumps put=cmd
Bram Moolenaar251e1912011-06-19 05:09:16 +0200653 sil! keepalt keepjumps g/^\s*$/d
654 sil! keepalt keepjumps wq!
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +0000655 call s:ChgDir(curdir)
Bram Moolenaarf2330482008-06-24 20:19:36 +0000656
657 if exists("s:recorddir")
658" call Decho("unlet s:recorddir<".s:recorddir.">")
659 unlet s:recorddir
660 endif
661 if exists("s:recordfile")
662" call Decho("unlet s:recordfile<".s:recordfile.">")
663 unlet s:recordfile
664 endif
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +0000665 else
666" call Decho("s:record[file|dir] doesn't exist")
667 endif
668
Bram Moolenaarf2330482008-06-24 20:19:36 +0000669" call Dret("s:RecordInFile")
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +0000670endfun
671
672" ---------------------------------------------------------------------
Bram Moolenaar5c736222010-01-06 20:54:52 +0100673" vimball#VimballHome: determine/get home directory path (usually from rtp) {{{2
674fun! vimball#VimballHome()
675" call Dfunc("vimball#VimballHome()")
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +0000676 if exists("g:vimball_home")
677 let home= g:vimball_home
678 else
679 " go to vim plugin home
680 for home in split(&rtp,',') + ['']
681 if isdirectory(home) && filewritable(home) | break | endif
Bram Moolenaarf2330482008-06-24 20:19:36 +0000682 let basehome= substitute(home,'[/\\]\.vim$','','')
683 if isdirectory(basehome) && filewritable(basehome)
684 let home= basehome."/.vim"
685 break
686 endif
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +0000687 endfor
688 if home == ""
689 " just pick the first directory
690 let home= substitute(&rtp,',.*$','','')
691 endif
692 if (has("win32") || has("win95") || has("win64") || has("win16"))
693 let home= substitute(home,'/','\\','g')
694 endif
695 endif
Bram Moolenaarf2330482008-06-24 20:19:36 +0000696 " insure that the home directory exists
697" call Decho("picked home<".home.">")
698 if !isdirectory(home)
699 if exists("g:vimball_mkdir")
700" call Decho("home<".home."> isn't a directory -- making it now with g:vimball_mkdir<".g:vimball_mkdir.">")
Bram Moolenaar5c736222010-01-06 20:54:52 +0100701" call Decho("system(".g:vimball_mkdir." ".shellescape(home).")")
702 call system(g:vimball_mkdir." ".shellescape(home))
Bram Moolenaarf2330482008-06-24 20:19:36 +0000703 else
704" call Decho("home<".home."> isn't a directory -- making it now with mkdir()")
705 call mkdir(home)
706 endif
707 endif
Bram Moolenaar5c736222010-01-06 20:54:52 +0100708" call Dret("vimball#VimballHome <".home.">")
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +0000709 return home
Bram Moolenaarf193fff2006-04-27 00:02:13 +0000710endfun
711
712" ---------------------------------------------------------------------
Bram Moolenaarf2330482008-06-24 20:19:36 +0000713" vimball#SaveSettings: {{{2
714fun! vimball#SaveSettings()
Bram Moolenaar25e2c9e2006-04-27 21:40:34 +0000715" call Dfunc("SaveSettings()")
716 let s:makeep = getpos("'a")
717 let s:regakeep= @a
Bram Moolenaard68071d2006-05-02 22:08:30 +0000718 if exists("&acd")
719 let s:acdkeep = &acd
720 endif
Bram Moolenaar25e2c9e2006-04-27 21:40:34 +0000721 let s:eikeep = &ei
Bram Moolenaare37d50a2008-08-06 17:06:04 +0000722 let s:fenkeep = &l:fen
Bram Moolenaar25e2c9e2006-04-27 21:40:34 +0000723 let s:hidkeep = &hidden
724 let s:ickeep = &ic
Bram Moolenaar143c38c2007-05-10 16:41:10 +0000725 let s:lzkeep = &lz
726 let s:pmkeep = &pm
Bram Moolenaar25e2c9e2006-04-27 21:40:34 +0000727 let s:repkeep = &report
728 let s:vekeep = &ve
Bram Moolenaare37d50a2008-08-06 17:06:04 +0000729 let s:ffkeep = &l:ff
Bram Moolenaar251e1912011-06-19 05:09:16 +0200730 let s:swfkeep = &l:swf
Bram Moolenaard68071d2006-05-02 22:08:30 +0000731 if exists("&acd")
Bram Moolenaar251e1912011-06-19 05:09:16 +0200732 setlocal ei=all ve=all noacd nofen noic report=999 nohid bt= ma lz pm= ff=unix noswf
Bram Moolenaard68071d2006-05-02 22:08:30 +0000733 else
Bram Moolenaar251e1912011-06-19 05:09:16 +0200734 setlocal ei=all ve=all nofen noic report=999 nohid bt= ma lz pm= ff=unix noswf
Bram Moolenaard68071d2006-05-02 22:08:30 +0000735 endif
Bram Moolenaarf2330482008-06-24 20:19:36 +0000736 " vimballs should be in unix format
737 setlocal ff=unix
Bram Moolenaar25e2c9e2006-04-27 21:40:34 +0000738" call Dret("SaveSettings")
739endfun
740
741" ---------------------------------------------------------------------
Bram Moolenaarf2330482008-06-24 20:19:36 +0000742" vimball#RestoreSettings: {{{2
743fun! vimball#RestoreSettings()
Bram Moolenaar25e2c9e2006-04-27 21:40:34 +0000744" call Dfunc("RestoreSettings()")
745 let @a = s:regakeep
Bram Moolenaard68071d2006-05-02 22:08:30 +0000746 if exists("&acd")
747 let &acd = s:acdkeep
748 endif
Bram Moolenaare37d50a2008-08-06 17:06:04 +0000749 let &l:fen = s:fenkeep
Bram Moolenaar25e2c9e2006-04-27 21:40:34 +0000750 let &hidden = s:hidkeep
751 let &ic = s:ickeep
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +0000752 let &lz = s:lzkeep
Bram Moolenaar143c38c2007-05-10 16:41:10 +0000753 let &pm = s:pmkeep
Bram Moolenaar25e2c9e2006-04-27 21:40:34 +0000754 let &report = s:repkeep
755 let &ve = s:vekeep
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +0000756 let &ei = s:eikeep
Bram Moolenaare37d50a2008-08-06 17:06:04 +0000757 let &l:ff = s:ffkeep
Bram Moolenaar25e2c9e2006-04-27 21:40:34 +0000758 if s:makeep[0] != 0
759 " restore mark a
760" call Decho("restore mark-a: makeep=".string(makeep))
761 call setpos("'a",s:makeep)
762 endif
Bram Moolenaard68071d2006-05-02 22:08:30 +0000763 if exists("&acd")
Bram Moolenaarf2330482008-06-24 20:19:36 +0000764 unlet s:acdkeep
Bram Moolenaard68071d2006-05-02 22:08:30 +0000765 endif
Bram Moolenaarf2330482008-06-24 20:19:36 +0000766 unlet s:regakeep s:eikeep s:fenkeep s:hidkeep s:ickeep s:repkeep s:vekeep s:makeep s:lzkeep s:pmkeep s:ffkeep
Bram Moolenaar25e2c9e2006-04-27 21:40:34 +0000767" call Dret("RestoreSettings")
768endfun
769
770" ---------------------------------------------------------------------
Bram Moolenaareee697b2006-03-21 21:20:39 +0000771" Modelines: {{{1
772" vim: fdm=marker