blob: 0e3a4fce8c65dd4e843de849d3c8ea81348c4d07 [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 Moolenaar251e1912011-06-19 05:09:16 +02003" Date: Apr 02, 2011
4" Version: 33
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 Moolenaar251e1912011-06-19 05:09:16 +020017let g:loaded_vimball = "v33"
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
223 let home= expand(a:1)
224 else
Bram Moolenaar5c736222010-01-06 20:54:52 +0100225 let home= vimball#VimballHome()
Bram Moolenaarf193fff2006-04-27 00:02:13 +0000226 endif
227" call Decho("home<".home.">")
228
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +0000229 " save current directory and remove older same-named vimball, if any
Bram Moolenaareee697b2006-03-21 21:20:39 +0000230 let curdir = getcwd()
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +0000231" call Decho("home<".home.">")
232" call Decho("curdir<".curdir.">")
233
Bram Moolenaarf193fff2006-04-27 00:02:13 +0000234 call s:ChgDir(home)
Bram Moolenaarf2330482008-06-24 20:19:36 +0000235 let s:ok_unablefind= 1
236 call vimball#RmVimball(vimballfile)
237 unlet s:ok_unablefind
Bram Moolenaarf193fff2006-04-27 00:02:13 +0000238
Bram Moolenaareee697b2006-03-21 21:20:39 +0000239 let linenr = 4
240 let filecnt = 0
241
242 " give title to listing of (extracted) files from Vimball Archive
243 if a:really
Bram Moolenaarf2330482008-06-24 20:19:36 +0000244 echohl Title | echomsg "Vimball Archive" | echohl None
245 else
246 echohl Title | echomsg "Vimball Archive Listing" | echohl None
Bram Moolenaar25e2c9e2006-04-27 21:40:34 +0000247 echohl Statement | echomsg "files would be placed under: ".home | echohl None
Bram Moolenaareee697b2006-03-21 21:20:39 +0000248 endif
249
250 " apportion vimball contents to various files
251" call Decho("exe tabn ".curtabnr)
252 exe "tabn ".curtabnr
253" call Decho("linenr=".linenr." line$=".line("$"))
254 while 1 < linenr && linenr < line("$")
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +0000255 let fname = substitute(getline(linenr),'\t\[\[\[1$','','')
256 let fname = substitute(fname,'\\','/','g')
Bram Moolenaar5c736222010-01-06 20:54:52 +0100257 let fsize = substitute(getline(linenr+1),'^\(\d\+\).\{-}$','\1','')+0
Bram Moolenaar251e1912011-06-19 05:09:16 +0200258 let fenc = substitute(getline(linenr+1),'^\d\+\s*\(\S\{-}\)$','\1','')
Bram Moolenaareee697b2006-03-21 21:20:39 +0000259 let filecnt = filecnt + 1
Bram Moolenaar251e1912011-06-19 05:09:16 +0200260" call Decho("fname<".fname."> fsize=".fsize." filecnt=".filecnt. " fenc=".fenc)
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +0000261
Bram Moolenaareee697b2006-03-21 21:20:39 +0000262 if a:really
263 echomsg "extracted <".fname.">: ".fsize." lines"
264 else
265 echomsg "would extract <".fname.">: ".fsize." lines"
266 endif
Bram Moolenaarf9393ef2006-04-24 19:47:27 +0000267" call Decho("using L#".linenr.": will extract file<".fname.">")
268" call Decho("using L#".(linenr+1).": fsize=".fsize)
Bram Moolenaareee697b2006-03-21 21:20:39 +0000269
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +0000270 " Allow AsNeeded/ directory to take place of plugin/ directory
Bram Moolenaarf2330482008-06-24 20:19:36 +0000271 " when AsNeeded/filename is filereadable or was present in VimballRecord
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +0000272 if fname =~ '\<plugin/'
273 let anfname= substitute(fname,'\<plugin/','AsNeeded/','')
Bram Moolenaarf2330482008-06-24 20:19:36 +0000274 if filereadable(anfname) || (exists("s:VBRstring") && s:VBRstring =~ anfname)
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +0000275" call Decho("using anfname<".anfname."> instead of <".fname.">")
276 let fname= anfname
277 endif
278 endif
279
Bram Moolenaareee697b2006-03-21 21:20:39 +0000280 " make directories if they don't exist yet
Bram Moolenaar25e2c9e2006-04-27 21:40:34 +0000281 if a:really
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +0000282" call Decho("making directories if they don't exist yet (fname<".fname.">)")
283 let fnamebuf= substitute(fname,'\\','/','g')
284 let dirpath = substitute(home,'\\','/','g')
Bram Moolenaar25e2c9e2006-04-27 21:40:34 +0000285 while fnamebuf =~ '/'
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +0000286 let dirname = dirpath."/".substitute(fnamebuf,'/.*$','','')
287 let dirpath = dirname
288 let fnamebuf = substitute(fnamebuf,'^.\{-}/\(.*\)$','\1','')
289" call Decho("dirname<".dirname.">")
Bram Moolenaar25e2c9e2006-04-27 21:40:34 +0000290 if !isdirectory(dirname)
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +0000291" call Decho("making <".dirname.">")
Bram Moolenaarf2330482008-06-24 20:19:36 +0000292 if exists("g:vimball_mkdir")
Bram Moolenaar5c736222010-01-06 20:54:52 +0100293 call system(g:vimball_mkdir." ".shellescape(dirname))
Bram Moolenaarf2330482008-06-24 20:19:36 +0000294 else
295 call mkdir(dirname)
296 endif
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +0000297 call s:RecordInVar(home,"rmdir('".dirname."')")
Bram Moolenaar25e2c9e2006-04-27 21:40:34 +0000298 endif
299 endwhile
300 endif
Bram Moolenaarf193fff2006-04-27 00:02:13 +0000301 call s:ChgDir(home)
Bram Moolenaareee697b2006-03-21 21:20:39 +0000302
303 " grab specified qty of lines and place into "a" buffer
Bram Moolenaarf9393ef2006-04-24 19:47:27 +0000304 " (skip over path/filename and qty-lines)
305 let linenr = linenr + 2
306 let lastline = linenr + fsize - 1
307" call Decho("exe ".linenr.",".lastline."yank a")
Bram Moolenaar251e1912011-06-19 05:09:16 +0200308 " no point in handling a zero-length file
309 if lastline >= linenr
310 exe "silent ".linenr.",".lastline."yank a"
Bram Moolenaareee697b2006-03-21 21:20:39 +0000311
Bram Moolenaar251e1912011-06-19 05:09:16 +0200312 " copy "a" buffer into tab
Bram Moolenaareee697b2006-03-21 21:20:39 +0000313" call Decho('copy "a buffer into tab#'.vbtabnr)
Bram Moolenaar251e1912011-06-19 05:09:16 +0200314 exe "tabn ".vbtabnr
315 setlocal ma
316 sil! %d
317 silent put a
318 1
319 sil! d
Bram Moolenaareee697b2006-03-21 21:20:39 +0000320
Bram Moolenaar251e1912011-06-19 05:09:16 +0200321 " write tab to file
322 if a:really
323 let fnamepath= home."/".fname
Bram Moolenaarf2330482008-06-24 20:19:36 +0000324" call Decho("exe w! ".fnameescape(fnamepath))
Bram Moolenaar5c736222010-01-06 20:54:52 +0100325 if fenc != ""
326 exe "silent w! ++enc=".fnameescape(fenc)." ".fnameescape(fnamepath)
327 else
328 exe "silent w! ".fnameescape(fnamepath)
329 endif
330 echo "wrote ".fnameescape(fnamepath)
331 call s:RecordInVar(home,"call delete('".fnamepath."')")
Bram Moolenaar251e1912011-06-19 05:09:16 +0200332 endif
Bram Moolenaareee697b2006-03-21 21:20:39 +0000333
Bram Moolenaar251e1912011-06-19 05:09:16 +0200334 " return to tab with vimball
Bram Moolenaareee697b2006-03-21 21:20:39 +0000335" call Decho("exe tabn ".curtabnr)
Bram Moolenaar251e1912011-06-19 05:09:16 +0200336 exe "tabn ".curtabnr
Bram Moolenaarf9393ef2006-04-24 19:47:27 +0000337
Bram Moolenaar251e1912011-06-19 05:09:16 +0200338 " set up help if its a doc/*.txt file
Bram Moolenaarf9393ef2006-04-24 19:47:27 +0000339" call Decho("didhelp<".didhelp."> fname<".fname.">")
Bram Moolenaar251e1912011-06-19 05:09:16 +0200340 if a:really && didhelp == "" && fname =~ 'doc/[^/]\+\.\(txt\|..x\)$'
341 let didhelp= substitute(fname,'^\(.*\<doc\)[/\\][^.]*\.\(txt\|..x\)$','\1','')
Bram Moolenaarf9393ef2006-04-24 19:47:27 +0000342" call Decho("didhelp<".didhelp.">")
Bram Moolenaar251e1912011-06-19 05:09:16 +0200343 endif
Bram Moolenaarf9393ef2006-04-24 19:47:27 +0000344 endif
345
346 " update for next file
Bram Moolenaarf2330482008-06-24 20:19:36 +0000347" call Decho("update linenr= [linenr=".linenr."] + [fsize=".fsize."] = ".(linenr+fsize))
348 let linenr= linenr + fsize
Bram Moolenaareee697b2006-03-21 21:20:39 +0000349 endwhile
350
351 " set up help
352" call Decho("about to set up help: didhelp<".didhelp.">")
353 if didhelp != ""
Bram Moolenaare37d50a2008-08-06 17:06:04 +0000354 let htpath= home."/".didhelp
Bram Moolenaarf193fff2006-04-27 00:02:13 +0000355" call Decho("exe helptags ".htpath)
Bram Moolenaare37d50a2008-08-06 17:06:04 +0000356 exe "helptags ".fnameescape(htpath)
Bram Moolenaarf193fff2006-04-27 00:02:13 +0000357 echo "did helptags"
Bram Moolenaareee697b2006-03-21 21:20:39 +0000358 endif
359
360 " make sure a "Press ENTER..." prompt appears to keep the messages showing!
Bram Moolenaar8ab561d2006-03-23 22:44:10 +0000361 while filecnt <= &ch
Bram Moolenaareee697b2006-03-21 21:20:39 +0000362 echomsg " "
363 let filecnt= filecnt + 1
364 endwhile
365
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +0000366 " record actions in <.VimballRecord>
367 call s:RecordInFile(home)
368
Bram Moolenaareee697b2006-03-21 21:20:39 +0000369 " restore events, delete tab and buffer
370 exe "tabn ".vbtabnr
371 setlocal nomod bh=wipe
372 exe "tabn ".curtabnr
373 exe "tabc ".vbtabnr
Bram Moolenaarf2330482008-06-24 20:19:36 +0000374 call vimball#RestoreSettings()
Bram Moolenaarf193fff2006-04-27 00:02:13 +0000375 call s:ChgDir(curdir)
Bram Moolenaareee697b2006-03-21 21:20:39 +0000376
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +0000377" call Dret("vimball#Vimball")
378endfun
379
380" ---------------------------------------------------------------------
381" vimball#RmVimball: remove any files, remove any directories made by any {{{2
382" previous vimball extraction based on a file of the current
383" name.
384" Usage: RmVimball (assume current file is a vimball; remove)
385" RmVimball vimballname
386fun! vimball#RmVimball(...)
387" call Dfunc("vimball#RmVimball() a:0=".a:0)
388 if exists("g:vimball_norecord")
389" call Dret("vimball#RmVimball : (g:vimball_norecord)")
390 return
391 endif
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +0000392
393 if a:0 == 0
Bram Moolenaarf2330482008-06-24 20:19:36 +0000394 let curfile= expand("%:tr")
395" call Decho("case a:0=0: curfile<".curfile."> (used expand(%:tr))")
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +0000396 else
397 if a:1 =~ '[\/]'
398 call vimball#ShowMesg(s:USAGE,"RmVimball vimballname [path]")
399" call Dret("vimball#RmVimball : suspect a:1<".a:1.">")
400 return
401 endif
402 let curfile= a:1
Bram Moolenaarf2330482008-06-24 20:19:36 +0000403" call Decho("case a:0=".a:0.": curfile<".curfile.">")
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +0000404 endif
Bram Moolenaar251e1912011-06-19 05:09:16 +0200405 if curfile =~ '\.vmb$'
406 let curfile= substitute(curfile,'\.vmb','','')
407 elseif curfile =~ '\.vba$'
Bram Moolenaarf2330482008-06-24 20:19:36 +0000408 let curfile= substitute(curfile,'\.vba','','')
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +0000409 endif
410 if a:0 >= 2
411 let home= expand(a:2)
412 else
Bram Moolenaar5c736222010-01-06 20:54:52 +0100413 let home= vimball#VimballHome()
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +0000414 endif
415 let curdir = getcwd()
416" call Decho("home <".home.">")
417" call Decho("curfile<".curfile.">")
418" call Decho("curdir <".curdir.">")
419
420 call s:ChgDir(home)
421 if filereadable(".VimballRecord")
422" call Decho(".VimballRecord is readable")
423" call Decho("curfile<".curfile.">")
424 keepalt keepjumps 1split
Bram Moolenaar251e1912011-06-19 05:09:16 +0200425 sil! keepalt keepjumps e .VimballRecord
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +0000426 let keepsrch= @/
Bram Moolenaar5c736222010-01-06 20:54:52 +0100427" call Decho('search for ^\M'.curfile.'.\m: ')
Bram Moolenaar251e1912011-06-19 05:09:16 +0200428" call Decho('search for ^\M'.curfile.'.\m{vba|vmb}: ')
429" call Decho('search for ^\M'.curfile.'\m[-0-9.]*\.{vba|vmb}: ')
Bram Moolenaar5c736222010-01-06 20:54:52 +0100430 if search('^\M'.curfile."\m: ".'cw')
Bram Moolenaarf2330482008-06-24 20:19:36 +0000431 let foundit= 1
Bram Moolenaar251e1912011-06-19 05:09:16 +0200432 elseif search('^\M'.curfile.".\mvmb: ",'cw')
433 let foundit= 2
434 elseif search('^\M'.curfile.'\m[-0-9.]*\.vmb: ','cw')
435 let foundit= 2
Bram Moolenaar5c736222010-01-06 20:54:52 +0100436 elseif search('^\M'.curfile.".\mvba: ",'cw')
Bram Moolenaarf2330482008-06-24 20:19:36 +0000437 let foundit= 1
Bram Moolenaar5c736222010-01-06 20:54:52 +0100438 elseif search('^\M'.curfile.'\m[-0-9.]*\.vba: ','cw')
Bram Moolenaarf2330482008-06-24 20:19:36 +0000439 let foundit= 1
440 else
441 let foundit = 0
442 endif
443 if foundit
Bram Moolenaar251e1912011-06-19 05:09:16 +0200444 if foundit == 1
445 let exestring = substitute(getline("."),'^\M'.curfile.'\m\S\{-}\.vba: ','','')
446 else
447 let exestring = substitute(getline("."),'^\M'.curfile.'\m\S\{-}\.vmb: ','','')
448 endif
Bram Moolenaarf2330482008-06-24 20:19:36 +0000449 let s:VBRstring= substitute(exestring,'call delete(','','g')
450 let s:VBRstring= substitute(s:VBRstring,"[')]",'','g')
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +0000451" call Decho("exe ".exestring)
Bram Moolenaar251e1912011-06-19 05:09:16 +0200452 sil! keepalt keepjumps exe exestring
453 sil! keepalt keepjumps d
Bram Moolenaarf2330482008-06-24 20:19:36 +0000454 let exestring= strlen(substitute(exestring,'call delete(.\{-})|\=',"D","g"))
455" call Decho("exestring<".exestring.">")
456 echomsg "removed ".exestring." files"
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +0000457 else
Bram Moolenaarf2330482008-06-24 20:19:36 +0000458 let s:VBRstring= ''
Bram Moolenaar251e1912011-06-19 05:09:16 +0200459 let curfile = substitute(curfile,'\.vmb','','')
Bram Moolenaarf2330482008-06-24 20:19:36 +0000460" call Decho("unable to find <".curfile."> in .VimballRecord")
461 if !exists("s:ok_unablefind")
462 call vimball#ShowMesg(s:WARNING,"(RmVimball) unable to find <".curfile."> in .VimballRecord")
463 endif
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +0000464 endif
Bram Moolenaar251e1912011-06-19 05:09:16 +0200465 sil! keepalt keepjumps g/^\s*$/d
466 sil! keepalt keepjumps wq!
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +0000467 let @/= keepsrch
468 endif
469 call s:ChgDir(curdir)
470
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +0000471" call Dret("vimball#RmVimball")
Bram Moolenaareee697b2006-03-21 21:20:39 +0000472endfun
473
Bram Moolenaar551dbcc2006-04-25 22:13:59 +0000474" ---------------------------------------------------------------------
475" vimball#Decompress: attempts to automatically decompress vimballs {{{2
Bram Moolenaar5c736222010-01-06 20:54:52 +0100476fun! vimball#Decompress(fname,...)
477" call Dfunc("Decompress(fname<".a:fname.">) a:0=".a:0)
Bram Moolenaar551dbcc2006-04-25 22:13:59 +0000478
479 " decompression:
480 if expand("%") =~ '.*\.gz' && executable("gunzip")
Bram Moolenaarf2330482008-06-24 20:19:36 +0000481 " handle *.gz with gunzip
Bram Moolenaar5c736222010-01-06 20:54:52 +0100482 silent exe "!gunzip ".shellescape(a:fname)
Bram Moolenaarf2330482008-06-24 20:19:36 +0000483 if v:shell_error != 0
484 call vimball#ShowMesg(s:WARNING,"(vimball#Decompress) gunzip may have failed with <".a:fname.">")
485 endif
Bram Moolenaar551dbcc2006-04-25 22:13:59 +0000486 let fname= substitute(a:fname,'\.gz$','','')
Bram Moolenaarf193fff2006-04-27 00:02:13 +0000487 exe "e ".escape(fname,' \')
Bram Moolenaar5c736222010-01-06 20:54:52 +0100488 if a:0 == 0| call vimball#ShowMesg(s:USAGE,"Source this file to extract it! (:so %)") | endif
Bram Moolenaarf2330482008-06-24 20:19:36 +0000489
490 elseif expand("%") =~ '.*\.gz' && executable("gzip")
491 " handle *.gz with gzip -d
Bram Moolenaar5c736222010-01-06 20:54:52 +0100492 silent exe "!gzip -d ".shellescape(a:fname)
Bram Moolenaarf2330482008-06-24 20:19:36 +0000493 if v:shell_error != 0
494 call vimball#ShowMesg(s:WARNING,'(vimball#Decompress) "gzip -d" may have failed with <'.a:fname.">")
495 endif
496 let fname= substitute(a:fname,'\.gz$','','')
497 exe "e ".escape(fname,' \')
Bram Moolenaar5c736222010-01-06 20:54:52 +0100498 if a:0 == 0| call vimball#ShowMesg(s:USAGE,"Source this file to extract it! (:so %)") | endif
Bram Moolenaarf2330482008-06-24 20:19:36 +0000499
Bram Moolenaar551dbcc2006-04-25 22:13:59 +0000500 elseif expand("%") =~ '.*\.bz2' && executable("bunzip2")
Bram Moolenaarf2330482008-06-24 20:19:36 +0000501 " handle *.bz2 with bunzip2
Bram Moolenaar5c736222010-01-06 20:54:52 +0100502 silent exe "!bunzip2 ".shellescape(a:fname)
Bram Moolenaarf2330482008-06-24 20:19:36 +0000503 if v:shell_error != 0
504 call vimball#ShowMesg(s:WARNING,"(vimball#Decompress) bunzip2 may have failed with <".a:fname.">")
505 endif
Bram Moolenaar551dbcc2006-04-25 22:13:59 +0000506 let fname= substitute(a:fname,'\.bz2$','','')
Bram Moolenaarf193fff2006-04-27 00:02:13 +0000507 exe "e ".escape(fname,' \')
Bram Moolenaar5c736222010-01-06 20:54:52 +0100508 if a:0 == 0| call vimball#ShowMesg(s:USAGE,"Source this file to extract it! (:so %)") | endif
Bram Moolenaarf2330482008-06-24 20:19:36 +0000509
510 elseif expand("%") =~ '.*\.bz2' && executable("bzip2")
511 " handle *.bz2 with bzip2 -d
Bram Moolenaar5c736222010-01-06 20:54:52 +0100512 silent exe "!bzip2 -d ".shellescape(a:fname)
Bram Moolenaarf2330482008-06-24 20:19:36 +0000513 if v:shell_error != 0
514 call vimball#ShowMesg(s:WARNING,'(vimball#Decompress) "bzip2 -d" may have failed with <'.a:fname.">")
515 endif
516 let fname= substitute(a:fname,'\.bz2$','','')
517 exe "e ".escape(fname,' \')
Bram Moolenaar5c736222010-01-06 20:54:52 +0100518 if a:0 == 0| call vimball#ShowMesg(s:USAGE,"Source this file to extract it! (:so %)") | endif
Bram Moolenaarf2330482008-06-24 20:19:36 +0000519
Bram Moolenaar551dbcc2006-04-25 22:13:59 +0000520 elseif expand("%") =~ '.*\.zip' && executable("unzip")
Bram Moolenaarf2330482008-06-24 20:19:36 +0000521 " handle *.zip with unzip
Bram Moolenaar5c736222010-01-06 20:54:52 +0100522 silent exe "!unzip ".shellescape(a:fname)
Bram Moolenaarf2330482008-06-24 20:19:36 +0000523 if v:shell_error != 0
524 call vimball#ShowMesg(s:WARNING,"(vimball#Decompress) unzip may have failed with <".a:fname.">")
525 endif
Bram Moolenaar551dbcc2006-04-25 22:13:59 +0000526 let fname= substitute(a:fname,'\.zip$','','')
Bram Moolenaarf193fff2006-04-27 00:02:13 +0000527 exe "e ".escape(fname,' \')
Bram Moolenaar5c736222010-01-06 20:54:52 +0100528 if a:0 == 0| call vimball#ShowMesg(s:USAGE,"Source this file to extract it! (:so %)") | endif
Bram Moolenaar551dbcc2006-04-25 22:13:59 +0000529 endif
Bram Moolenaarf2330482008-06-24 20:19:36 +0000530
Bram Moolenaar5c736222010-01-06 20:54:52 +0100531 if a:0 == 0| setlocal noma bt=nofile fmr=[[[,]]] fdm=marker | endif
Bram Moolenaar551dbcc2006-04-25 22:13:59 +0000532
533" call Dret("Decompress")
534endfun
535
Bram Moolenaarf193fff2006-04-27 00:02:13 +0000536" ---------------------------------------------------------------------
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +0000537" vimball#ShowMesg: {{{2
538fun! vimball#ShowMesg(level,msg)
539" call Dfunc("vimball#ShowMesg(level=".a:level." msg<".a:msg.">)")
Bram Moolenaar5c736222010-01-06 20:54:52 +0100540
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +0000541 let rulerkeep = &ruler
542 let showcmdkeep = &showcmd
543 set noruler noshowcmd
544 redraw!
545
546 if &fo =~ '[ta]'
Bram Moolenaar5c736222010-01-06 20:54:52 +0100547 echomsg "***vimball*** ".a:msg
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +0000548 else
549 if a:level == s:WARNING || a:level == s:USAGE
550 echohl WarningMsg
551 elseif a:level == s:ERROR
552 echohl Error
553 endif
Bram Moolenaar5c736222010-01-06 20:54:52 +0100554 echomsg "***vimball*** ".a:msg
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +0000555 echohl None
556 endif
557
558 if a:level != s:USAGE
559 call inputsave()|let ok= input("Press <cr> to continue")|call inputrestore()
560 endif
561
562 let &ruler = rulerkeep
563 let &showcmd = showcmdkeep
564
565" call Dret("vimball#ShowMesg")
566endfun
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +0000567" =====================================================================
568" s:ChgDir: change directory (in spite of Windoze) {{{2
Bram Moolenaarf193fff2006-04-27 00:02:13 +0000569fun! s:ChgDir(newdir)
570" call Dfunc("ChgDir(newdir<".a:newdir.">)")
571 if (has("win32") || has("win95") || has("win64") || has("win16"))
Bram Moolenaarf2330482008-06-24 20:19:36 +0000572 exe 'silent cd '.fnameescape(substitute(a:newdir,'/','\\','g'))
Bram Moolenaarf193fff2006-04-27 00:02:13 +0000573 else
Bram Moolenaarf2330482008-06-24 20:19:36 +0000574 exe 'silent cd '.fnameescape(a:newdir)
Bram Moolenaarf193fff2006-04-27 00:02:13 +0000575 endif
Bram Moolenaarf2330482008-06-24 20:19:36 +0000576" call Dret("ChgDir : curdir<".getcwd().">")
Bram Moolenaarf193fff2006-04-27 00:02:13 +0000577endfun
578
579" ---------------------------------------------------------------------
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +0000580" s:RecordInVar: record a un-vimball command in the .VimballRecord file {{{2
581fun! s:RecordInVar(home,cmd)
582" call Dfunc("RecordInVar(home<".a:home."> cmd<".a:cmd.">)")
583 if a:cmd =~ '^rmdir'
584" if !exists("s:recorddir")
585" let s:recorddir= substitute(a:cmd,'^rmdir',"call s:Rmdir",'')
586" else
587" let s:recorddir= s:recorddir."|".substitute(a:cmd,'^rmdir',"call s:Rmdir",'')
588" endif
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +0000589 elseif !exists("s:recordfile")
590 let s:recordfile= a:cmd
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +0000591 else
592 let s:recordfile= s:recordfile."|".a:cmd
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +0000593 endif
Bram Moolenaarf2330482008-06-24 20:19:36 +0000594" call Dret("RecordInVar : s:recordfile<".(exists("s:recordfile")? s:recordfile : "")."> s:recorddir<".(exists("s:recorddir")? s:recorddir : "").">")
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +0000595endfun
596
597" ---------------------------------------------------------------------
598" s:RecordInFile: {{{2
599fun! s:RecordInFile(home)
Bram Moolenaarf2330482008-06-24 20:19:36 +0000600" call Dfunc("s:RecordInFile()")
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +0000601 if exists("g:vimball_norecord")
Bram Moolenaarf2330482008-06-24 20:19:36 +0000602" call Dret("s:RecordInFile : g:vimball_norecord")
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +0000603 return
604 endif
605
606 if exists("s:recordfile") || exists("s:recorddir")
607 let curdir= getcwd()
608 call s:ChgDir(a:home)
609 keepalt keepjumps 1split
Bram Moolenaarf2330482008-06-24 20:19:36 +0000610
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +0000611 let cmd= expand("%:tr").": "
Bram Moolenaarf2330482008-06-24 20:19:36 +0000612" call Decho("cmd<".cmd.">")
613
Bram Moolenaar251e1912011-06-19 05:09:16 +0200614 sil! keepalt keepjumps e .VimballRecord
Bram Moolenaarf2330482008-06-24 20:19:36 +0000615 setlocal ma
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +0000616 $
617 if exists("s:recordfile") && exists("s:recorddir")
618 let cmd= cmd.s:recordfile."|".s:recorddir
619 elseif exists("s:recorddir")
620 let cmd= cmd.s:recorddir
621 elseif exists("s:recordfile")
622 let cmd= cmd.s:recordfile
623 else
Bram Moolenaarf2330482008-06-24 20:19:36 +0000624" call Dret("s:RecordInFile : neither recordfile nor recorddir exist")
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +0000625 return
626 endif
Bram Moolenaarf2330482008-06-24 20:19:36 +0000627" call Decho("cmd<".cmd.">")
628
629 " put command into buffer, write .VimballRecord `file
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +0000630 keepalt keepjumps put=cmd
Bram Moolenaar251e1912011-06-19 05:09:16 +0200631 sil! keepalt keepjumps g/^\s*$/d
632 sil! keepalt keepjumps wq!
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +0000633 call s:ChgDir(curdir)
Bram Moolenaarf2330482008-06-24 20:19:36 +0000634
635 if exists("s:recorddir")
636" call Decho("unlet s:recorddir<".s:recorddir.">")
637 unlet s:recorddir
638 endif
639 if exists("s:recordfile")
640" call Decho("unlet s:recordfile<".s:recordfile.">")
641 unlet s:recordfile
642 endif
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +0000643 else
644" call Decho("s:record[file|dir] doesn't exist")
645 endif
646
Bram Moolenaarf2330482008-06-24 20:19:36 +0000647" call Dret("s:RecordInFile")
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +0000648endfun
649
650" ---------------------------------------------------------------------
Bram Moolenaar5c736222010-01-06 20:54:52 +0100651" vimball#VimballHome: determine/get home directory path (usually from rtp) {{{2
652fun! vimball#VimballHome()
653" call Dfunc("vimball#VimballHome()")
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +0000654 if exists("g:vimball_home")
655 let home= g:vimball_home
656 else
657 " go to vim plugin home
658 for home in split(&rtp,',') + ['']
659 if isdirectory(home) && filewritable(home) | break | endif
Bram Moolenaarf2330482008-06-24 20:19:36 +0000660 let basehome= substitute(home,'[/\\]\.vim$','','')
661 if isdirectory(basehome) && filewritable(basehome)
662 let home= basehome."/.vim"
663 break
664 endif
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +0000665 endfor
666 if home == ""
667 " just pick the first directory
668 let home= substitute(&rtp,',.*$','','')
669 endif
670 if (has("win32") || has("win95") || has("win64") || has("win16"))
671 let home= substitute(home,'/','\\','g')
672 endif
673 endif
Bram Moolenaarf2330482008-06-24 20:19:36 +0000674 " insure that the home directory exists
675" call Decho("picked home<".home.">")
676 if !isdirectory(home)
677 if exists("g:vimball_mkdir")
678" 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 +0100679" call Decho("system(".g:vimball_mkdir." ".shellescape(home).")")
680 call system(g:vimball_mkdir." ".shellescape(home))
Bram Moolenaarf2330482008-06-24 20:19:36 +0000681 else
682" call Decho("home<".home."> isn't a directory -- making it now with mkdir()")
683 call mkdir(home)
684 endif
685 endif
Bram Moolenaar5c736222010-01-06 20:54:52 +0100686" call Dret("vimball#VimballHome <".home.">")
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +0000687 return home
Bram Moolenaarf193fff2006-04-27 00:02:13 +0000688endfun
689
690" ---------------------------------------------------------------------
Bram Moolenaarf2330482008-06-24 20:19:36 +0000691" vimball#SaveSettings: {{{2
692fun! vimball#SaveSettings()
Bram Moolenaar25e2c9e2006-04-27 21:40:34 +0000693" call Dfunc("SaveSettings()")
694 let s:makeep = getpos("'a")
695 let s:regakeep= @a
Bram Moolenaard68071d2006-05-02 22:08:30 +0000696 if exists("&acd")
697 let s:acdkeep = &acd
698 endif
Bram Moolenaar25e2c9e2006-04-27 21:40:34 +0000699 let s:eikeep = &ei
Bram Moolenaare37d50a2008-08-06 17:06:04 +0000700 let s:fenkeep = &l:fen
Bram Moolenaar25e2c9e2006-04-27 21:40:34 +0000701 let s:hidkeep = &hidden
702 let s:ickeep = &ic
Bram Moolenaar143c38c2007-05-10 16:41:10 +0000703 let s:lzkeep = &lz
704 let s:pmkeep = &pm
Bram Moolenaar25e2c9e2006-04-27 21:40:34 +0000705 let s:repkeep = &report
706 let s:vekeep = &ve
Bram Moolenaare37d50a2008-08-06 17:06:04 +0000707 let s:ffkeep = &l:ff
Bram Moolenaar251e1912011-06-19 05:09:16 +0200708 let s:swfkeep = &l:swf
Bram Moolenaard68071d2006-05-02 22:08:30 +0000709 if exists("&acd")
Bram Moolenaar251e1912011-06-19 05:09:16 +0200710 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 +0000711 else
Bram Moolenaar251e1912011-06-19 05:09:16 +0200712 setlocal ei=all ve=all nofen noic report=999 nohid bt= ma lz pm= ff=unix noswf
Bram Moolenaard68071d2006-05-02 22:08:30 +0000713 endif
Bram Moolenaarf2330482008-06-24 20:19:36 +0000714 " vimballs should be in unix format
715 setlocal ff=unix
Bram Moolenaar25e2c9e2006-04-27 21:40:34 +0000716" call Dret("SaveSettings")
717endfun
718
719" ---------------------------------------------------------------------
Bram Moolenaarf2330482008-06-24 20:19:36 +0000720" vimball#RestoreSettings: {{{2
721fun! vimball#RestoreSettings()
Bram Moolenaar25e2c9e2006-04-27 21:40:34 +0000722" call Dfunc("RestoreSettings()")
723 let @a = s:regakeep
Bram Moolenaard68071d2006-05-02 22:08:30 +0000724 if exists("&acd")
725 let &acd = s:acdkeep
726 endif
Bram Moolenaare37d50a2008-08-06 17:06:04 +0000727 let &l:fen = s:fenkeep
Bram Moolenaar25e2c9e2006-04-27 21:40:34 +0000728 let &hidden = s:hidkeep
729 let &ic = s:ickeep
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +0000730 let &lz = s:lzkeep
Bram Moolenaar143c38c2007-05-10 16:41:10 +0000731 let &pm = s:pmkeep
Bram Moolenaar25e2c9e2006-04-27 21:40:34 +0000732 let &report = s:repkeep
733 let &ve = s:vekeep
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +0000734 let &ei = s:eikeep
Bram Moolenaare37d50a2008-08-06 17:06:04 +0000735 let &l:ff = s:ffkeep
Bram Moolenaar25e2c9e2006-04-27 21:40:34 +0000736 if s:makeep[0] != 0
737 " restore mark a
738" call Decho("restore mark-a: makeep=".string(makeep))
739 call setpos("'a",s:makeep)
740 endif
Bram Moolenaard68071d2006-05-02 22:08:30 +0000741 if exists("&acd")
Bram Moolenaarf2330482008-06-24 20:19:36 +0000742 unlet s:acdkeep
Bram Moolenaard68071d2006-05-02 22:08:30 +0000743 endif
Bram Moolenaarf2330482008-06-24 20:19:36 +0000744 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 +0000745" call Dret("RestoreSettings")
746endfun
747
748" ---------------------------------------------------------------------
Bram Moolenaareee697b2006-03-21 21:20:39 +0000749" Modelines: {{{1
750" vim: fdm=marker