blob: 6456984411c270b1bb234fe88acc646b5df83d8d [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
Jim Zhou56957ed2025-02-28 18:06:14 +01005" Version: 37 (with modifications from the Vim Project)
Bram Moolenaareee697b2006-03-21 21:20:39 +00006" GetLatestVimScripts: 1502 1 :AutoInstall: vimball.vim
Jim Zhou56957ed2025-02-28 18:06:14 +01007" Last Change:
8" 2025 Feb 28 by Vim Project: add support for bzip3 (#16755)
Bram Moolenaar03413f42016-04-12 21:07:15 +02009" Copyright: (c) 2004-2011 by Charles E. Campbell
Bram Moolenaareee697b2006-03-21 21:20:39 +000010" The VIM LICENSE applies to Vimball.vim, and Vimball.txt
11" (see |copyright|) except use "Vimball" instead of "Vim".
12" No warranty, express or implied.
13" *** *** Use At-Your-Own-Risk! *** ***
14
15" ---------------------------------------------------------------------
16" Load Once: {{{1
Bram Moolenaar5c736222010-01-06 20:54:52 +010017if &cp || exists("g:loaded_vimball")
Bram Moolenaareee697b2006-03-21 21:20:39 +000018 finish
19endif
Bram Moolenaar03413f42016-04-12 21:07:15 +020020let g:loaded_vimball = "v37"
Bram Moolenaar5c736222010-01-06 20:54:52 +010021if v:version < 702
22 echohl WarningMsg
23 echo "***warning*** this version of vimball needs vim 7.2"
24 echohl Normal
25 finish
26endif
27let s:keepcpo= &cpo
Bram Moolenaareee697b2006-03-21 21:20:39 +000028set cpo&vim
Bram Moolenaarf2330482008-06-24 20:19:36 +000029"DechoTabOn
Bram Moolenaareee697b2006-03-21 21:20:39 +000030
31" =====================================================================
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +000032" Constants: {{{1
33if !exists("s:USAGE")
34 let s:USAGE = 0
35 let s:WARNING = 1
36 let s:ERROR = 2
Bram Moolenaarf2330482008-06-24 20:19:36 +000037
38 " determine if cygwin is in use or not
39 if !exists("g:netrw_cygwin")
40 if has("win32") || has("win95") || has("win64") || has("win16")
41 if &shell =~ '\%(\<bash\>\|\<zsh\>\)\%(\.exe\)\=$'
42 let g:netrw_cygwin= 1
43 else
44 let g:netrw_cygwin= 0
45 endif
46 else
47 let g:netrw_cygwin= 0
48 endif
49 endif
50
51 " set up g:vimball_mkdir if the mkdir() call isn't defined
52 if !exists("*mkdir")
53 if exists("g:netrw_local_mkdir")
54 let g:vimball_mkdir= g:netrw_local_mkdir
55 elseif executable("mkdir")
56 let g:vimball_mkdir= "mkdir"
57 elseif executable("makedir")
58 let g:vimball_mkdir= "makedir"
59 endif
60 if !exists(g:vimball_mkdir)
61 call vimball#ShowMesg(s:WARNING,"(vimball) g:vimball_mkdir undefined")
62 endif
63 endif
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +000064endif
65
66" =====================================================================
Bram Moolenaareee697b2006-03-21 21:20:39 +000067" Functions: {{{1
68
69" ---------------------------------------------------------------------
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +000070" vimball#MkVimball: creates a vimball given a list of paths to files {{{2
Bram Moolenaarf2330482008-06-24 20:19:36 +000071" Input:
72" line1,line2: a range of lines containing paths to files to be included in the vimball
Bram Moolenaar251e1912011-06-19 05:09:16 +020073" writelevel : if true, force a write to filename.vmb, even if it exists
Bram Moolenaarf2330482008-06-24 20:19:36 +000074" (usually accomplished with :MkVimball! ...
Bram Moolenaar251e1912011-06-19 05:09:16 +020075" filename : base name of file to be created (ie. filename.vmb)
76" Output: a filename.vmb using vimball format:
Bram Moolenaareee697b2006-03-21 21:20:39 +000077" path
78" filesize
79" [file]
80" path
81" filesize
82" [file]
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +000083fun! vimball#MkVimball(line1,line2,writelevel,...) range
84" 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 +000085 if a:1 =~ '\.vim$' || a:1 =~ '\.txt$'
Bram Moolenaar251e1912011-06-19 05:09:16 +020086 let vbname= substitute(a:1,'\.\a\{3}$','.vmb','')
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +000087 else
88 let vbname= a:1
89 endif
Bram Moolenaar251e1912011-06-19 05:09:16 +020090 if vbname !~ '\.vmb$'
91 let vbname= vbname.'.vmb'
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +000092 endif
93" call Decho("vbname<".vbname.">")
Bram Moolenaar5c736222010-01-06 20:54:52 +010094 if !a:writelevel && a:1 =~ '[\/]'
95 call vimball#ShowMesg(s:ERROR,"(MkVimball) vimball name<".a:1."> should not include slashes; use ! to insist")
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +000096" call Dret("MkVimball : vimball name<".a:1."> should not include slashes")
97 return
98 endif
Bram Moolenaareee697b2006-03-21 21:20:39 +000099 if !a:writelevel && filereadable(vbname)
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +0000100 call vimball#ShowMesg(s:ERROR,"(MkVimball) file<".vbname."> exists; use ! to insist")
Bram Moolenaareee697b2006-03-21 21:20:39 +0000101" call Dret("MkVimball : file<".vbname."> already exists; use ! to insist")
102 return
103 endif
104
105 " user option bypass
Bram Moolenaarf2330482008-06-24 20:19:36 +0000106 call vimball#SaveSettings()
Bram Moolenaareee697b2006-03-21 21:20:39 +0000107
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +0000108 if a:0 >= 2
109 " allow user to specify where to get the files
110 let home= expand(a:2)
111 else
112 " use first existing directory from rtp
Bram Moolenaar5c736222010-01-06 20:54:52 +0100113 let home= vimball#VimballHome()
Bram Moolenaarf193fff2006-04-27 00:02:13 +0000114 endif
Bram Moolenaarf193fff2006-04-27 00:02:13 +0000115
116 " save current directory
Bram Moolenaareee697b2006-03-21 21:20:39 +0000117 let curdir = getcwd()
Bram Moolenaarf193fff2006-04-27 00:02:13 +0000118 call s:ChgDir(home)
Bram Moolenaareee697b2006-03-21 21:20:39 +0000119
120 " record current tab, initialize while loop index
121 let curtabnr = tabpagenr()
122 let linenr = a:line1
123" call Decho("curtabnr=".curtabnr)
124
125 while linenr <= a:line2
126 let svfile = getline(linenr)
127" call Decho("svfile<".svfile.">")
128
129 if !filereadable(svfile)
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +0000130 call vimball#ShowMesg(s:ERROR,"unable to read file<".svfile.">")
Bram Moolenaarf193fff2006-04-27 00:02:13 +0000131 call s:ChgDir(curdir)
Bram Moolenaarf2330482008-06-24 20:19:36 +0000132 call vimball#RestoreSettings()
Bram Moolenaareee697b2006-03-21 21:20:39 +0000133" call Dret("MkVimball")
134 return
135 endif
136
137 " create/switch to mkvimball tab
138 if !exists("vbtabnr")
139 tabnew
Bram Moolenaar251e1912011-06-19 05:09:16 +0200140 sil! file Vimball
Bram Moolenaareee697b2006-03-21 21:20:39 +0000141 let vbtabnr= tabpagenr()
142 else
143 exe "tabn ".vbtabnr
144 endif
145
146 let lastline= line("$") + 1
147 if lastline == 2 && getline("$") == ""
Bram Moolenaar03413f42016-04-12 21:07:15 +0200148 call setline(1,'" Vimball Archiver by Charles E. Campbell')
Bram Moolenaareee697b2006-03-21 21:20:39 +0000149 call setline(2,'UseVimball')
150 call setline(3,'finish')
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +0000151 let lastline= line("$") + 1
Bram Moolenaareee697b2006-03-21 21:20:39 +0000152 endif
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +0000153 call setline(lastline ,substitute(svfile,'$',' [[[1',''))
Bram Moolenaareee697b2006-03-21 21:20:39 +0000154 call setline(lastline+1,0)
Bram Moolenaarf193fff2006-04-27 00:02:13 +0000155
156 " write the file from the tab
Bram Moolenaare37d50a2008-08-06 17:06:04 +0000157" call Decho("exe $r ".fnameescape(svfile))
158 exe "$r ".fnameescape(svfile)
Bram Moolenaarf193fff2006-04-27 00:02:13 +0000159
Bram Moolenaareee697b2006-03-21 21:20:39 +0000160 call setline(lastline+1,line("$") - lastline - 1)
161" call Decho("lastline=".lastline." line$=".line("$"))
162
163 " restore to normal tab
164 exe "tabn ".curtabnr
165 let linenr= linenr + 1
166 endwhile
167
168 " write the vimball
169 exe "tabn ".vbtabnr
Bram Moolenaarf193fff2006-04-27 00:02:13 +0000170 call s:ChgDir(curdir)
Bram Moolenaarf2330482008-06-24 20:19:36 +0000171 setlocal ff=unix
Bram Moolenaar8ab561d2006-03-23 22:44:10 +0000172 if a:writelevel
Bram Moolenaare37d50a2008-08-06 17:06:04 +0000173" call Decho("exe w! ".fnameescape(vbname))
174 exe "w! ".fnameescape(vbname)
Bram Moolenaar8ab561d2006-03-23 22:44:10 +0000175 else
Bram Moolenaare37d50a2008-08-06 17:06:04 +0000176" call Decho("exe w ".fnameescape(vbname))
177 exe "w ".fnameescape(vbname)
Bram Moolenaareee697b2006-03-21 21:20:39 +0000178 endif
179" call Decho("Vimball<".vbname."> created")
180 echo "Vimball<".vbname."> created"
181
182 " remove the evidence
183 setlocal nomod bh=wipe
184 exe "tabn ".curtabnr
Bram Moolenaar03413f42016-04-12 21:07:15 +0200185 exe "tabc! ".vbtabnr
Bram Moolenaareee697b2006-03-21 21:20:39 +0000186
187 " restore options
Bram Moolenaarf2330482008-06-24 20:19:36 +0000188 call vimball#RestoreSettings()
Bram Moolenaareee697b2006-03-21 21:20:39 +0000189
190" call Dret("MkVimball")
191endfun
192
193" ---------------------------------------------------------------------
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +0000194" vimball#Vimball: extract and distribute contents from a vimball {{{2
Bram Moolenaarf2330482008-06-24 20:19:36 +0000195" (invoked the the UseVimball command embedded in
196" vimballs' prologue)
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +0000197fun! vimball#Vimball(really,...)
198" call Dfunc("vimball#Vimball(really=".a:really.") a:0=".a:0)
Bram Moolenaareee697b2006-03-21 21:20:39 +0000199
Bram Moolenaare37d50a2008-08-06 17:06:04 +0000200 if v:version < 701 || (v:version == 701 && !exists('*fnameescape'))
Bram Moolenaar251e1912011-06-19 05:09:16 +0200201 echoerr "your vim is missing the fnameescape() function (pls upgrade to vim 7.2 or later)"
202" call Dret("vimball#Vimball : needs 7.1 with patch 299 or later")
Bram Moolenaarf2330482008-06-24 20:19:36 +0000203 return
204 endif
205
Bram Moolenaar5c736222010-01-06 20:54:52 +0100206 if getline(1) !~ '^" Vimball Archiver'
Bram Moolenaareee697b2006-03-21 21:20:39 +0000207 echoerr "(Vimball) The current file does not appear to be a Vimball!"
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +0000208" call Dret("vimball#Vimball")
Bram Moolenaareee697b2006-03-21 21:20:39 +0000209 return
210 endif
211
Bram Moolenaar25e2c9e2006-04-27 21:40:34 +0000212 " set up standard settings
Bram Moolenaarf2330482008-06-24 20:19:36 +0000213 call vimball#SaveSettings()
214 let curtabnr = tabpagenr()
215 let vimballfile = expand("%:tr")
Bram Moolenaareee697b2006-03-21 21:20:39 +0000216
217 " set up vimball tab
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +0000218" call Decho("setting up vimball tab")
Bram Moolenaareee697b2006-03-21 21:20:39 +0000219 tabnew
Bram Moolenaar251e1912011-06-19 05:09:16 +0200220 sil! file Vimball
Bram Moolenaareee697b2006-03-21 21:20:39 +0000221 let vbtabnr= tabpagenr()
222 let didhelp= ""
223
224 " go to vim plugin home
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +0000225 if a:0 > 0
Bram Moolenaar15146672011-10-20 22:22:38 +0200226 " let user specify the directory where the vimball is to be unpacked.
227 " 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 +0000228 let home= expand(a:1)
Bram Moolenaar15146672011-10-20 22:22:38 +0200229 if has("win32") || has("win95") || has("win64") || has("win16")
230 if home !~ '^\a:[/\\]'
231 let home= getcwd().'/'.a:1
232 endif
233 elseif home !~ '^/'
234 let home= getcwd().'/'.a:1
235 endif
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +0000236 else
Bram Moolenaar5c736222010-01-06 20:54:52 +0100237 let home= vimball#VimballHome()
Bram Moolenaarf193fff2006-04-27 00:02:13 +0000238 endif
239" call Decho("home<".home.">")
240
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +0000241 " save current directory and remove older same-named vimball, if any
Bram Moolenaareee697b2006-03-21 21:20:39 +0000242 let curdir = getcwd()
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +0000243" call Decho("home<".home.">")
244" call Decho("curdir<".curdir.">")
245
Bram Moolenaarf193fff2006-04-27 00:02:13 +0000246 call s:ChgDir(home)
Bram Moolenaarf2330482008-06-24 20:19:36 +0000247 let s:ok_unablefind= 1
248 call vimball#RmVimball(vimballfile)
249 unlet s:ok_unablefind
Bram Moolenaarf193fff2006-04-27 00:02:13 +0000250
Bram Moolenaareee697b2006-03-21 21:20:39 +0000251 let linenr = 4
252 let filecnt = 0
253
254 " give title to listing of (extracted) files from Vimball Archive
255 if a:really
Bram Moolenaarf2330482008-06-24 20:19:36 +0000256 echohl Title | echomsg "Vimball Archive" | echohl None
257 else
258 echohl Title | echomsg "Vimball Archive Listing" | echohl None
Bram Moolenaar25e2c9e2006-04-27 21:40:34 +0000259 echohl Statement | echomsg "files would be placed under: ".home | echohl None
Bram Moolenaareee697b2006-03-21 21:20:39 +0000260 endif
261
262 " apportion vimball contents to various files
263" call Decho("exe tabn ".curtabnr)
264 exe "tabn ".curtabnr
265" call Decho("linenr=".linenr." line$=".line("$"))
266 while 1 < linenr && linenr < line("$")
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +0000267 let fname = substitute(getline(linenr),'\t\[\[\[1$','','')
268 let fname = substitute(fname,'\\','/','g')
Bram Moolenaar5c736222010-01-06 20:54:52 +0100269 let fsize = substitute(getline(linenr+1),'^\(\d\+\).\{-}$','\1','')+0
Bram Moolenaar251e1912011-06-19 05:09:16 +0200270 let fenc = substitute(getline(linenr+1),'^\d\+\s*\(\S\{-}\)$','\1','')
Bram Moolenaareee697b2006-03-21 21:20:39 +0000271 let filecnt = filecnt + 1
Bram Moolenaar251e1912011-06-19 05:09:16 +0200272" call Decho("fname<".fname."> fsize=".fsize." filecnt=".filecnt. " fenc=".fenc)
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +0000273
Bram Moolenaareee697b2006-03-21 21:20:39 +0000274 if a:really
275 echomsg "extracted <".fname.">: ".fsize." lines"
276 else
277 echomsg "would extract <".fname.">: ".fsize." lines"
278 endif
Bram Moolenaarf9393ef2006-04-24 19:47:27 +0000279" call Decho("using L#".linenr.": will extract file<".fname.">")
280" call Decho("using L#".(linenr+1).": fsize=".fsize)
Bram Moolenaareee697b2006-03-21 21:20:39 +0000281
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +0000282 " Allow AsNeeded/ directory to take place of plugin/ directory
Bram Moolenaarf2330482008-06-24 20:19:36 +0000283 " when AsNeeded/filename is filereadable or was present in VimballRecord
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +0000284 if fname =~ '\<plugin/'
285 let anfname= substitute(fname,'\<plugin/','AsNeeded/','')
Bram Moolenaar03413f42016-04-12 21:07:15 +0200286 if filereadable(anfname) || (exists("s:VBRstring") && s:VBRstring =~# anfname)
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +0000287" call Decho("using anfname<".anfname."> instead of <".fname.">")
288 let fname= anfname
289 endif
290 endif
291
Bram Moolenaareee697b2006-03-21 21:20:39 +0000292 " make directories if they don't exist yet
Bram Moolenaar25e2c9e2006-04-27 21:40:34 +0000293 if a:really
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +0000294" call Decho("making directories if they don't exist yet (fname<".fname.">)")
295 let fnamebuf= substitute(fname,'\\','/','g')
296 let dirpath = substitute(home,'\\','/','g')
Bram Moolenaar15146672011-10-20 22:22:38 +0200297" call Decho("init: fnamebuf<".fnamebuf.">")
298" call Decho("init: dirpath <".dirpath.">")
Bram Moolenaar25e2c9e2006-04-27 21:40:34 +0000299 while fnamebuf =~ '/'
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +0000300 let dirname = dirpath."/".substitute(fnamebuf,'/.*$','','')
301 let dirpath = dirname
302 let fnamebuf = substitute(fnamebuf,'^.\{-}/\(.*\)$','\1','')
303" call Decho("dirname<".dirname.">")
Bram Moolenaar15146672011-10-20 22:22:38 +0200304" call Decho("dirpath<".dirpath.">")
Bram Moolenaar25e2c9e2006-04-27 21:40:34 +0000305 if !isdirectory(dirname)
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +0000306" call Decho("making <".dirname.">")
Bram Moolenaarf2330482008-06-24 20:19:36 +0000307 if exists("g:vimball_mkdir")
Bram Moolenaar5c736222010-01-06 20:54:52 +0100308 call system(g:vimball_mkdir." ".shellescape(dirname))
Bram Moolenaarf2330482008-06-24 20:19:36 +0000309 else
310 call mkdir(dirname)
311 endif
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +0000312 call s:RecordInVar(home,"rmdir('".dirname."')")
Bram Moolenaar25e2c9e2006-04-27 21:40:34 +0000313 endif
314 endwhile
315 endif
Bram Moolenaarf193fff2006-04-27 00:02:13 +0000316 call s:ChgDir(home)
Bram Moolenaareee697b2006-03-21 21:20:39 +0000317
318 " grab specified qty of lines and place into "a" buffer
Bram Moolenaarf9393ef2006-04-24 19:47:27 +0000319 " (skip over path/filename and qty-lines)
320 let linenr = linenr + 2
321 let lastline = linenr + fsize - 1
322" call Decho("exe ".linenr.",".lastline."yank a")
Bram Moolenaar251e1912011-06-19 05:09:16 +0200323 " no point in handling a zero-length file
324 if lastline >= linenr
325 exe "silent ".linenr.",".lastline."yank a"
Bram Moolenaareee697b2006-03-21 21:20:39 +0000326
Bram Moolenaar251e1912011-06-19 05:09:16 +0200327 " copy "a" buffer into tab
Bram Moolenaareee697b2006-03-21 21:20:39 +0000328" call Decho('copy "a buffer into tab#'.vbtabnr)
Bram Moolenaar251e1912011-06-19 05:09:16 +0200329 exe "tabn ".vbtabnr
330 setlocal ma
331 sil! %d
332 silent put a
333 1
334 sil! d
Bram Moolenaareee697b2006-03-21 21:20:39 +0000335
Bram Moolenaar251e1912011-06-19 05:09:16 +0200336 " write tab to file
337 if a:really
338 let fnamepath= home."/".fname
Bram Moolenaarf2330482008-06-24 20:19:36 +0000339" call Decho("exe w! ".fnameescape(fnamepath))
Bram Moolenaar5c736222010-01-06 20:54:52 +0100340 if fenc != ""
341 exe "silent w! ++enc=".fnameescape(fenc)." ".fnameescape(fnamepath)
342 else
343 exe "silent w! ".fnameescape(fnamepath)
344 endif
345 echo "wrote ".fnameescape(fnamepath)
346 call s:RecordInVar(home,"call delete('".fnamepath."')")
Bram Moolenaar251e1912011-06-19 05:09:16 +0200347 endif
Bram Moolenaareee697b2006-03-21 21:20:39 +0000348
Bram Moolenaar251e1912011-06-19 05:09:16 +0200349 " return to tab with vimball
Bram Moolenaareee697b2006-03-21 21:20:39 +0000350" call Decho("exe tabn ".curtabnr)
Bram Moolenaar251e1912011-06-19 05:09:16 +0200351 exe "tabn ".curtabnr
Bram Moolenaarf9393ef2006-04-24 19:47:27 +0000352
Bram Moolenaar3e496b02016-09-25 22:11:48 +0200353 " set up help if it's a doc/*.txt file
Bram Moolenaarf9393ef2006-04-24 19:47:27 +0000354" call Decho("didhelp<".didhelp."> fname<".fname.">")
Bram Moolenaar251e1912011-06-19 05:09:16 +0200355 if a:really && didhelp == "" && fname =~ 'doc/[^/]\+\.\(txt\|..x\)$'
356 let didhelp= substitute(fname,'^\(.*\<doc\)[/\\][^.]*\.\(txt\|..x\)$','\1','')
Bram Moolenaarf9393ef2006-04-24 19:47:27 +0000357" call Decho("didhelp<".didhelp.">")
Bram Moolenaar251e1912011-06-19 05:09:16 +0200358 endif
Bram Moolenaarf9393ef2006-04-24 19:47:27 +0000359 endif
360
361 " update for next file
Bram Moolenaarf2330482008-06-24 20:19:36 +0000362" call Decho("update linenr= [linenr=".linenr."] + [fsize=".fsize."] = ".(linenr+fsize))
363 let linenr= linenr + fsize
Bram Moolenaareee697b2006-03-21 21:20:39 +0000364 endwhile
365
366 " set up help
367" call Decho("about to set up help: didhelp<".didhelp.">")
368 if didhelp != ""
Bram Moolenaare37d50a2008-08-06 17:06:04 +0000369 let htpath= home."/".didhelp
Bram Moolenaarf193fff2006-04-27 00:02:13 +0000370" call Decho("exe helptags ".htpath)
Bram Moolenaare37d50a2008-08-06 17:06:04 +0000371 exe "helptags ".fnameescape(htpath)
Bram Moolenaarf193fff2006-04-27 00:02:13 +0000372 echo "did helptags"
Bram Moolenaareee697b2006-03-21 21:20:39 +0000373 endif
374
375 " make sure a "Press ENTER..." prompt appears to keep the messages showing!
Bram Moolenaar8ab561d2006-03-23 22:44:10 +0000376 while filecnt <= &ch
Bram Moolenaareee697b2006-03-21 21:20:39 +0000377 echomsg " "
378 let filecnt= filecnt + 1
379 endwhile
380
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +0000381 " record actions in <.VimballRecord>
382 call s:RecordInFile(home)
383
Bram Moolenaareee697b2006-03-21 21:20:39 +0000384 " restore events, delete tab and buffer
Bram Moolenaar03413f42016-04-12 21:07:15 +0200385 exe "sil! tabn ".vbtabnr
Bram Moolenaareee697b2006-03-21 21:20:39 +0000386 setlocal nomod bh=wipe
Bram Moolenaar03413f42016-04-12 21:07:15 +0200387 exe "sil! tabn ".curtabnr
388 exe "sil! tabc! ".vbtabnr
Bram Moolenaarf2330482008-06-24 20:19:36 +0000389 call vimball#RestoreSettings()
Bram Moolenaarf193fff2006-04-27 00:02:13 +0000390 call s:ChgDir(curdir)
Bram Moolenaareee697b2006-03-21 21:20:39 +0000391
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +0000392" call Dret("vimball#Vimball")
393endfun
394
395" ---------------------------------------------------------------------
396" vimball#RmVimball: remove any files, remove any directories made by any {{{2
397" previous vimball extraction based on a file of the current
398" name.
399" Usage: RmVimball (assume current file is a vimball; remove)
400" RmVimball vimballname
401fun! vimball#RmVimball(...)
402" call Dfunc("vimball#RmVimball() a:0=".a:0)
403 if exists("g:vimball_norecord")
404" call Dret("vimball#RmVimball : (g:vimball_norecord)")
405 return
406 endif
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +0000407
408 if a:0 == 0
Bram Moolenaarf2330482008-06-24 20:19:36 +0000409 let curfile= expand("%:tr")
410" call Decho("case a:0=0: curfile<".curfile."> (used expand(%:tr))")
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +0000411 else
412 if a:1 =~ '[\/]'
413 call vimball#ShowMesg(s:USAGE,"RmVimball vimballname [path]")
414" call Dret("vimball#RmVimball : suspect a:1<".a:1.">")
415 return
416 endif
417 let curfile= a:1
Bram Moolenaarf2330482008-06-24 20:19:36 +0000418" call Decho("case a:0=".a:0.": curfile<".curfile.">")
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +0000419 endif
Bram Moolenaar251e1912011-06-19 05:09:16 +0200420 if curfile =~ '\.vmb$'
421 let curfile= substitute(curfile,'\.vmb','','')
422 elseif curfile =~ '\.vba$'
Bram Moolenaarf2330482008-06-24 20:19:36 +0000423 let curfile= substitute(curfile,'\.vba','','')
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +0000424 endif
425 if a:0 >= 2
426 let home= expand(a:2)
427 else
Bram Moolenaar5c736222010-01-06 20:54:52 +0100428 let home= vimball#VimballHome()
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +0000429 endif
430 let curdir = getcwd()
431" call Decho("home <".home.">")
432" call Decho("curfile<".curfile.">")
433" call Decho("curdir <".curdir.">")
434
435 call s:ChgDir(home)
436 if filereadable(".VimballRecord")
437" call Decho(".VimballRecord is readable")
438" call Decho("curfile<".curfile.">")
439 keepalt keepjumps 1split
Bram Moolenaar251e1912011-06-19 05:09:16 +0200440 sil! keepalt keepjumps e .VimballRecord
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +0000441 let keepsrch= @/
Bram Moolenaar5c736222010-01-06 20:54:52 +0100442" call Decho('search for ^\M'.curfile.'.\m: ')
Bram Moolenaar251e1912011-06-19 05:09:16 +0200443" call Decho('search for ^\M'.curfile.'.\m{vba|vmb}: ')
444" call Decho('search for ^\M'.curfile.'\m[-0-9.]*\.{vba|vmb}: ')
Bram Moolenaar5c736222010-01-06 20:54:52 +0100445 if search('^\M'.curfile."\m: ".'cw')
Bram Moolenaarf2330482008-06-24 20:19:36 +0000446 let foundit= 1
Bram Moolenaar251e1912011-06-19 05:09:16 +0200447 elseif search('^\M'.curfile.".\mvmb: ",'cw')
448 let foundit= 2
449 elseif search('^\M'.curfile.'\m[-0-9.]*\.vmb: ','cw')
450 let foundit= 2
Bram Moolenaar5c736222010-01-06 20:54:52 +0100451 elseif search('^\M'.curfile.".\mvba: ",'cw')
Bram Moolenaarf2330482008-06-24 20:19:36 +0000452 let foundit= 1
Bram Moolenaar5c736222010-01-06 20:54:52 +0100453 elseif search('^\M'.curfile.'\m[-0-9.]*\.vba: ','cw')
Bram Moolenaarf2330482008-06-24 20:19:36 +0000454 let foundit= 1
455 else
456 let foundit = 0
457 endif
458 if foundit
Bram Moolenaar251e1912011-06-19 05:09:16 +0200459 if foundit == 1
460 let exestring = substitute(getline("."),'^\M'.curfile.'\m\S\{-}\.vba: ','','')
461 else
462 let exestring = substitute(getline("."),'^\M'.curfile.'\m\S\{-}\.vmb: ','','')
463 endif
Bram Moolenaarf2330482008-06-24 20:19:36 +0000464 let s:VBRstring= substitute(exestring,'call delete(','','g')
465 let s:VBRstring= substitute(s:VBRstring,"[')]",'','g')
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +0000466" call Decho("exe ".exestring)
Bram Moolenaar251e1912011-06-19 05:09:16 +0200467 sil! keepalt keepjumps exe exestring
468 sil! keepalt keepjumps d
Bram Moolenaarf2330482008-06-24 20:19:36 +0000469 let exestring= strlen(substitute(exestring,'call delete(.\{-})|\=',"D","g"))
470" call Decho("exestring<".exestring.">")
471 echomsg "removed ".exestring." files"
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +0000472 else
Bram Moolenaarf2330482008-06-24 20:19:36 +0000473 let s:VBRstring= ''
Bram Moolenaar251e1912011-06-19 05:09:16 +0200474 let curfile = substitute(curfile,'\.vmb','','')
Bram Moolenaarf2330482008-06-24 20:19:36 +0000475" call Decho("unable to find <".curfile."> in .VimballRecord")
476 if !exists("s:ok_unablefind")
477 call vimball#ShowMesg(s:WARNING,"(RmVimball) unable to find <".curfile."> in .VimballRecord")
478 endif
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +0000479 endif
Bram Moolenaar251e1912011-06-19 05:09:16 +0200480 sil! keepalt keepjumps g/^\s*$/d
481 sil! keepalt keepjumps wq!
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +0000482 let @/= keepsrch
483 endif
484 call s:ChgDir(curdir)
485
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +0000486" call Dret("vimball#RmVimball")
Bram Moolenaareee697b2006-03-21 21:20:39 +0000487endfun
488
Bram Moolenaar551dbcc2006-04-25 22:13:59 +0000489" ---------------------------------------------------------------------
490" vimball#Decompress: attempts to automatically decompress vimballs {{{2
Bram Moolenaar5c736222010-01-06 20:54:52 +0100491fun! vimball#Decompress(fname,...)
492" call Dfunc("Decompress(fname<".a:fname.">) a:0=".a:0)
Bram Moolenaar551dbcc2006-04-25 22:13:59 +0000493
494 " decompression:
495 if expand("%") =~ '.*\.gz' && executable("gunzip")
Bram Moolenaarf2330482008-06-24 20:19:36 +0000496 " handle *.gz with gunzip
Bram Moolenaar5c736222010-01-06 20:54:52 +0100497 silent exe "!gunzip ".shellescape(a:fname)
Bram Moolenaarf2330482008-06-24 20:19:36 +0000498 if v:shell_error != 0
499 call vimball#ShowMesg(s:WARNING,"(vimball#Decompress) gunzip may have failed with <".a:fname.">")
500 endif
Bram Moolenaar551dbcc2006-04-25 22:13:59 +0000501 let fname= substitute(a:fname,'\.gz$','','')
Bram Moolenaarf193fff2006-04-27 00:02:13 +0000502 exe "e ".escape(fname,' \')
Bram Moolenaar5c736222010-01-06 20:54:52 +0100503 if a:0 == 0| call vimball#ShowMesg(s:USAGE,"Source this file to extract it! (:so %)") | endif
Bram Moolenaarf2330482008-06-24 20:19:36 +0000504
505 elseif expand("%") =~ '.*\.gz' && executable("gzip")
506 " handle *.gz with gzip -d
Bram Moolenaar5c736222010-01-06 20:54:52 +0100507 silent exe "!gzip -d ".shellescape(a:fname)
Bram Moolenaarf2330482008-06-24 20:19:36 +0000508 if v:shell_error != 0
509 call vimball#ShowMesg(s:WARNING,'(vimball#Decompress) "gzip -d" may have failed with <'.a:fname.">")
510 endif
511 let fname= substitute(a:fname,'\.gz$','','')
512 exe "e ".escape(fname,' \')
Bram Moolenaar5c736222010-01-06 20:54:52 +0100513 if a:0 == 0| call vimball#ShowMesg(s:USAGE,"Source this file to extract it! (:so %)") | endif
Bram Moolenaarf2330482008-06-24 20:19:36 +0000514
Bram Moolenaar551dbcc2006-04-25 22:13:59 +0000515 elseif expand("%") =~ '.*\.bz2' && executable("bunzip2")
Bram Moolenaarf2330482008-06-24 20:19:36 +0000516 " handle *.bz2 with bunzip2
Bram Moolenaar5c736222010-01-06 20:54:52 +0100517 silent exe "!bunzip2 ".shellescape(a:fname)
Bram Moolenaarf2330482008-06-24 20:19:36 +0000518 if v:shell_error != 0
519 call vimball#ShowMesg(s:WARNING,"(vimball#Decompress) bunzip2 may have failed with <".a:fname.">")
520 endif
Bram Moolenaar551dbcc2006-04-25 22:13:59 +0000521 let fname= substitute(a:fname,'\.bz2$','','')
Bram Moolenaarf193fff2006-04-27 00:02:13 +0000522 exe "e ".escape(fname,' \')
Bram Moolenaar5c736222010-01-06 20:54:52 +0100523 if a:0 == 0| call vimball#ShowMesg(s:USAGE,"Source this file to extract it! (:so %)") | endif
Bram Moolenaarf2330482008-06-24 20:19:36 +0000524
525 elseif expand("%") =~ '.*\.bz2' && executable("bzip2")
526 " handle *.bz2 with bzip2 -d
Bram Moolenaar5c736222010-01-06 20:54:52 +0100527 silent exe "!bzip2 -d ".shellescape(a:fname)
Bram Moolenaarf2330482008-06-24 20:19:36 +0000528 if v:shell_error != 0
529 call vimball#ShowMesg(s:WARNING,'(vimball#Decompress) "bzip2 -d" may have failed with <'.a:fname.">")
530 endif
531 let fname= substitute(a:fname,'\.bz2$','','')
532 exe "e ".escape(fname,' \')
Bram Moolenaar5c736222010-01-06 20:54:52 +0100533 if a:0 == 0| call vimball#ShowMesg(s:USAGE,"Source this file to extract it! (:so %)") | endif
Bram Moolenaarf2330482008-06-24 20:19:36 +0000534
Jim Zhou56957ed2025-02-28 18:06:14 +0100535 elseif expand("%") =~ '.*\.bz3' && executable("bunzip3")
536 " handle *.bz3 with bunzip3
537 silent exe "!bunzip3 ".shellescape(a:fname)
538 if v:shell_error != 0
539 call vimball#ShowMesg(s:WARNING,"(vimball#Decompress) bunzip3 may have failed with <".a:fname.">")
540 endif
541 let fname= substitute(a:fname,'\.bz3$','','')
542 exe "e ".escape(fname,' \')
543 if a:0 == 0| call vimball#ShowMesg(s:USAGE,"Source this file to extract it! (:so %)") | endif
544
545 elseif expand("%") =~ '.*\.bz3' && executable("bzip3")
546 " handle *.bz3 with bzip3 -d
547 silent exe "!bzip3 -d ".shellescape(a:fname)
548 if v:shell_error != 0
549 call vimball#ShowMesg(s:WARNING,'(vimball#Decompress) "bzip3 -d" may have failed with <'.a:fname.">")
550 endif
551 let fname= substitute(a:fname,'\.bz3$','','')
552 exe "e ".escape(fname,' \')
553 if a:0 == 0| call vimball#ShowMesg(s:USAGE,"Source this file to extract it! (:so %)") | endif
554
Bram Moolenaar551dbcc2006-04-25 22:13:59 +0000555 elseif expand("%") =~ '.*\.zip' && executable("unzip")
Bram Moolenaarf2330482008-06-24 20:19:36 +0000556 " handle *.zip with unzip
Bram Moolenaar5c736222010-01-06 20:54:52 +0100557 silent exe "!unzip ".shellescape(a:fname)
Bram Moolenaarf2330482008-06-24 20:19:36 +0000558 if v:shell_error != 0
559 call vimball#ShowMesg(s:WARNING,"(vimball#Decompress) unzip may have failed with <".a:fname.">")
560 endif
Bram Moolenaar551dbcc2006-04-25 22:13:59 +0000561 let fname= substitute(a:fname,'\.zip$','','')
Bram Moolenaarf193fff2006-04-27 00:02:13 +0000562 exe "e ".escape(fname,' \')
Bram Moolenaar5c736222010-01-06 20:54:52 +0100563 if a:0 == 0| call vimball#ShowMesg(s:USAGE,"Source this file to extract it! (:so %)") | endif
Bram Moolenaar551dbcc2006-04-25 22:13:59 +0000564 endif
Bram Moolenaarf2330482008-06-24 20:19:36 +0000565
Bram Moolenaar5c736222010-01-06 20:54:52 +0100566 if a:0 == 0| setlocal noma bt=nofile fmr=[[[,]]] fdm=marker | endif
Bram Moolenaar551dbcc2006-04-25 22:13:59 +0000567
568" call Dret("Decompress")
569endfun
570
Bram Moolenaarf193fff2006-04-27 00:02:13 +0000571" ---------------------------------------------------------------------
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +0000572" vimball#ShowMesg: {{{2
573fun! vimball#ShowMesg(level,msg)
574" call Dfunc("vimball#ShowMesg(level=".a:level." msg<".a:msg.">)")
Bram Moolenaar5c736222010-01-06 20:54:52 +0100575
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +0000576 let rulerkeep = &ruler
577 let showcmdkeep = &showcmd
578 set noruler noshowcmd
579 redraw!
580
Bram Moolenaar03413f42016-04-12 21:07:15 +0200581 if &fo =~# '[ta]'
Bram Moolenaar5c736222010-01-06 20:54:52 +0100582 echomsg "***vimball*** ".a:msg
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +0000583 else
584 if a:level == s:WARNING || a:level == s:USAGE
585 echohl WarningMsg
586 elseif a:level == s:ERROR
587 echohl Error
588 endif
Bram Moolenaar5c736222010-01-06 20:54:52 +0100589 echomsg "***vimball*** ".a:msg
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +0000590 echohl None
591 endif
592
593 if a:level != s:USAGE
594 call inputsave()|let ok= input("Press <cr> to continue")|call inputrestore()
595 endif
596
597 let &ruler = rulerkeep
598 let &showcmd = showcmdkeep
599
600" call Dret("vimball#ShowMesg")
601endfun
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +0000602" =====================================================================
603" s:ChgDir: change directory (in spite of Windoze) {{{2
Bram Moolenaarf193fff2006-04-27 00:02:13 +0000604fun! s:ChgDir(newdir)
605" call Dfunc("ChgDir(newdir<".a:newdir.">)")
606 if (has("win32") || has("win95") || has("win64") || has("win16"))
Bram Moolenaar15146672011-10-20 22:22:38 +0200607 try
608 exe 'silent cd '.fnameescape(substitute(a:newdir,'/','\\','g'))
609 catch /^Vim\%((\a\+)\)\=:E/
610 call mkdir(fnameescape(substitute(a:newdir,'/','\\','g')))
611 exe 'silent cd '.fnameescape(substitute(a:newdir,'/','\\','g'))
612 endtry
Bram Moolenaarf193fff2006-04-27 00:02:13 +0000613 else
Bram Moolenaar15146672011-10-20 22:22:38 +0200614 try
615 exe 'silent cd '.fnameescape(a:newdir)
616 catch /^Vim\%((\a\+)\)\=:E/
617 call mkdir(fnameescape(a:newdir))
618 exe 'silent cd '.fnameescape(a:newdir)
619 endtry
Bram Moolenaarf193fff2006-04-27 00:02:13 +0000620 endif
Bram Moolenaarf2330482008-06-24 20:19:36 +0000621" call Dret("ChgDir : curdir<".getcwd().">")
Bram Moolenaarf193fff2006-04-27 00:02:13 +0000622endfun
623
624" ---------------------------------------------------------------------
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +0000625" s:RecordInVar: record a un-vimball command in the .VimballRecord file {{{2
626fun! s:RecordInVar(home,cmd)
627" call Dfunc("RecordInVar(home<".a:home."> cmd<".a:cmd.">)")
628 if a:cmd =~ '^rmdir'
629" if !exists("s:recorddir")
630" let s:recorddir= substitute(a:cmd,'^rmdir',"call s:Rmdir",'')
631" else
632" let s:recorddir= s:recorddir."|".substitute(a:cmd,'^rmdir',"call s:Rmdir",'')
633" endif
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +0000634 elseif !exists("s:recordfile")
635 let s:recordfile= a:cmd
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +0000636 else
637 let s:recordfile= s:recordfile."|".a:cmd
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +0000638 endif
Bram Moolenaarf2330482008-06-24 20:19:36 +0000639" call Dret("RecordInVar : s:recordfile<".(exists("s:recordfile")? s:recordfile : "")."> s:recorddir<".(exists("s:recorddir")? s:recorddir : "").">")
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +0000640endfun
641
642" ---------------------------------------------------------------------
643" s:RecordInFile: {{{2
644fun! s:RecordInFile(home)
Bram Moolenaarf2330482008-06-24 20:19:36 +0000645" call Dfunc("s:RecordInFile()")
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +0000646 if exists("g:vimball_norecord")
Bram Moolenaarf2330482008-06-24 20:19:36 +0000647" call Dret("s:RecordInFile : g:vimball_norecord")
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +0000648 return
649 endif
650
651 if exists("s:recordfile") || exists("s:recorddir")
652 let curdir= getcwd()
653 call s:ChgDir(a:home)
654 keepalt keepjumps 1split
Bram Moolenaarf2330482008-06-24 20:19:36 +0000655
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +0000656 let cmd= expand("%:tr").": "
Bram Moolenaarf2330482008-06-24 20:19:36 +0000657" call Decho("cmd<".cmd.">")
658
Bram Moolenaar251e1912011-06-19 05:09:16 +0200659 sil! keepalt keepjumps e .VimballRecord
Bram Moolenaarf2330482008-06-24 20:19:36 +0000660 setlocal ma
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +0000661 $
662 if exists("s:recordfile") && exists("s:recorddir")
663 let cmd= cmd.s:recordfile."|".s:recorddir
664 elseif exists("s:recorddir")
665 let cmd= cmd.s:recorddir
666 elseif exists("s:recordfile")
667 let cmd= cmd.s:recordfile
668 else
Bram Moolenaarf2330482008-06-24 20:19:36 +0000669" call Dret("s:RecordInFile : neither recordfile nor recorddir exist")
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +0000670 return
671 endif
Bram Moolenaarf2330482008-06-24 20:19:36 +0000672" call Decho("cmd<".cmd.">")
673
674 " put command into buffer, write .VimballRecord `file
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +0000675 keepalt keepjumps put=cmd
Bram Moolenaar251e1912011-06-19 05:09:16 +0200676 sil! keepalt keepjumps g/^\s*$/d
677 sil! keepalt keepjumps wq!
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +0000678 call s:ChgDir(curdir)
Bram Moolenaarf2330482008-06-24 20:19:36 +0000679
680 if exists("s:recorddir")
681" call Decho("unlet s:recorddir<".s:recorddir.">")
682 unlet s:recorddir
683 endif
684 if exists("s:recordfile")
685" call Decho("unlet s:recordfile<".s:recordfile.">")
686 unlet s:recordfile
687 endif
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +0000688 else
689" call Decho("s:record[file|dir] doesn't exist")
690 endif
691
Bram Moolenaarf2330482008-06-24 20:19:36 +0000692" call Dret("s:RecordInFile")
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +0000693endfun
694
695" ---------------------------------------------------------------------
Bram Moolenaar5c736222010-01-06 20:54:52 +0100696" vimball#VimballHome: determine/get home directory path (usually from rtp) {{{2
697fun! vimball#VimballHome()
698" call Dfunc("vimball#VimballHome()")
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +0000699 if exists("g:vimball_home")
700 let home= g:vimball_home
701 else
702 " go to vim plugin home
703 for home in split(&rtp,',') + ['']
704 if isdirectory(home) && filewritable(home) | break | endif
Bram Moolenaarf2330482008-06-24 20:19:36 +0000705 let basehome= substitute(home,'[/\\]\.vim$','','')
706 if isdirectory(basehome) && filewritable(basehome)
707 let home= basehome."/.vim"
708 break
709 endif
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +0000710 endfor
711 if home == ""
712 " just pick the first directory
713 let home= substitute(&rtp,',.*$','','')
714 endif
715 if (has("win32") || has("win95") || has("win64") || has("win16"))
716 let home= substitute(home,'/','\\','g')
717 endif
718 endif
Bram Moolenaarf2330482008-06-24 20:19:36 +0000719 " insure that the home directory exists
720" call Decho("picked home<".home.">")
721 if !isdirectory(home)
722 if exists("g:vimball_mkdir")
723" 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 +0100724" call Decho("system(".g:vimball_mkdir." ".shellescape(home).")")
725 call system(g:vimball_mkdir." ".shellescape(home))
Bram Moolenaarf2330482008-06-24 20:19:36 +0000726 else
727" call Decho("home<".home."> isn't a directory -- making it now with mkdir()")
728 call mkdir(home)
729 endif
730 endif
Bram Moolenaar5c736222010-01-06 20:54:52 +0100731" call Dret("vimball#VimballHome <".home.">")
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +0000732 return home
Bram Moolenaarf193fff2006-04-27 00:02:13 +0000733endfun
734
735" ---------------------------------------------------------------------
Bram Moolenaarf2330482008-06-24 20:19:36 +0000736" vimball#SaveSettings: {{{2
737fun! vimball#SaveSettings()
Bram Moolenaar25e2c9e2006-04-27 21:40:34 +0000738" call Dfunc("SaveSettings()")
739 let s:makeep = getpos("'a")
740 let s:regakeep= @a
Bram Moolenaar03413f42016-04-12 21:07:15 +0200741 if exists("+acd")
Bram Moolenaard68071d2006-05-02 22:08:30 +0000742 let s:acdkeep = &acd
743 endif
Bram Moolenaar25e2c9e2006-04-27 21:40:34 +0000744 let s:eikeep = &ei
Bram Moolenaare37d50a2008-08-06 17:06:04 +0000745 let s:fenkeep = &l:fen
Bram Moolenaar25e2c9e2006-04-27 21:40:34 +0000746 let s:hidkeep = &hidden
747 let s:ickeep = &ic
Bram Moolenaar143c38c2007-05-10 16:41:10 +0000748 let s:lzkeep = &lz
749 let s:pmkeep = &pm
Bram Moolenaar25e2c9e2006-04-27 21:40:34 +0000750 let s:repkeep = &report
751 let s:vekeep = &ve
Bram Moolenaare37d50a2008-08-06 17:06:04 +0000752 let s:ffkeep = &l:ff
Bram Moolenaar251e1912011-06-19 05:09:16 +0200753 let s:swfkeep = &l:swf
Bram Moolenaar03413f42016-04-12 21:07:15 +0200754 if exists("+acd")
Bram Moolenaar251e1912011-06-19 05:09:16 +0200755 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 +0000756 else
Bram Moolenaar251e1912011-06-19 05:09:16 +0200757 setlocal ei=all ve=all nofen noic report=999 nohid bt= ma lz pm= ff=unix noswf
Bram Moolenaard68071d2006-05-02 22:08:30 +0000758 endif
Bram Moolenaarf2330482008-06-24 20:19:36 +0000759 " vimballs should be in unix format
760 setlocal ff=unix
Bram Moolenaar25e2c9e2006-04-27 21:40:34 +0000761" call Dret("SaveSettings")
762endfun
763
764" ---------------------------------------------------------------------
Bram Moolenaarf2330482008-06-24 20:19:36 +0000765" vimball#RestoreSettings: {{{2
766fun! vimball#RestoreSettings()
Bram Moolenaar25e2c9e2006-04-27 21:40:34 +0000767" call Dfunc("RestoreSettings()")
768 let @a = s:regakeep
Bram Moolenaar03413f42016-04-12 21:07:15 +0200769 if exists("+acd")
Bram Moolenaard68071d2006-05-02 22:08:30 +0000770 let &acd = s:acdkeep
771 endif
Bram Moolenaare37d50a2008-08-06 17:06:04 +0000772 let &l:fen = s:fenkeep
Bram Moolenaar25e2c9e2006-04-27 21:40:34 +0000773 let &hidden = s:hidkeep
774 let &ic = s:ickeep
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +0000775 let &lz = s:lzkeep
Bram Moolenaar143c38c2007-05-10 16:41:10 +0000776 let &pm = s:pmkeep
Bram Moolenaar25e2c9e2006-04-27 21:40:34 +0000777 let &report = s:repkeep
778 let &ve = s:vekeep
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +0000779 let &ei = s:eikeep
Bram Moolenaare37d50a2008-08-06 17:06:04 +0000780 let &l:ff = s:ffkeep
Bram Moolenaar25e2c9e2006-04-27 21:40:34 +0000781 if s:makeep[0] != 0
782 " restore mark a
783" call Decho("restore mark-a: makeep=".string(makeep))
784 call setpos("'a",s:makeep)
785 endif
Bram Moolenaar03413f42016-04-12 21:07:15 +0200786 if exists("+acd")
Bram Moolenaarf2330482008-06-24 20:19:36 +0000787 unlet s:acdkeep
Bram Moolenaard68071d2006-05-02 22:08:30 +0000788 endif
Bram Moolenaarf2330482008-06-24 20:19:36 +0000789 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 +0000790" call Dret("RestoreSettings")
791endfun
792
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100793let &cpo = s:keepcpo
794unlet s:keepcpo
795
Bram Moolenaar25e2c9e2006-04-27 21:40:34 +0000796" ---------------------------------------------------------------------
Bram Moolenaareee697b2006-03-21 21:20:39 +0000797" Modelines: {{{1
798" vim: fdm=marker