1" tar.vim: Handles browsing tarfiles
2"            AUTOLOAD PORTION
3" Date:			Aug 09, 2010
4" Version:		26
5" Maintainer:	Charles E Campbell, Jr <NdrOchip@ScampbellPfamily.AbizM-NOSPAM>
6" License:		Vim License  (see vim's :help license)
7"
8"	Contains many ideas from Michael Toren's <tar.vim>
9"
10" Copyright:    Copyright (C) 2005-2009 Charles E. Campbell, Jr. {{{1
11"               Permission is hereby granted to use and distribute this code,
12"               with or without modifications, provided that this copyright
13"               notice is copied with it. Like anything else that's free,
14"               tar.vim and tarPlugin.vim are provided *as is* and comes
15"               with no warranty of any kind, either expressed or implied.
16"               By using this plugin, you agree that in no event will the
17"               copyright holder be liable for any damages resulting from
18"               the use of this software.
19"     call inputsave()|call input("Press <cr> to continue")|call inputrestore()
20" ---------------------------------------------------------------------
21" Load Once: {{{1
22if &cp || exists("g:loaded_tar")
23 finish
24endif
25let g:loaded_tar= "v26"
26if v:version < 702
27 echohl WarningMsg
28 echo "***warning*** this version of tar needs vim 7.2"
29 echohl Normal
30 finish
31endif
32let s:keepcpo= &cpo
33set cpo&vim
34"call Decho("loading autoload/tar.vim")
35
36" ---------------------------------------------------------------------
37"  Default Settings: {{{1
38if !exists("g:tar_browseoptions")
39 let g:tar_browseoptions= "Ptf"
40endif
41if !exists("g:tar_readoptions")
42 let g:tar_readoptions= "OPxf"
43endif
44if !exists("g:tar_cmd")
45 let g:tar_cmd= "tar"
46endif
47if !exists("g:tar_writeoptions")
48 let g:tar_writeoptions= "uf"
49endif
50if !exists("g:tar_copycmd")
51 if !exists("g:netrw_localcopycmd")
52  if has("win32") || has("win95") || has("win64") || has("win16")
53   if g:netrw_cygwin
54    let g:netrw_localcopycmd= "cp"
55   else
56    let g:netrw_localcopycmd= "copy"
57   endif
58  elseif has("unix") || has("macunix")
59   let g:netrw_localcopycmd= "cp"
60  else
61   let g:netrw_localcopycmd= ""
62  endif
63 endif
64 let g:tar_copycmd= g:netrw_localcopycmd
65endif
66if !exists("g:netrw_cygwin")
67 if has("win32") || has("win95") || has("win64") || has("win16")
68  if &shell =~ '\%(\<bash\>\|\<zsh\>\)\%(\.exe\)\=$'
69   let g:netrw_cygwin= 1
70  else
71   let g:netrw_cygwin= 0
72  endif
73 else
74  let g:netrw_cygwin= 0
75 endif
76endif
77if !exists("g:tar_extractcmd")
78 let g:tar_extractcmd= "tar -xf"
79endif
80
81" set up shell quoting character
82if !exists("g:tar_shq")
83 if exists("&shq") && &shq != ""
84  let g:tar_shq= &shq
85 elseif has("win32") || has("win95") || has("win64") || has("win16")
86  if exists("g:netrw_cygwin") && g:netrw_cygwin
87   let g:tar_shq= "'"
88  else
89   let g:tar_shq= '"'
90  endif
91 else
92  let g:tar_shq= "'"
93 endif
94" call Decho("g:tar_shq<".g:tar_shq.">")
95endif
96
97" ----------------
98"  Functions: {{{1
99" ----------------
100
101" ---------------------------------------------------------------------
102" tar#Browse: {{{2
103fun! tar#Browse(tarfile)
104"  call Dfunc("tar#Browse(tarfile<".a:tarfile.">)")
105  let repkeep= &report
106  set report=10
107
108  " sanity checks
109  if !executable(g:tar_cmd)
110   redraw!
111   echohl Error | echo '***error*** (tar#Browse) "'.g:tar_cmd.'" not available on your system'
112   let &report= repkeep
113"   call Dret("tar#Browse")
114   return
115  endif
116  if !filereadable(a:tarfile)
117"   call Decho('a:tarfile<'.a:tarfile.'> not filereadable')
118   if a:tarfile !~# '^\a\+://'
119    " if its an url, don't complain, let url-handlers such as vim do its thing
120    redraw!
121    echohl Error | echo "***error*** (tar#Browse) File not readable<".a:tarfile.">" | echohl None
122   endif
123   let &report= repkeep
124"   call Dret("tar#Browse : file<".a:tarfile."> not readable")
125   return
126  endif
127  if &ma != 1
128   set ma
129  endif
130  let b:tarfile= a:tarfile
131
132  setlocal noswapfile
133  setlocal buftype=nofile
134  setlocal bufhidden=hide
135  setlocal nobuflisted
136  setlocal nowrap
137  set ft=tar
138
139  " give header
140"  call Decho("printing header")
141  let lastline= line("$")
142  call setline(lastline+1,'" tar.vim version '.g:loaded_tar)
143  call setline(lastline+2,'" Browsing tarfile '.a:tarfile)
144  call setline(lastline+3,'" Select a file with cursor and press ENTER')
145  $put =''
146  0d
147  $
148
149  let tarfile= a:tarfile
150  if has("win32") && executable("cygpath")
151   " assuming cygwin
152   let tarfile=substitute(system("cygpath -u ".shellescape(tarfile,0)),'\n$','','e')
153  endif
154  let curlast= line("$")
155  if tarfile =~# '\.\(gz\|tgz\)$'
156"   call Decho("1: exe silent r! gzip -d -c -- ".shellescape(tarfile,1)." | ".g:tar_cmd." -".g:tar_browseoptions." - ")
157   exe "silent r! gzip -d -c -- ".shellescape(tarfile,1)." | ".g:tar_cmd." -".g:tar_browseoptions." - "
158  elseif tarfile =~# '\.lrp'
159"   call Decho("2: exe silent r! cat -- ".shellescape(tarfile,1)."|gzip -d -c -|".g:tar_cmd." -".g:tar_browseoptions." - ")
160   exe "silent r! cat -- ".shellescape(tarfile,1)."|gzip -d -c -|".g:tar_cmd." -".g:tar_browseoptions." - "
161  elseif tarfile =~# '\.bz2$'
162"   call Decho("3: exe silent r! bzip2 -d -c -- ".shellescape(tarfile,1)." | ".g:tar_cmd." -".g:tar_browseoptions." - ")
163   exe "silent r! bzip2 -d -c -- ".shellescape(tarfile,1)." | ".g:tar_cmd." -".g:tar_browseoptions." - "
164  elseif tarfile =~# '\.lzma$'
165"   call Decho("3: exe silent r! lzma -d -c -- ".shellescape(tarfile,1)." | ".g:tar_cmd." -".g:tar_browseoptions." - ")
166   exe "silent r! lzma -d -c -- ".shellescape(tarfile,1)." | ".g:tar_cmd." -".g:tar_browseoptions." - "
167  elseif tarfile =~# '\.\(xz\|txz\)$'
168"   call Decho("3: exe silent r! xz --decompress --stdout -- ".shellescape(tarfile,1)." | ".g:tar_cmd." -".g:tar_browseoptions." - ")
169   exe "silent r! xz --decompress --stdout -- ".shellescape(tarfile,1)." | ".g:tar_cmd." -".g:tar_browseoptions." - "
170  else
171   if tarfile =~ '^\s*-'
172    " A file name starting with a dash is taken as an option.  Prepend ./ to avoid that.
173    let tarfile = substitute(tarfile, '-', './-', '')
174   endif
175"   call Decho("4: exe silent r! ".g:tar_cmd." -".g:tar_browseoptions." ".shellescape(tarfile,0))
176   exe "silent r! ".g:tar_cmd." -".g:tar_browseoptions." ".shellescape(tarfile,1)
177  endif
178  if v:shell_error != 0
179   redraw!
180   echohl WarningMsg | echo "***warning*** (tar#Browse) please check your g:tar_browseoptions<".g:tar_browseoptions.">"
181"   call Dret("tar#Browse : a:tarfile<".a:tarfile.">")
182   return
183  endif
184  if line("$") == curlast || ( line("$") == (curlast + 1) && getline("$") =~ '\c\%(warning\|error\|inappropriate\|unrecognized\)')
185   redraw!
186   echohl WarningMsg | echo "***warning*** (tar#Browse) ".a:tarfile." doesn't appear to be a tar file" | echohl None
187   silent %d
188   let eikeep= &ei
189   set ei=BufReadCmd,FileReadCmd
190   exe "r ".fnameescape(a:tarfile)
191   let &ei= eikeep
192   1d
193"   call Dret("tar#Browse : a:tarfile<".a:tarfile.">")
194   return
195  endif
196
197  setlocal noma nomod ro
198  noremap <silent> <buffer> <cr> :call <SID>TarBrowseSelect()<cr>
199
200  let &report= repkeep
201"  call Dret("tar#Browse : b:tarfile<".b:tarfile.">")
202endfun
203
204" ---------------------------------------------------------------------
205" TarBrowseSelect: {{{2
206fun! s:TarBrowseSelect()
207"  call Dfunc("TarBrowseSelect() b:tarfile<".b:tarfile."> curfile<".expand("%").">")
208  let repkeep= &report
209  set report=10
210  let fname= getline(".")
211"  call Decho("fname<".fname.">")
212
213  if !exists("g:tar_secure") && fname =~ '^\s*-\|\s\+-'
214   redraw!
215   echohl WarningMsg | echo '***warning*** (tar#BrowseSelect) rejecting tarfile member<'.fname.'> because of embedded "-"'
216"   call Dret('tar#BrowseSelect : rejecting tarfile member<'.fname.'> because of embedded "-"')
217   return
218  endif
219
220  " sanity check
221  if fname =~ '^"'
222   let &report= repkeep
223"   call Dret("TarBrowseSelect")
224   return
225  endif
226
227  " about to make a new window, need to use b:tarfile
228  let tarfile= b:tarfile
229  let curfile= expand("%")
230  if has("win32") && executable("cygpath")
231   " assuming cygwin
232   let tarfile=substitute(system("cygpath -u ".shellescape(tarfile,0)),'\n$','','e')
233  endif
234
235  new
236  if !exists("g:tar_nomax") || g:tar_nomax == 0
237   wincmd _
238  endif
239  let s:tblfile_{winnr()}= curfile
240  call tar#Read("tarfile:".tarfile.'::'.fname,1)
241  filetype detect
242
243  let &report= repkeep
244"  call Dret("TarBrowseSelect : s:tblfile_".winnr()."<".s:tblfile_{winnr()}.">")
245endfun
246
247" ---------------------------------------------------------------------
248" tar#Read: {{{2
249fun! tar#Read(fname,mode)
250"  call Dfunc("tar#Read(fname<".a:fname.">,mode=".a:mode.")")
251  let repkeep= &report
252  set report=10
253  let tarfile = substitute(a:fname,'tarfile:\(.\{-}\)::.*$','\1','')
254  let fname   = substitute(a:fname,'tarfile:.\{-}::\(.*\)$','\1','')
255  if has("win32") && executable("cygpath")
256   " assuming cygwin
257   let tarfile=substitute(system("cygpath -u ".shellescape(tarfile,0)),'\n$','','e')
258  endif
259"  call Decho("tarfile<".tarfile.">")
260"  call Decho("fname<".fname.">")
261
262  if  fname =~ '\.bz2$' && executable("bzcat")
263   let decmp= "|bzcat"
264   let doro = 1
265  elseif      fname =~ '\.gz$'  && executable("zcat")
266   let decmp= "|zcat"
267   let doro = 1
268  elseif  fname =~ '\.lzma$' && executable("lzcat")
269   let decmp= "|lzcat"
270   let doro = 1
271  elseif  fname =~ '\.xz$' && executable("xzcat")
272   let decmp= "|xzcat"
273   let doro = 1
274  else
275   let decmp=""
276   let doro = 0
277   if fname =~ '\.bz2$\|\.gz$\|\.lzma$\|\.xz$\|\.zip$\|\.Z$'
278    setlocal bin
279   endif
280  endif
281
282  if exists("g:tar_secure")
283   let tar_secure= " -- "
284  else
285   let tar_secure= " "
286  endif
287  if tarfile =~# '\.bz2$'
288"   call Decho("7: exe silent r! bzip2 -d -c ".shellescape(tarfile,1)."| ".g:tar_cmd." -".g:tar_readoptions." - ".tar_secure.shellescape(fname,1).decmp)
289   exe "silent r! bzip2 -d -c -- ".shellescape(tarfile,1)."| ".g:tar_cmd." -".g:tar_readoptions." - ".tar_secure.shellescape(fname,1).decmp
290  elseif tarfile =~# '\.\(gz\|tgz\)$'
291"   call Decho("5: exe silent r! gzip -d -c -- ".shellescape(tarfile,1)."| ".g:tar_cmd.' -'.g:tar_readoptions.' - '.tar_secure.shellescape(fname,1))
292   exe "silent r! gzip -d -c -- ".shellescape(tarfile,1)."| ".g:tar_cmd." -".g:tar_readoptions." - ".tar_secure.shellescape(fname,1).decmp
293  elseif tarfile =~# '\.lrp$'
294"   call Decho("6: exe silent r! cat ".shellescape(tarfile,1)." | gzip -d -c - | ".g:tar_cmd." -".g:tar_readoptions." - ".tar_secure.shellescape(fname,1).decmp)
295   exe "silent r! cat -- ".shellescape(tarfile,1)." | gzip -d -c - | ".g:tar_cmd." -".g:tar_readoptions." - ".tar_secure.shellescape(fname,1).decmp
296  elseif tarfile =~# '\.lzma$'
297"   call Decho("7: exe silent r! lzma -d -c ".shellescape(tarfile,1)."| ".g:tar_cmd." -".g:tar_readoptions." - ".tar_secure.shellescape(fname,1).decmp)
298   exe "silent r! lzma -d -c -- ".shellescape(tarfile,1)."| ".g:tar_cmd." -".g:tar_readoptions." - ".tar_secure.shellescape(fname,1).decmp
299  elseif tarfile =~# '\.\(xz\|txz\)$'
300"   call Decho("3: exe silent r! xz --decompress --stdout -- ".shellescape(tarfile,1)." | ".g:tar_cmd." -".g:tar_readoptions." - ".tar_secure.shellescape(fname,1).decmp)
301   exe "silent r! xz --decompress --stdout -- ".shellescape(tarfile,1)." | ".g:tar_cmd." -".g:tar_readoptions." - ".tar_secure.shellescape(fname,1).decmp
302  else
303   if tarfile =~ '^\s*-'
304    " A file name starting with a dash is taken as an option.  Prepend ./ to avoid that.
305    let tarfile = substitute(tarfile, '-', './-', '')
306   endif
307"   call Decho("8: exe silent r! ".g:tar_cmd." -".g:tar_readoptions.tar_secure.shellescape(tarfile,1)." ".shellescape(fname,1).decmp)
308   exe "silent r! ".g:tar_cmd." -".g:tar_readoptions.shellescape(tarfile,1)." ".tar_secure.shellescape(fname,1).decmp
309  endif
310
311  if doro
312   " because the reverse process of compressing changed files back into the tarball is not currently supported
313   setlocal ro
314  endif
315
316  let b:tarfile= a:fname
317  exe "file tarfile::".fnameescape(fname)
318
319  " cleanup
320  0d
321  set nomod
322
323  let &report= repkeep
324"  call Dret("tar#Read : b:tarfile<".b:tarfile.">")
325endfun
326
327" ---------------------------------------------------------------------
328" tar#Write: {{{2
329fun! tar#Write(fname)
330"  call Dfunc("tar#Write(fname<".a:fname.">) b:tarfile<".b:tarfile."> tblfile_".winnr()."<".s:tblfile_{winnr()}.">")
331  let repkeep= &report
332  set report=10
333
334  if !exists("g:tar_secure") && a:fname =~ '^\s*-\|\s\+-'
335   redraw!
336   echohl WarningMsg | echo '***warning*** (tar#Write) rejecting tarfile member<'.a:fname.'> because of embedded "-"'
337"   call Dret('tar#Write : rejecting tarfile member<'.fname.'> because of embedded "-"')
338   return
339  endif
340
341  " sanity checks
342  if !executable(g:tar_cmd)
343   redraw!
344   echohl Error | echo '***error*** (tar#Browse) "'.g:tar_cmd.'" not available on your system'
345   let &report= repkeep
346"   call Dret("tar#Write")
347   return
348  endif
349  if !exists("*mkdir")
350   redraw!
351   echohl Error | echo "***error*** (tar#Write) sorry, mkdir() doesn't work on your system" | echohl None
352   let &report= repkeep
353"   call Dret("tar#Write")
354   return
355  endif
356
357  let curdir= getcwd()
358  let tmpdir= tempname()
359"  call Decho("orig tempname<".tmpdir.">")
360  if tmpdir =~ '\.'
361   let tmpdir= substitute(tmpdir,'\.[^.]*$','','e')
362  endif
363"  call Decho("tmpdir<".tmpdir.">")
364  call mkdir(tmpdir,"p")
365
366  " attempt to change to the indicated directory
367  try
368   exe "cd ".fnameescape(tmpdir)
369  catch /^Vim\%((\a\+)\)\=:E344/
370   redraw!
371   echohl Error | echo "***error*** (tar#Write) cannot cd to temporary directory" | Echohl None
372   let &report= repkeep
373"   call Dret("tar#Write")
374   return
375  endtry
376"  call Decho("current directory now: ".getcwd())
377
378  " place temporary files under .../_ZIPVIM_/
379  if isdirectory("_ZIPVIM_")
380   call s:Rmdir("_ZIPVIM_")
381  endif
382  call mkdir("_ZIPVIM_")
383  cd _ZIPVIM_
384"  call Decho("current directory now: ".getcwd())
385
386  let tarfile = substitute(b:tarfile,'tarfile:\(.\{-}\)::.*$','\1','')
387  let fname   = substitute(b:tarfile,'tarfile:.\{-}::\(.*\)$','\1','')
388
389  " handle compressed archives
390  if tarfile =~# '\.bz2'
391   call system("bzip2 -d -- ".shellescape(tarfile,0))
392   let tarfile = substitute(tarfile,'\.bz2','','e')
393   let compress= "bzip2 -- ".shellescape(tarfile,0)
394"   call Decho("compress<".compress.">")
395  elseif tarfile =~# '\.gz'
396   call system("gzip -d -- ".shellescape(tarfile,0))
397   let tarfile = substitute(tarfile,'\.gz','','e')
398   let compress= "gzip -- ".shellescape(tarfile,0)
399"   call Decho("compress<".compress.">")
400  elseif tarfile =~# '\.tgz'
401   call system("gzip -d -- ".shellescape(tarfile,0))
402   let tarfile = substitute(tarfile,'\.tgz','.tar','e')
403   let compress= "gzip -- ".shellescape(tarfile,0)
404   let tgz     = 1
405"   call Decho("compress<".compress.">")
406  elseif tarfile =~# '\.xz'
407   call system("xz -d -- ".shellescape(tarfile,0))
408   let tarfile = substitute(tarfile,'\.xz','','e')
409   let compress= "xz -- ".shellescape(tarfile,0)
410"   call Decho("compress<".compress.">")
411  elseif tarfile =~# '\.lzma'
412   call system("lzma -d -- ".shellescape(tarfile,0))
413   let tarfile = substitute(tarfile,'\.lzma','','e')
414   let compress= "lzma -- ".shellescape(tarfile,0)
415"   call Decho("compress<".compress.">")
416  endif
417"  call Decho("tarfile<".tarfile.">")
418
419  if v:shell_error != 0
420   redraw!
421   echohl Error | echo "***error*** (tar#Write) sorry, unable to update ".tarfile." with ".fname | echohl None
422  else
423
424"   call Decho("tarfile<".tarfile."> fname<".fname.">")
425 
426   if fname =~ '/'
427    let dirpath = substitute(fname,'/[^/]\+$','','e')
428    if executable("cygpath")
429     let dirpath = substitute(system("cygpath ".shellescape(dirpath, 0)),'\n','','e')
430    endif
431    call mkdir(dirpath,"p")
432   endif
433   if tarfile !~ '/'
434    let tarfile= curdir.'/'.tarfile
435   endif
436   if tarfile =~ '^\s*-'
437    " A file name starting with a dash may be taken as an option.  Prepend ./ to avoid that.
438    let tarfile = substitute(tarfile, '-', './-', '')
439   endif
440"   call Decho("tarfile<".tarfile."> fname<".fname.">")
441 
442   if exists("g:tar_secure")
443    let tar_secure= " -- "
444   else
445    let tar_secure= " "
446   endif
447   exe "w! ".fnameescape(fname)
448   if executable("cygpath")
449    let tarfile = substitute(system("cygpath ".shellescape(tarfile,0)),'\n','','e')
450   endif
451 
452   " delete old file from tarfile
453"   call Decho("system(".g:tar_cmd." --delete -f ".shellescape(tarfile,0)." -- ".shellescape(fname,0).")")
454   call system(g:tar_cmd." --delete -f ".shellescape(tarfile,0).tar_secure.shellescape(fname,0))
455   if v:shell_error != 0
456    redraw!
457    echohl Error | echo "***error*** (tar#Write) sorry, unable to update ".fnameescape(tarfile)." with ".fnameescape(fname) | echohl None
458   else
459 
460    " update tarfile with new file 
461"    call Decho(g:tar_cmd." -".g:tar_writeoptions." ".shellescape(tarfile,0).tar_secure.shellescape(fname,0))
462    call system(g:tar_cmd." -".g:tar_writeoptions." ".shellescape(tarfile,0).tar_secure.shellescape(fname,0))
463    if v:shell_error != 0
464     redraw!
465     echohl Error | echo "***error*** (tar#Write) sorry, unable to update ".fnameescape(tarfile)." with ".fnameescape(fname) | echohl None
466    elseif exists("compress")
467"     call Decho("call system(".compress.")")
468     call system(compress)
469     if exists("tgz")
470"      call Decho("rename(".tarfile.".gz,".substitute(tarfile,'\.tar$','.tgz','e').")")
471      call rename(tarfile.".gz",substitute(tarfile,'\.tar$','.tgz','e'))
472     endif
473    endif
474   endif
475
476   " support writing tarfiles across a network
477   if s:tblfile_{winnr()} =~ '^\a\+://'
478"    call Decho("handle writing <".tarfile."> across network to <".s:tblfile_{winnr()}.">")
479    let tblfile= s:tblfile_{winnr()}
480    1split|enew
481    let binkeep= &l:binary
482    let eikeep = &ei
483    set binary ei=all
484    exe "e! ".fnameescape(tarfile)
485    call netrw#NetWrite(tblfile)
486    let &ei       = eikeep
487    let &l:binary = binkeep
488    q!
489    unlet s:tblfile_{winnr()}
490   endif
491  endif
492  
493  " cleanup and restore current directory
494  cd ..
495  call s:Rmdir("_ZIPVIM_")
496  exe "cd ".fnameescape(curdir)
497  setlocal nomod
498
499  let &report= repkeep
500"  call Dret("tar#Write")
501endfun
502
503" ---------------------------------------------------------------------
504" s:Rmdir: {{{2
505fun! s:Rmdir(fname)
506"  call Dfunc("Rmdir(fname<".a:fname.">)")
507  if has("unix")
508   call system("/bin/rm -rf -- ".shellescape(a:fname,0))
509  elseif has("win32") || has("win95") || has("win64") || has("win16")
510   if &shell =~? "sh$"
511    call system("/bin/rm -rf -- ".shellescape(a:fname,0))
512   else
513    call system("del /S ".shellescape(a:fname,0))
514   endif
515  endif
516"  call Dret("Rmdir")
517endfun
518
519" ---------------------------------------------------------------------
520" tar#Vimuntar: installs a tarball in the user's .vim / vimfiles directory {{{2
521fun! tar#Vimuntar(...)
522"  call Dfunc("tar#Vimuntar() a:0=".a:0." a:1<".(exists("a:1")? a:1 : "-n/a-").">")
523  let tarball = expand("%")
524"  call Decho("tarball<".tarball.">")
525  let tarbase = substitute(tarball,'\..*$','','')
526"  call Decho("tarbase<".tarbase.">")
527  let tarhome = expand("%:p")
528  if has("win32") || has("win95") || has("win64") || has("win16")
529   let tarhome= substitute(tarhome,'\\','/','g')
530  endif
531  let tarhome= substitute(tarhome,'/[^/]*$','','')
532"  call Decho("tarhome<".tarhome.">")
533  let tartail = expand("%:t")
534"  call Decho("tartail<".tartail.">")
535  let curdir  = getcwd()
536"  call Decho("curdir <".curdir.">")
537  " set up vimhome
538  if a:0 > 0 && a:1 != ""
539   let vimhome= a:1
540  else
541   let vimhome= vimball#VimballHome()
542  endif
543"  call Decho("vimhome<".vimhome.">")
544
545"  call Decho("curdir<".curdir."> vimhome<".vimhome.">")
546  if simplify(curdir) != simplify(vimhome)
547   " copy (possibly compressed) tarball to .vim/vimfiles
548"   call Decho(netrw#WinPath(g:tar_copycmd)." ".shellescape(tartail)." ".shellescape(vimhome))
549   call system(netrw#WinPath(g:tar_copycmd)." ".shellescape(tartail)." ".shellescape(vimhome))
550"   call Decho("exe cd ".fnameescape(vimhome))
551   exe "cd ".fnameescape(vimhome)
552  endif
553"  call Decho("getcwd<".getcwd().">")
554
555  " if necessary, decompress the tarball; then, extract it
556  if tartail =~ '\.tgz'
557   if executable("gunzip")
558    silent exe "!gunzip ".shellescape(tartail)
559   elseif executable("gzip")
560    silent exe "!gzip -d ".shellescape(tartail)
561   else
562    echoerr "unable to decompress<".tartail."> on this sytem"
563    if simplify(curdir) != simplify(tarhome)
564     " remove decompressed tarball, restore directory
565"     call Decho("delete(".tartail.".tar)")
566     call delete(tartail.".tar")
567"     call Decho("exe cd ".fnameescape(curdir))
568     exe "cd ".fnameescape(curdir)
569    endif
570"    call Dret("tar#Vimuntar")
571    return
572   endif
573  else
574   call vimball#Decompress(tartail,0)
575  endif
576  let extractcmd= netrw#WinPath(g:tar_extractcmd)
577"  call Decho("system(".extractcmd." ".shellescape(tarbase.".tar").")")
578  call system(extractcmd." ".shellescape(tarbase.".tar"))
579
580  " set up help
581  if filereadable("doc/".tarbase.".txt")
582"   call Decho("exe helptags ".getcwd()."/doc")
583   exe "helptags ".getcwd()."/doc"
584  endif
585
586  if simplify(tarhome) != simplify(vimhome)
587   " remove decompressed tarball, restore directory
588   call delete(vimhome."/".tarbase.".tar")
589   exe "cd ".fnameescape(curdir)
590  endif
591
592"  call Dret("tar#Vimuntar")
593endfun
594
595" =====================================================================
596" Modelines And Restoration: {{{1
597let &cpo= s:keepcpo
598unlet s:keepcpo
599" vim:ts=8 fdm=marker
600