blob: 774b798a83dbe37d2b0403a7889d2a0a86fde0f4 [file] [log] [blame]
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +00001" vimball.vim : construct a file containing both paths and files
Christian Brabandtf9ca1392024-02-19 20:37:11 +01002" Maintainer: This runtime file is looking for a new maintainer.
3" Original Author: Charles E. Campbell
4" Date: Apr 11, 2016
Bram Moolenaar03413f42016-04-12 21:07:15 +02005" Version: 37
Bram Moolenaareee697b2006-03-21 21:20:39 +00006" GetLatestVimScripts: 1502 1 :AutoInstall: vimball.vim
Bram Moolenaar03413f42016-04-12 21:07:15 +02007" Copyright: (c) 2004-2011 by Charles E. Campbell
Bram Moolenaareee697b2006-03-21 21:20:39 +00008" The VIM LICENSE applies to Vimball.vim, and Vimball.txt
9" (see |copyright|) except use "Vimball" instead of "Vim".
10" No warranty, express or implied.
11" *** *** Use At-Your-Own-Risk! *** ***
12
13" ---------------------------------------------------------------------
14" Load Once: {{{1
Bram Moolenaar5c736222010-01-06 20:54:52 +010015if &cp || exists("g:loaded_vimball")
Bram Moolenaareee697b2006-03-21 21:20:39 +000016 finish
17endif
Bram Moolenaar03413f42016-04-12 21:07:15 +020018let g:loaded_vimball = "v37"
Bram Moolenaar5c736222010-01-06 20:54:52 +010019if v:version < 702
20 echohl WarningMsg
21 echo "***warning*** this version of vimball needs vim 7.2"
22 echohl Normal
23 finish
24endif
25let s:keepcpo= &cpo
Bram Moolenaareee697b2006-03-21 21:20:39 +000026set cpo&vim
Bram Moolenaarf2330482008-06-24 20:19:36 +000027"DechoTabOn
Bram Moolenaareee697b2006-03-21 21:20:39 +000028
29" =====================================================================
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +000030" Constants: {{{1
31if !exists("s:USAGE")
32 let s:USAGE = 0
33 let s:WARNING = 1
34 let s:ERROR = 2
Bram Moolenaarf2330482008-06-24 20:19:36 +000035
36 " determine if cygwin is in use or not
37 if !exists("g:netrw_cygwin")
38 if has("win32") || has("win95") || has("win64") || has("win16")
39 if &shell =~ '\%(\<bash\>\|\<zsh\>\)\%(\.exe\)\=$'
40 let g:netrw_cygwin= 1
41 else
42 let g:netrw_cygwin= 0
43 endif
44 else
45 let g:netrw_cygwin= 0
46 endif
47 endif
48
49 " set up g:vimball_mkdir if the mkdir() call isn't defined
50 if !exists("*mkdir")
51 if exists("g:netrw_local_mkdir")
52 let g:vimball_mkdir= g:netrw_local_mkdir
53 elseif executable("mkdir")
54 let g:vimball_mkdir= "mkdir"
55 elseif executable("makedir")
56 let g:vimball_mkdir= "makedir"
57 endif
58 if !exists(g:vimball_mkdir)
59 call vimball#ShowMesg(s:WARNING,"(vimball) g:vimball_mkdir undefined")
60 endif
61 endif
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +000062endif
63
64" =====================================================================
Bram Moolenaareee697b2006-03-21 21:20:39 +000065" Functions: {{{1
66
67" ---------------------------------------------------------------------
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +000068" vimball#MkVimball: creates a vimball given a list of paths to files {{{2
Bram Moolenaarf2330482008-06-24 20:19:36 +000069" Input:
70" line1,line2: a range of lines containing paths to files to be included in the vimball
Bram Moolenaar251e1912011-06-19 05:09:16 +020071" writelevel : if true, force a write to filename.vmb, even if it exists
Bram Moolenaarf2330482008-06-24 20:19:36 +000072" (usually accomplished with :MkVimball! ...
Bram Moolenaar251e1912011-06-19 05:09:16 +020073" filename : base name of file to be created (ie. filename.vmb)
74" Output: a filename.vmb using vimball format:
Bram Moolenaareee697b2006-03-21 21:20:39 +000075" path
76" filesize
77" [file]
78" path
79" filesize
80" [file]
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +000081fun! vimball#MkVimball(line1,line2,writelevel,...) range
82" 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 +000083 if a:1 =~ '\.vim$' || a:1 =~ '\.txt$'
Bram Moolenaar251e1912011-06-19 05:09:16 +020084 let vbname= substitute(a:1,'\.\a\{3}$','.vmb','')
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +000085 else
86 let vbname= a:1
87 endif
Bram Moolenaar251e1912011-06-19 05:09:16 +020088 if vbname !~ '\.vmb$'
89 let vbname= vbname.'.vmb'
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +000090 endif
91" call Decho("vbname<".vbname.">")
Bram Moolenaar5c736222010-01-06 20:54:52 +010092 if !a:writelevel && a:1 =~ '[\/]'
93 call vimball#ShowMesg(s:ERROR,"(MkVimball) vimball name<".a:1."> should not include slashes; use ! to insist")
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +000094" call Dret("MkVimball : vimball name<".a:1."> should not include slashes")
95 return
96 endif
Bram Moolenaareee697b2006-03-21 21:20:39 +000097 if !a:writelevel && filereadable(vbname)
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +000098 call vimball#ShowMesg(s:ERROR,"(MkVimball) file<".vbname."> exists; use ! to insist")
Bram Moolenaareee697b2006-03-21 21:20:39 +000099" call Dret("MkVimball : file<".vbname."> already exists; use ! to insist")
100 return
101 endif
102
103 " user option bypass
Bram Moolenaarf2330482008-06-24 20:19:36 +0000104 call vimball#SaveSettings()
Bram Moolenaareee697b2006-03-21 21:20:39 +0000105
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +0000106 if a:0 >= 2
107 " allow user to specify where to get the files
108 let home= expand(a:2)
109 else
110 " use first existing directory from rtp
Bram Moolenaar5c736222010-01-06 20:54:52 +0100111 let home= vimball#VimballHome()
Bram Moolenaarf193fff2006-04-27 00:02:13 +0000112 endif
Bram Moolenaarf193fff2006-04-27 00:02:13 +0000113
114 " save current directory
Bram Moolenaareee697b2006-03-21 21:20:39 +0000115 let curdir = getcwd()
Bram Moolenaarf193fff2006-04-27 00:02:13 +0000116 call s:ChgDir(home)
Bram Moolenaareee697b2006-03-21 21:20:39 +0000117
118 " record current tab, initialize while loop index
119 let curtabnr = tabpagenr()
120 let linenr = a:line1
121" call Decho("curtabnr=".curtabnr)
122
123 while linenr <= a:line2
124 let svfile = getline(linenr)
125" call Decho("svfile<".svfile.">")
126
127 if !filereadable(svfile)
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +0000128 call vimball#ShowMesg(s:ERROR,"unable to read file<".svfile.">")
Bram Moolenaarf193fff2006-04-27 00:02:13 +0000129 call s:ChgDir(curdir)
Bram Moolenaarf2330482008-06-24 20:19:36 +0000130 call vimball#RestoreSettings()
Bram Moolenaareee697b2006-03-21 21:20:39 +0000131" call Dret("MkVimball")
132 return
133 endif
134
135 " create/switch to mkvimball tab
136 if !exists("vbtabnr")
137 tabnew
Bram Moolenaar251e1912011-06-19 05:09:16 +0200138 sil! file Vimball
Bram Moolenaareee697b2006-03-21 21:20:39 +0000139 let vbtabnr= tabpagenr()
140 else
141 exe "tabn ".vbtabnr
142 endif
143
144 let lastline= line("$") + 1
145 if lastline == 2 && getline("$") == ""
Bram Moolenaar03413f42016-04-12 21:07:15 +0200146 call setline(1,'" Vimball Archiver by Charles E. Campbell')
Bram Moolenaareee697b2006-03-21 21:20:39 +0000147 call setline(2,'UseVimball')
148 call setline(3,'finish')
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +0000149 let lastline= line("$") + 1
Bram Moolenaareee697b2006-03-21 21:20:39 +0000150 endif
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +0000151 call setline(lastline ,substitute(svfile,'$',' [[[1',''))
Bram Moolenaareee697b2006-03-21 21:20:39 +0000152 call setline(lastline+1,0)
Bram Moolenaarf193fff2006-04-27 00:02:13 +0000153
154 " write the file from the tab
Bram Moolenaare37d50a2008-08-06 17:06:04 +0000155" call Decho("exe $r ".fnameescape(svfile))
156 exe "$r ".fnameescape(svfile)
Bram Moolenaarf193fff2006-04-27 00:02:13 +0000157
Bram Moolenaareee697b2006-03-21 21:20:39 +0000158 call setline(lastline+1,line("$") - lastline - 1)
159" call Decho("lastline=".lastline." line$=".line("$"))
160
161 " restore to normal tab
162 exe "tabn ".curtabnr
163 let linenr= linenr + 1
164 endwhile
165
166 " write the vimball
167 exe "tabn ".vbtabnr
Bram Moolenaarf193fff2006-04-27 00:02:13 +0000168 call s:ChgDir(curdir)
Bram Moolenaarf2330482008-06-24 20:19:36 +0000169 setlocal ff=unix
Bram Moolenaar8ab561d2006-03-23 22:44:10 +0000170 if a:writelevel
Bram Moolenaare37d50a2008-08-06 17:06:04 +0000171" call Decho("exe w! ".fnameescape(vbname))
172 exe "w! ".fnameescape(vbname)
Bram Moolenaar8ab561d2006-03-23 22:44:10 +0000173 else
Bram Moolenaare37d50a2008-08-06 17:06:04 +0000174" call Decho("exe w ".fnameescape(vbname))
175 exe "w ".fnameescape(vbname)
Bram Moolenaareee697b2006-03-21 21:20:39 +0000176 endif
177" call Decho("Vimball<".vbname."> created")
178 echo "Vimball<".vbname."> created"
179
180 " remove the evidence
181 setlocal nomod bh=wipe
182 exe "tabn ".curtabnr
Bram Moolenaar03413f42016-04-12 21:07:15 +0200183 exe "tabc! ".vbtabnr
Bram Moolenaareee697b2006-03-21 21:20:39 +0000184
185 " restore options
Bram Moolenaarf2330482008-06-24 20:19:36 +0000186 call vimball#RestoreSettings()
Bram Moolenaareee697b2006-03-21 21:20:39 +0000187
188" call Dret("MkVimball")
189endfun
190
191" ---------------------------------------------------------------------
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +0000192" vimball#Vimball: extract and distribute contents from a vimball {{{2
Bram Moolenaarf2330482008-06-24 20:19:36 +0000193" (invoked the the UseVimball command embedded in
194" vimballs' prologue)
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +0000195fun! vimball#Vimball(really,...)
196" call Dfunc("vimball#Vimball(really=".a:really.") a:0=".a:0)
Bram Moolenaareee697b2006-03-21 21:20:39 +0000197
Bram Moolenaare37d50a2008-08-06 17:06:04 +0000198 if v:version < 701 || (v:version == 701 && !exists('*fnameescape'))
Bram Moolenaar251e1912011-06-19 05:09:16 +0200199 echoerr "your vim is missing the fnameescape() function (pls upgrade to vim 7.2 or later)"
200" call Dret("vimball#Vimball : needs 7.1 with patch 299 or later")
Bram Moolenaarf2330482008-06-24 20:19:36 +0000201 return
202 endif
203
Bram Moolenaar5c736222010-01-06 20:54:52 +0100204 if getline(1) !~ '^" Vimball Archiver'
Bram Moolenaareee697b2006-03-21 21:20:39 +0000205 echoerr "(Vimball) The current file does not appear to be a Vimball!"
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +0000206" call Dret("vimball#Vimball")
Bram Moolenaareee697b2006-03-21 21:20:39 +0000207 return
208 endif
209
Bram Moolenaar25e2c9e2006-04-27 21:40:34 +0000210 " set up standard settings
Bram Moolenaarf2330482008-06-24 20:19:36 +0000211 call vimball#SaveSettings()
212 let curtabnr = tabpagenr()
213 let vimballfile = expand("%:tr")
Bram Moolenaareee697b2006-03-21 21:20:39 +0000214
215 " set up vimball tab
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +0000216" call Decho("setting up vimball tab")
Bram Moolenaareee697b2006-03-21 21:20:39 +0000217 tabnew
Bram Moolenaar251e1912011-06-19 05:09:16 +0200218 sil! file Vimball
Bram Moolenaareee697b2006-03-21 21:20:39 +0000219 let vbtabnr= tabpagenr()
220 let didhelp= ""
221
222 " go to vim plugin home
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +0000223 if a:0 > 0
Bram Moolenaar15146672011-10-20 22:22:38 +0200224 " let user specify the directory where the vimball is to be unpacked.
225 " 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 +0000226 let home= expand(a:1)
Bram Moolenaar15146672011-10-20 22:22:38 +0200227 if has("win32") || has("win95") || has("win64") || has("win16")
228 if home !~ '^\a:[/\\]'
229 let home= getcwd().'/'.a:1
230 endif
231 elseif home !~ '^/'
232 let home= getcwd().'/'.a:1
233 endif
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +0000234 else
Bram Moolenaar5c736222010-01-06 20:54:52 +0100235 let home= vimball#VimballHome()
Bram Moolenaarf193fff2006-04-27 00:02:13 +0000236 endif
237" call Decho("home<".home.">")
238
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +0000239 " save current directory and remove older same-named vimball, if any
Bram Moolenaareee697b2006-03-21 21:20:39 +0000240 let curdir = getcwd()
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +0000241" call Decho("home<".home.">")
242" call Decho("curdir<".curdir.">")
243
Bram Moolenaarf193fff2006-04-27 00:02:13 +0000244 call s:ChgDir(home)
Bram Moolenaarf2330482008-06-24 20:19:36 +0000245 let s:ok_unablefind= 1
246 call vimball#RmVimball(vimballfile)
247 unlet s:ok_unablefind
Bram Moolenaarf193fff2006-04-27 00:02:13 +0000248
Bram Moolenaareee697b2006-03-21 21:20:39 +0000249 let linenr = 4
250 let filecnt = 0
251
252 " give title to listing of (extracted) files from Vimball Archive
253 if a:really
Bram Moolenaarf2330482008-06-24 20:19:36 +0000254 echohl Title | echomsg "Vimball Archive" | echohl None
255 else
256 echohl Title | echomsg "Vimball Archive Listing" | echohl None
Bram Moolenaar25e2c9e2006-04-27 21:40:34 +0000257 echohl Statement | echomsg "files would be placed under: ".home | echohl None
Bram Moolenaareee697b2006-03-21 21:20:39 +0000258 endif
259
260 " apportion vimball contents to various files
261" call Decho("exe tabn ".curtabnr)
262 exe "tabn ".curtabnr
263" call Decho("linenr=".linenr." line$=".line("$"))
264 while 1 < linenr && linenr < line("$")
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +0000265 let fname = substitute(getline(linenr),'\t\[\[\[1$','','')
266 let fname = substitute(fname,'\\','/','g')
Bram Moolenaar5c736222010-01-06 20:54:52 +0100267 let fsize = substitute(getline(linenr+1),'^\(\d\+\).\{-}$','\1','')+0
Bram Moolenaar251e1912011-06-19 05:09:16 +0200268 let fenc = substitute(getline(linenr+1),'^\d\+\s*\(\S\{-}\)$','\1','')
Bram Moolenaareee697b2006-03-21 21:20:39 +0000269 let filecnt = filecnt + 1
Bram Moolenaar251e1912011-06-19 05:09:16 +0200270" call Decho("fname<".fname."> fsize=".fsize." filecnt=".filecnt. " fenc=".fenc)
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +0000271
Bram Moolenaareee697b2006-03-21 21:20:39 +0000272 if a:really
273 echomsg "extracted <".fname.">: ".fsize." lines"
274 else
275 echomsg "would extract <".fname.">: ".fsize." lines"
276 endif
Bram Moolenaarf9393ef2006-04-24 19:47:27 +0000277" call Decho("using L#".linenr.": will extract file<".fname.">")
278" call Decho("using L#".(linenr+1).": fsize=".fsize)
Bram Moolenaareee697b2006-03-21 21:20:39 +0000279
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +0000280 " Allow AsNeeded/ directory to take place of plugin/ directory
Bram Moolenaarf2330482008-06-24 20:19:36 +0000281 " when AsNeeded/filename is filereadable or was present in VimballRecord
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +0000282 if fname =~ '\<plugin/'
283 let anfname= substitute(fname,'\<plugin/','AsNeeded/','')
Bram Moolenaar03413f42016-04-12 21:07:15 +0200284 if filereadable(anfname) || (exists("s:VBRstring") && s:VBRstring =~# anfname)
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +0000285" call Decho("using anfname<".anfname."> instead of <".fname.">")
286 let fname= anfname
287 endif
288 endif
289
Bram Moolenaareee697b2006-03-21 21:20:39 +0000290 " make directories if they don't exist yet
Bram Moolenaar25e2c9e2006-04-27 21:40:34 +0000291 if a:really
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +0000292" call Decho("making directories if they don't exist yet (fname<".fname.">)")
293 let fnamebuf= substitute(fname,'\\','/','g')
294 let dirpath = substitute(home,'\\','/','g')
Bram Moolenaar15146672011-10-20 22:22:38 +0200295" call Decho("init: fnamebuf<".fnamebuf.">")
296" call Decho("init: dirpath <".dirpath.">")
Bram Moolenaar25e2c9e2006-04-27 21:40:34 +0000297 while fnamebuf =~ '/'
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +0000298 let dirname = dirpath."/".substitute(fnamebuf,'/.*$','','')
299 let dirpath = dirname
300 let fnamebuf = substitute(fnamebuf,'^.\{-}/\(.*\)$','\1','')
301" call Decho("dirname<".dirname.">")
Bram Moolenaar15146672011-10-20 22:22:38 +0200302" call Decho("dirpath<".dirpath.">")
Bram Moolenaar25e2c9e2006-04-27 21:40:34 +0000303 if !isdirectory(dirname)
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +0000304" call Decho("making <".dirname.">")
Bram Moolenaarf2330482008-06-24 20:19:36 +0000305 if exists("g:vimball_mkdir")
Bram Moolenaar5c736222010-01-06 20:54:52 +0100306 call system(g:vimball_mkdir." ".shellescape(dirname))
Bram Moolenaarf2330482008-06-24 20:19:36 +0000307 else
308 call mkdir(dirname)
309 endif
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +0000310 call s:RecordInVar(home,"rmdir('".dirname."')")
Bram Moolenaar25e2c9e2006-04-27 21:40:34 +0000311 endif
312 endwhile
313 endif
Bram Moolenaarf193fff2006-04-27 00:02:13 +0000314 call s:ChgDir(home)
Bram Moolenaareee697b2006-03-21 21:20:39 +0000315
316 " grab specified qty of lines and place into "a" buffer
Bram Moolenaarf9393ef2006-04-24 19:47:27 +0000317 " (skip over path/filename and qty-lines)
318 let linenr = linenr + 2
319 let lastline = linenr + fsize - 1
320" call Decho("exe ".linenr.",".lastline."yank a")
Bram Moolenaar251e1912011-06-19 05:09:16 +0200321 " no point in handling a zero-length file
322 if lastline >= linenr
323 exe "silent ".linenr.",".lastline."yank a"
Bram Moolenaareee697b2006-03-21 21:20:39 +0000324
Bram Moolenaar251e1912011-06-19 05:09:16 +0200325 " copy "a" buffer into tab
Bram Moolenaareee697b2006-03-21 21:20:39 +0000326" call Decho('copy "a buffer into tab#'.vbtabnr)
Bram Moolenaar251e1912011-06-19 05:09:16 +0200327 exe "tabn ".vbtabnr
328 setlocal ma
329 sil! %d
330 silent put a
331 1
332 sil! d
Bram Moolenaareee697b2006-03-21 21:20:39 +0000333
Bram Moolenaar251e1912011-06-19 05:09:16 +0200334 " write tab to file
335 if a:really
336 let fnamepath= home."/".fname
Bram Moolenaarf2330482008-06-24 20:19:36 +0000337" call Decho("exe w! ".fnameescape(fnamepath))
Bram Moolenaar5c736222010-01-06 20:54:52 +0100338 if fenc != ""
339 exe "silent w! ++enc=".fnameescape(fenc)." ".fnameescape(fnamepath)
340 else
341 exe "silent w! ".fnameescape(fnamepath)
342 endif
343 echo "wrote ".fnameescape(fnamepath)
344 call s:RecordInVar(home,"call delete('".fnamepath."')")
Bram Moolenaar251e1912011-06-19 05:09:16 +0200345 endif
Bram Moolenaareee697b2006-03-21 21:20:39 +0000346
Bram Moolenaar251e1912011-06-19 05:09:16 +0200347 " return to tab with vimball
Bram Moolenaareee697b2006-03-21 21:20:39 +0000348" call Decho("exe tabn ".curtabnr)
Bram Moolenaar251e1912011-06-19 05:09:16 +0200349 exe "tabn ".curtabnr
Bram Moolenaarf9393ef2006-04-24 19:47:27 +0000350
Bram Moolenaar3e496b02016-09-25 22:11:48 +0200351 " set up help if it's a doc/*.txt file
Bram Moolenaarf9393ef2006-04-24 19:47:27 +0000352" call Decho("didhelp<".didhelp."> fname<".fname.">")
Bram Moolenaar251e1912011-06-19 05:09:16 +0200353 if a:really && didhelp == "" && fname =~ 'doc/[^/]\+\.\(txt\|..x\)$'
354 let didhelp= substitute(fname,'^\(.*\<doc\)[/\\][^.]*\.\(txt\|..x\)$','\1','')
Bram Moolenaarf9393ef2006-04-24 19:47:27 +0000355" call Decho("didhelp<".didhelp.">")
Bram Moolenaar251e1912011-06-19 05:09:16 +0200356 endif
Bram Moolenaarf9393ef2006-04-24 19:47:27 +0000357 endif
358
359 " update for next file
Bram Moolenaarf2330482008-06-24 20:19:36 +0000360" call Decho("update linenr= [linenr=".linenr."] + [fsize=".fsize."] = ".(linenr+fsize))
361 let linenr= linenr + fsize
Bram Moolenaareee697b2006-03-21 21:20:39 +0000362 endwhile
363
364 " set up help
365" call Decho("about to set up help: didhelp<".didhelp.">")
366 if didhelp != ""
Bram Moolenaare37d50a2008-08-06 17:06:04 +0000367 let htpath= home."/".didhelp
Bram Moolenaarf193fff2006-04-27 00:02:13 +0000368" call Decho("exe helptags ".htpath)
Bram Moolenaare37d50a2008-08-06 17:06:04 +0000369 exe "helptags ".fnameescape(htpath)
Bram Moolenaarf193fff2006-04-27 00:02:13 +0000370 echo "did helptags"
Bram Moolenaareee697b2006-03-21 21:20:39 +0000371 endif
372
373 " make sure a "Press ENTER..." prompt appears to keep the messages showing!
Bram Moolenaar8ab561d2006-03-23 22:44:10 +0000374 while filecnt <= &ch
Bram Moolenaareee697b2006-03-21 21:20:39 +0000375 echomsg " "
376 let filecnt= filecnt + 1
377 endwhile
378
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +0000379 " record actions in <.VimballRecord>
380 call s:RecordInFile(home)
381
Bram Moolenaareee697b2006-03-21 21:20:39 +0000382 " restore events, delete tab and buffer
Bram Moolenaar03413f42016-04-12 21:07:15 +0200383 exe "sil! tabn ".vbtabnr
Bram Moolenaareee697b2006-03-21 21:20:39 +0000384 setlocal nomod bh=wipe
Bram Moolenaar03413f42016-04-12 21:07:15 +0200385 exe "sil! tabn ".curtabnr
386 exe "sil! tabc! ".vbtabnr
Bram Moolenaarf2330482008-06-24 20:19:36 +0000387 call vimball#RestoreSettings()
Bram Moolenaarf193fff2006-04-27 00:02:13 +0000388 call s:ChgDir(curdir)
Bram Moolenaareee697b2006-03-21 21:20:39 +0000389
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +0000390" call Dret("vimball#Vimball")
391endfun
392
393" ---------------------------------------------------------------------
394" vimball#RmVimball: remove any files, remove any directories made by any {{{2
395" previous vimball extraction based on a file of the current
396" name.
397" Usage: RmVimball (assume current file is a vimball; remove)
398" RmVimball vimballname
399fun! vimball#RmVimball(...)
400" call Dfunc("vimball#RmVimball() a:0=".a:0)
401 if exists("g:vimball_norecord")
402" call Dret("vimball#RmVimball : (g:vimball_norecord)")
403 return
404 endif
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +0000405
406 if a:0 == 0
Bram Moolenaarf2330482008-06-24 20:19:36 +0000407 let curfile= expand("%:tr")
408" call Decho("case a:0=0: curfile<".curfile."> (used expand(%:tr))")
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +0000409 else
410 if a:1 =~ '[\/]'
411 call vimball#ShowMesg(s:USAGE,"RmVimball vimballname [path]")
412" call Dret("vimball#RmVimball : suspect a:1<".a:1.">")
413 return
414 endif
415 let curfile= a:1
Bram Moolenaarf2330482008-06-24 20:19:36 +0000416" call Decho("case a:0=".a:0.": curfile<".curfile.">")
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +0000417 endif
Bram Moolenaar251e1912011-06-19 05:09:16 +0200418 if curfile =~ '\.vmb$'
419 let curfile= substitute(curfile,'\.vmb','','')
420 elseif curfile =~ '\.vba$'
Bram Moolenaarf2330482008-06-24 20:19:36 +0000421 let curfile= substitute(curfile,'\.vba','','')
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +0000422 endif
423 if a:0 >= 2
424 let home= expand(a:2)
425 else
Bram Moolenaar5c736222010-01-06 20:54:52 +0100426 let home= vimball#VimballHome()
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +0000427 endif
428 let curdir = getcwd()
429" call Decho("home <".home.">")
430" call Decho("curfile<".curfile.">")
431" call Decho("curdir <".curdir.">")
432
433 call s:ChgDir(home)
434 if filereadable(".VimballRecord")
435" call Decho(".VimballRecord is readable")
436" call Decho("curfile<".curfile.">")
437 keepalt keepjumps 1split
Bram Moolenaar251e1912011-06-19 05:09:16 +0200438 sil! keepalt keepjumps e .VimballRecord
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +0000439 let keepsrch= @/
Bram Moolenaar5c736222010-01-06 20:54:52 +0100440" call Decho('search for ^\M'.curfile.'.\m: ')
Bram Moolenaar251e1912011-06-19 05:09:16 +0200441" call Decho('search for ^\M'.curfile.'.\m{vba|vmb}: ')
442" call Decho('search for ^\M'.curfile.'\m[-0-9.]*\.{vba|vmb}: ')
Bram Moolenaar5c736222010-01-06 20:54:52 +0100443 if search('^\M'.curfile."\m: ".'cw')
Bram Moolenaarf2330482008-06-24 20:19:36 +0000444 let foundit= 1
Bram Moolenaar251e1912011-06-19 05:09:16 +0200445 elseif search('^\M'.curfile.".\mvmb: ",'cw')
446 let foundit= 2
447 elseif search('^\M'.curfile.'\m[-0-9.]*\.vmb: ','cw')
448 let foundit= 2
Bram Moolenaar5c736222010-01-06 20:54:52 +0100449 elseif search('^\M'.curfile.".\mvba: ",'cw')
Bram Moolenaarf2330482008-06-24 20:19:36 +0000450 let foundit= 1
Bram Moolenaar5c736222010-01-06 20:54:52 +0100451 elseif search('^\M'.curfile.'\m[-0-9.]*\.vba: ','cw')
Bram Moolenaarf2330482008-06-24 20:19:36 +0000452 let foundit= 1
453 else
454 let foundit = 0
455 endif
456 if foundit
Bram Moolenaar251e1912011-06-19 05:09:16 +0200457 if foundit == 1
458 let exestring = substitute(getline("."),'^\M'.curfile.'\m\S\{-}\.vba: ','','')
459 else
460 let exestring = substitute(getline("."),'^\M'.curfile.'\m\S\{-}\.vmb: ','','')
461 endif
Bram Moolenaarf2330482008-06-24 20:19:36 +0000462 let s:VBRstring= substitute(exestring,'call delete(','','g')
463 let s:VBRstring= substitute(s:VBRstring,"[')]",'','g')
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +0000464" call Decho("exe ".exestring)
Bram Moolenaar251e1912011-06-19 05:09:16 +0200465 sil! keepalt keepjumps exe exestring
466 sil! keepalt keepjumps d
Bram Moolenaarf2330482008-06-24 20:19:36 +0000467 let exestring= strlen(substitute(exestring,'call delete(.\{-})|\=',"D","g"))
468" call Decho("exestring<".exestring.">")
469 echomsg "removed ".exestring." files"
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +0000470 else
Bram Moolenaarf2330482008-06-24 20:19:36 +0000471 let s:VBRstring= ''
Bram Moolenaar251e1912011-06-19 05:09:16 +0200472 let curfile = substitute(curfile,'\.vmb','','')
Bram Moolenaarf2330482008-06-24 20:19:36 +0000473" call Decho("unable to find <".curfile."> in .VimballRecord")
474 if !exists("s:ok_unablefind")
475 call vimball#ShowMesg(s:WARNING,"(RmVimball) unable to find <".curfile."> in .VimballRecord")
476 endif
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +0000477 endif
Bram Moolenaar251e1912011-06-19 05:09:16 +0200478 sil! keepalt keepjumps g/^\s*$/d
479 sil! keepalt keepjumps wq!
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +0000480 let @/= keepsrch
481 endif
482 call s:ChgDir(curdir)
483
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +0000484" call Dret("vimball#RmVimball")
Bram Moolenaareee697b2006-03-21 21:20:39 +0000485endfun
486
Bram Moolenaar551dbcc2006-04-25 22:13:59 +0000487" ---------------------------------------------------------------------
488" vimball#Decompress: attempts to automatically decompress vimballs {{{2
Bram Moolenaar5c736222010-01-06 20:54:52 +0100489fun! vimball#Decompress(fname,...)
490" call Dfunc("Decompress(fname<".a:fname.">) a:0=".a:0)
Bram Moolenaar551dbcc2006-04-25 22:13:59 +0000491
492 " decompression:
493 if expand("%") =~ '.*\.gz' && executable("gunzip")
Bram Moolenaarf2330482008-06-24 20:19:36 +0000494 " handle *.gz with gunzip
Bram Moolenaar5c736222010-01-06 20:54:52 +0100495 silent exe "!gunzip ".shellescape(a:fname)
Bram Moolenaarf2330482008-06-24 20:19:36 +0000496 if v:shell_error != 0
497 call vimball#ShowMesg(s:WARNING,"(vimball#Decompress) gunzip may have failed with <".a:fname.">")
498 endif
Bram Moolenaar551dbcc2006-04-25 22:13:59 +0000499 let fname= substitute(a:fname,'\.gz$','','')
Bram Moolenaarf193fff2006-04-27 00:02:13 +0000500 exe "e ".escape(fname,' \')
Bram Moolenaar5c736222010-01-06 20:54:52 +0100501 if a:0 == 0| call vimball#ShowMesg(s:USAGE,"Source this file to extract it! (:so %)") | endif
Bram Moolenaarf2330482008-06-24 20:19:36 +0000502
503 elseif expand("%") =~ '.*\.gz' && executable("gzip")
504 " handle *.gz with gzip -d
Bram Moolenaar5c736222010-01-06 20:54:52 +0100505 silent exe "!gzip -d ".shellescape(a:fname)
Bram Moolenaarf2330482008-06-24 20:19:36 +0000506 if v:shell_error != 0
507 call vimball#ShowMesg(s:WARNING,'(vimball#Decompress) "gzip -d" may have failed with <'.a:fname.">")
508 endif
509 let fname= substitute(a:fname,'\.gz$','','')
510 exe "e ".escape(fname,' \')
Bram Moolenaar5c736222010-01-06 20:54:52 +0100511 if a:0 == 0| call vimball#ShowMesg(s:USAGE,"Source this file to extract it! (:so %)") | endif
Bram Moolenaarf2330482008-06-24 20:19:36 +0000512
Bram Moolenaar551dbcc2006-04-25 22:13:59 +0000513 elseif expand("%") =~ '.*\.bz2' && executable("bunzip2")
Bram Moolenaarf2330482008-06-24 20:19:36 +0000514 " handle *.bz2 with bunzip2
Bram Moolenaar5c736222010-01-06 20:54:52 +0100515 silent exe "!bunzip2 ".shellescape(a:fname)
Bram Moolenaarf2330482008-06-24 20:19:36 +0000516 if v:shell_error != 0
517 call vimball#ShowMesg(s:WARNING,"(vimball#Decompress) bunzip2 may have failed with <".a:fname.">")
518 endif
Bram Moolenaar551dbcc2006-04-25 22:13:59 +0000519 let fname= substitute(a:fname,'\.bz2$','','')
Bram Moolenaarf193fff2006-04-27 00:02:13 +0000520 exe "e ".escape(fname,' \')
Bram Moolenaar5c736222010-01-06 20:54:52 +0100521 if a:0 == 0| call vimball#ShowMesg(s:USAGE,"Source this file to extract it! (:so %)") | endif
Bram Moolenaarf2330482008-06-24 20:19:36 +0000522
523 elseif expand("%") =~ '.*\.bz2' && executable("bzip2")
524 " handle *.bz2 with bzip2 -d
Bram Moolenaar5c736222010-01-06 20:54:52 +0100525 silent exe "!bzip2 -d ".shellescape(a:fname)
Bram Moolenaarf2330482008-06-24 20:19:36 +0000526 if v:shell_error != 0
527 call vimball#ShowMesg(s:WARNING,'(vimball#Decompress) "bzip2 -d" may have failed with <'.a:fname.">")
528 endif
529 let fname= substitute(a:fname,'\.bz2$','','')
530 exe "e ".escape(fname,' \')
Bram Moolenaar5c736222010-01-06 20:54:52 +0100531 if a:0 == 0| call vimball#ShowMesg(s:USAGE,"Source this file to extract it! (:so %)") | endif
Bram Moolenaarf2330482008-06-24 20:19:36 +0000532
Bram Moolenaar551dbcc2006-04-25 22:13:59 +0000533 elseif expand("%") =~ '.*\.zip' && executable("unzip")
Bram Moolenaarf2330482008-06-24 20:19:36 +0000534 " handle *.zip with unzip
Bram Moolenaar5c736222010-01-06 20:54:52 +0100535 silent exe "!unzip ".shellescape(a:fname)
Bram Moolenaarf2330482008-06-24 20:19:36 +0000536 if v:shell_error != 0
537 call vimball#ShowMesg(s:WARNING,"(vimball#Decompress) unzip may have failed with <".a:fname.">")
538 endif
Bram Moolenaar551dbcc2006-04-25 22:13:59 +0000539 let fname= substitute(a:fname,'\.zip$','','')
Bram Moolenaarf193fff2006-04-27 00:02:13 +0000540 exe "e ".escape(fname,' \')
Bram Moolenaar5c736222010-01-06 20:54:52 +0100541 if a:0 == 0| call vimball#ShowMesg(s:USAGE,"Source this file to extract it! (:so %)") | endif
Bram Moolenaar551dbcc2006-04-25 22:13:59 +0000542 endif
Bram Moolenaarf2330482008-06-24 20:19:36 +0000543
Bram Moolenaar5c736222010-01-06 20:54:52 +0100544 if a:0 == 0| setlocal noma bt=nofile fmr=[[[,]]] fdm=marker | endif
Bram Moolenaar551dbcc2006-04-25 22:13:59 +0000545
546" call Dret("Decompress")
547endfun
548
Bram Moolenaarf193fff2006-04-27 00:02:13 +0000549" ---------------------------------------------------------------------
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +0000550" vimball#ShowMesg: {{{2
551fun! vimball#ShowMesg(level,msg)
552" call Dfunc("vimball#ShowMesg(level=".a:level." msg<".a:msg.">)")
Bram Moolenaar5c736222010-01-06 20:54:52 +0100553
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +0000554 let rulerkeep = &ruler
555 let showcmdkeep = &showcmd
556 set noruler noshowcmd
557 redraw!
558
Bram Moolenaar03413f42016-04-12 21:07:15 +0200559 if &fo =~# '[ta]'
Bram Moolenaar5c736222010-01-06 20:54:52 +0100560 echomsg "***vimball*** ".a:msg
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +0000561 else
562 if a:level == s:WARNING || a:level == s:USAGE
563 echohl WarningMsg
564 elseif a:level == s:ERROR
565 echohl Error
566 endif
Bram Moolenaar5c736222010-01-06 20:54:52 +0100567 echomsg "***vimball*** ".a:msg
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +0000568 echohl None
569 endif
570
571 if a:level != s:USAGE
572 call inputsave()|let ok= input("Press <cr> to continue")|call inputrestore()
573 endif
574
575 let &ruler = rulerkeep
576 let &showcmd = showcmdkeep
577
578" call Dret("vimball#ShowMesg")
579endfun
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +0000580" =====================================================================
581" s:ChgDir: change directory (in spite of Windoze) {{{2
Bram Moolenaarf193fff2006-04-27 00:02:13 +0000582fun! s:ChgDir(newdir)
583" call Dfunc("ChgDir(newdir<".a:newdir.">)")
584 if (has("win32") || has("win95") || has("win64") || has("win16"))
Bram Moolenaar15146672011-10-20 22:22:38 +0200585 try
586 exe 'silent cd '.fnameescape(substitute(a:newdir,'/','\\','g'))
587 catch /^Vim\%((\a\+)\)\=:E/
588 call mkdir(fnameescape(substitute(a:newdir,'/','\\','g')))
589 exe 'silent cd '.fnameescape(substitute(a:newdir,'/','\\','g'))
590 endtry
Bram Moolenaarf193fff2006-04-27 00:02:13 +0000591 else
Bram Moolenaar15146672011-10-20 22:22:38 +0200592 try
593 exe 'silent cd '.fnameescape(a:newdir)
594 catch /^Vim\%((\a\+)\)\=:E/
595 call mkdir(fnameescape(a:newdir))
596 exe 'silent cd '.fnameescape(a:newdir)
597 endtry
Bram Moolenaarf193fff2006-04-27 00:02:13 +0000598 endif
Bram Moolenaarf2330482008-06-24 20:19:36 +0000599" call Dret("ChgDir : curdir<".getcwd().">")
Bram Moolenaarf193fff2006-04-27 00:02:13 +0000600endfun
601
602" ---------------------------------------------------------------------
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +0000603" s:RecordInVar: record a un-vimball command in the .VimballRecord file {{{2
604fun! s:RecordInVar(home,cmd)
605" call Dfunc("RecordInVar(home<".a:home."> cmd<".a:cmd.">)")
606 if a:cmd =~ '^rmdir'
607" if !exists("s:recorddir")
608" let s:recorddir= substitute(a:cmd,'^rmdir',"call s:Rmdir",'')
609" else
610" let s:recorddir= s:recorddir."|".substitute(a:cmd,'^rmdir',"call s:Rmdir",'')
611" endif
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +0000612 elseif !exists("s:recordfile")
613 let s:recordfile= a:cmd
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +0000614 else
615 let s:recordfile= s:recordfile."|".a:cmd
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +0000616 endif
Bram Moolenaarf2330482008-06-24 20:19:36 +0000617" call Dret("RecordInVar : s:recordfile<".(exists("s:recordfile")? s:recordfile : "")."> s:recorddir<".(exists("s:recorddir")? s:recorddir : "").">")
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +0000618endfun
619
620" ---------------------------------------------------------------------
621" s:RecordInFile: {{{2
622fun! s:RecordInFile(home)
Bram Moolenaarf2330482008-06-24 20:19:36 +0000623" call Dfunc("s:RecordInFile()")
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +0000624 if exists("g:vimball_norecord")
Bram Moolenaarf2330482008-06-24 20:19:36 +0000625" call Dret("s:RecordInFile : g:vimball_norecord")
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +0000626 return
627 endif
628
629 if exists("s:recordfile") || exists("s:recorddir")
630 let curdir= getcwd()
631 call s:ChgDir(a:home)
632 keepalt keepjumps 1split
Bram Moolenaarf2330482008-06-24 20:19:36 +0000633
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +0000634 let cmd= expand("%:tr").": "
Bram Moolenaarf2330482008-06-24 20:19:36 +0000635" call Decho("cmd<".cmd.">")
636
Bram Moolenaar251e1912011-06-19 05:09:16 +0200637 sil! keepalt keepjumps e .VimballRecord
Bram Moolenaarf2330482008-06-24 20:19:36 +0000638 setlocal ma
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +0000639 $
640 if exists("s:recordfile") && exists("s:recorddir")
641 let cmd= cmd.s:recordfile."|".s:recorddir
642 elseif exists("s:recorddir")
643 let cmd= cmd.s:recorddir
644 elseif exists("s:recordfile")
645 let cmd= cmd.s:recordfile
646 else
Bram Moolenaarf2330482008-06-24 20:19:36 +0000647" call Dret("s:RecordInFile : neither recordfile nor recorddir exist")
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +0000648 return
649 endif
Bram Moolenaarf2330482008-06-24 20:19:36 +0000650" call Decho("cmd<".cmd.">")
651
652 " put command into buffer, write .VimballRecord `file
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +0000653 keepalt keepjumps put=cmd
Bram Moolenaar251e1912011-06-19 05:09:16 +0200654 sil! keepalt keepjumps g/^\s*$/d
655 sil! keepalt keepjumps wq!
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +0000656 call s:ChgDir(curdir)
Bram Moolenaarf2330482008-06-24 20:19:36 +0000657
658 if exists("s:recorddir")
659" call Decho("unlet s:recorddir<".s:recorddir.">")
660 unlet s:recorddir
661 endif
662 if exists("s:recordfile")
663" call Decho("unlet s:recordfile<".s:recordfile.">")
664 unlet s:recordfile
665 endif
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +0000666 else
667" call Decho("s:record[file|dir] doesn't exist")
668 endif
669
Bram Moolenaarf2330482008-06-24 20:19:36 +0000670" call Dret("s:RecordInFile")
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +0000671endfun
672
673" ---------------------------------------------------------------------
Bram Moolenaar5c736222010-01-06 20:54:52 +0100674" vimball#VimballHome: determine/get home directory path (usually from rtp) {{{2
675fun! vimball#VimballHome()
676" call Dfunc("vimball#VimballHome()")
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +0000677 if exists("g:vimball_home")
678 let home= g:vimball_home
679 else
680 " go to vim plugin home
681 for home in split(&rtp,',') + ['']
682 if isdirectory(home) && filewritable(home) | break | endif
Bram Moolenaarf2330482008-06-24 20:19:36 +0000683 let basehome= substitute(home,'[/\\]\.vim$','','')
684 if isdirectory(basehome) && filewritable(basehome)
685 let home= basehome."/.vim"
686 break
687 endif
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +0000688 endfor
689 if home == ""
690 " just pick the first directory
691 let home= substitute(&rtp,',.*$','','')
692 endif
693 if (has("win32") || has("win95") || has("win64") || has("win16"))
694 let home= substitute(home,'/','\\','g')
695 endif
696 endif
Bram Moolenaarf2330482008-06-24 20:19:36 +0000697 " insure that the home directory exists
698" call Decho("picked home<".home.">")
699 if !isdirectory(home)
700 if exists("g:vimball_mkdir")
701" 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 +0100702" call Decho("system(".g:vimball_mkdir." ".shellescape(home).")")
703 call system(g:vimball_mkdir." ".shellescape(home))
Bram Moolenaarf2330482008-06-24 20:19:36 +0000704 else
705" call Decho("home<".home."> isn't a directory -- making it now with mkdir()")
706 call mkdir(home)
707 endif
708 endif
Bram Moolenaar5c736222010-01-06 20:54:52 +0100709" call Dret("vimball#VimballHome <".home.">")
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +0000710 return home
Bram Moolenaarf193fff2006-04-27 00:02:13 +0000711endfun
712
713" ---------------------------------------------------------------------
Bram Moolenaarf2330482008-06-24 20:19:36 +0000714" vimball#SaveSettings: {{{2
715fun! vimball#SaveSettings()
Bram Moolenaar25e2c9e2006-04-27 21:40:34 +0000716" call Dfunc("SaveSettings()")
717 let s:makeep = getpos("'a")
718 let s:regakeep= @a
Bram Moolenaar03413f42016-04-12 21:07:15 +0200719 if exists("+acd")
Bram Moolenaard68071d2006-05-02 22:08:30 +0000720 let s:acdkeep = &acd
721 endif
Bram Moolenaar25e2c9e2006-04-27 21:40:34 +0000722 let s:eikeep = &ei
Bram Moolenaare37d50a2008-08-06 17:06:04 +0000723 let s:fenkeep = &l:fen
Bram Moolenaar25e2c9e2006-04-27 21:40:34 +0000724 let s:hidkeep = &hidden
725 let s:ickeep = &ic
Bram Moolenaar143c38c2007-05-10 16:41:10 +0000726 let s:lzkeep = &lz
727 let s:pmkeep = &pm
Bram Moolenaar25e2c9e2006-04-27 21:40:34 +0000728 let s:repkeep = &report
729 let s:vekeep = &ve
Bram Moolenaare37d50a2008-08-06 17:06:04 +0000730 let s:ffkeep = &l:ff
Bram Moolenaar251e1912011-06-19 05:09:16 +0200731 let s:swfkeep = &l:swf
Bram Moolenaar03413f42016-04-12 21:07:15 +0200732 if exists("+acd")
Bram Moolenaar251e1912011-06-19 05:09:16 +0200733 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 +0000734 else
Bram Moolenaar251e1912011-06-19 05:09:16 +0200735 setlocal ei=all ve=all nofen noic report=999 nohid bt= ma lz pm= ff=unix noswf
Bram Moolenaard68071d2006-05-02 22:08:30 +0000736 endif
Bram Moolenaarf2330482008-06-24 20:19:36 +0000737 " vimballs should be in unix format
738 setlocal ff=unix
Bram Moolenaar25e2c9e2006-04-27 21:40:34 +0000739" call Dret("SaveSettings")
740endfun
741
742" ---------------------------------------------------------------------
Bram Moolenaarf2330482008-06-24 20:19:36 +0000743" vimball#RestoreSettings: {{{2
744fun! vimball#RestoreSettings()
Bram Moolenaar25e2c9e2006-04-27 21:40:34 +0000745" call Dfunc("RestoreSettings()")
746 let @a = s:regakeep
Bram Moolenaar03413f42016-04-12 21:07:15 +0200747 if exists("+acd")
Bram Moolenaard68071d2006-05-02 22:08:30 +0000748 let &acd = s:acdkeep
749 endif
Bram Moolenaare37d50a2008-08-06 17:06:04 +0000750 let &l:fen = s:fenkeep
Bram Moolenaar25e2c9e2006-04-27 21:40:34 +0000751 let &hidden = s:hidkeep
752 let &ic = s:ickeep
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +0000753 let &lz = s:lzkeep
Bram Moolenaar143c38c2007-05-10 16:41:10 +0000754 let &pm = s:pmkeep
Bram Moolenaar25e2c9e2006-04-27 21:40:34 +0000755 let &report = s:repkeep
756 let &ve = s:vekeep
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +0000757 let &ei = s:eikeep
Bram Moolenaare37d50a2008-08-06 17:06:04 +0000758 let &l:ff = s:ffkeep
Bram Moolenaar25e2c9e2006-04-27 21:40:34 +0000759 if s:makeep[0] != 0
760 " restore mark a
761" call Decho("restore mark-a: makeep=".string(makeep))
762 call setpos("'a",s:makeep)
763 endif
Bram Moolenaar03413f42016-04-12 21:07:15 +0200764 if exists("+acd")
Bram Moolenaarf2330482008-06-24 20:19:36 +0000765 unlet s:acdkeep
Bram Moolenaard68071d2006-05-02 22:08:30 +0000766 endif
Bram Moolenaarf2330482008-06-24 20:19:36 +0000767 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 +0000768" call Dret("RestoreSettings")
769endfun
770
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100771let &cpo = s:keepcpo
772unlet s:keepcpo
773
Bram Moolenaar25e2c9e2006-04-27 21:40:34 +0000774" ---------------------------------------------------------------------
Bram Moolenaareee697b2006-03-21 21:20:39 +0000775" Modelines: {{{1
776" vim: fdm=marker