xref: /vim-8.2.3635/runtime/autoload/tar.vim (revision d68071d8)
1a5792f58SBram Moolenaar" tar.vim: Handles browsing tarfiles
2a5792f58SBram Moolenaar"            AUTOLOAD PORTION
3*d68071d8SBram Moolenaar" Date:			May 02, 2006
4*d68071d8SBram Moolenaar" Version:		9
5a5792f58SBram Moolenaar" Maintainer:	Charles E Campbell, Jr <drchipNOSPAM at campbellfamily dot biz>
6a5792f58SBram Moolenaar" License:		Vim License  (see vim's :help license)
787e25fdfSBram Moolenaar"
8a5792f58SBram Moolenaar"	Contains many ideas from Michael Toren's <tar.vim>
987e25fdfSBram Moolenaar"
10a5792f58SBram Moolenaar" Copyright:    Copyright (C) 2005 Charles E. Campbell, Jr. {{{1
11a5792f58SBram Moolenaar"               Permission is hereby granted to use and distribute this code,
12a5792f58SBram Moolenaar"               with or without modifications, provided that this copyright
13a5792f58SBram Moolenaar"               notice is copied with it. Like anything else that's free,
14a5792f58SBram Moolenaar"               tarPlugin.vim is provided *as is* and comes with no warranty
15a5792f58SBram Moolenaar"               of any kind, either expressed or implied. By using this
16a5792f58SBram Moolenaar"               plugin, you agree that in no event will the copyright
17a5792f58SBram Moolenaar"               holder be liable for any damages resulting from the use
18a5792f58SBram Moolenaar"               of this software.
1987e25fdfSBram Moolenaar
20ab194816SBram Moolenaar" ---------------------------------------------------------------------
21a5792f58SBram Moolenaar" Initialization: {{{1
22a5792f58SBram Moolenaarlet s:keepcpo= &cpo
23a5792f58SBram Moolenaarset cpo&vim
24a5792f58SBram Moolenaarif exists("g:loaded_tar")
25a5792f58SBram Moolenaar finish
26a5792f58SBram Moolenaarendif
27*d68071d8SBram Moolenaarlet g:loaded_tar= "v9"
28910f66f9SBram Moolenaar"call Decho("loading autoload/tar.vim")
2987e25fdfSBram Moolenaar
30a5792f58SBram Moolenaar" ---------------------------------------------------------------------
31a5792f58SBram Moolenaar"  Default Settings: {{{1
32a5792f58SBram Moolenaarif !exists("g:tar_browseoptions")
33a5792f58SBram Moolenaar let g:tar_browseoptions= "Ptf"
34a5792f58SBram Moolenaarendif
35a5792f58SBram Moolenaarif !exists("g:tar_readoptions")
36a5792f58SBram Moolenaar let g:tar_readoptions= "OPxf"
37a5792f58SBram Moolenaarendif
38910f66f9SBram Moolenaarif !exists("g:tar_cmd")
39910f66f9SBram Moolenaar let g:tar_cmd= "tar"
40910f66f9SBram Moolenaarendif
41a5792f58SBram Moolenaarif !exists("g:tar_writeoptions")
42a5792f58SBram Moolenaar let g:tar_writeoptions= "uf"
43a5792f58SBram Moolenaarendif
44a5792f58SBram Moolenaar
45a5792f58SBram Moolenaar" ----------------
46a5792f58SBram Moolenaar"  Functions: {{{1
47a5792f58SBram Moolenaar" ----------------
48a5792f58SBram Moolenaar
49a5792f58SBram Moolenaar" ---------------------------------------------------------------------
50a5792f58SBram Moolenaar" tar#Browse: {{{2
51a5792f58SBram Moolenaarfun! tar#Browse(tarfile)
52a5792f58SBram Moolenaar"  call Dfunc("tar#Browse(tarfile<".a:tarfile.">)")
53bba577a2SBram Moolenaar  let repkeep= &report
54bba577a2SBram Moolenaar  set report=10
55a5792f58SBram Moolenaar
56a5792f58SBram Moolenaar  " sanity checks
57910f66f9SBram Moolenaar  if !executable(g:tar_cmd)
58910f66f9SBram Moolenaar   echohl Error | echo '***error*** (tar#Browse) "'.g:tar_cmd.'" not available on your system'
59a5792f58SBram Moolenaar   call inputsave()|call input("Press <cr> to continue")|call inputrestore()
60bba577a2SBram Moolenaar   let &report= repkeep
61a5792f58SBram Moolenaar"   call Dret("tar#Browse")
6287e25fdfSBram Moolenaar   return
6387e25fdfSBram Moolenaar  endif
64a5792f58SBram Moolenaar  if !filereadable(a:tarfile)
65910f66f9SBram Moolenaar"   call Decho('a:tarfile<'.a:tarfile.'> not filereadable')
66a5792f58SBram Moolenaar   if a:tarfile !~# '^\a\+://'
67a5792f58SBram Moolenaar    " if its an url, don't complain, let url-handlers such as vim do its thing
68a5792f58SBram Moolenaar    echohl Error | echo "***error*** (tar#Browse) File not readable<".a:tarfile.">" | echohl None
69a5792f58SBram Moolenaar    call inputsave()|call input("Press <cr> to continue")|call inputrestore()
7087e25fdfSBram Moolenaar   endif
71bba577a2SBram Moolenaar   let &report= repkeep
72a5792f58SBram Moolenaar"   call Dret("tar#Browse : file<".a:tarfile."> not readable")
7387e25fdfSBram Moolenaar   return
7487e25fdfSBram Moolenaar  endif
75a5792f58SBram Moolenaar  if &ma != 1
76a5792f58SBram Moolenaar   set ma
7787e25fdfSBram Moolenaar  endif
78a5792f58SBram Moolenaar  let w:tarfile= a:tarfile
79a5792f58SBram Moolenaar
80a5792f58SBram Moolenaar  setlocal noswapfile
81a5792f58SBram Moolenaar  setlocal buftype=nofile
82a5792f58SBram Moolenaar  setlocal bufhidden=hide
83a5792f58SBram Moolenaar  setlocal nobuflisted
84a5792f58SBram Moolenaar  setlocal nowrap
85a5792f58SBram Moolenaar  set ft=tar
86a5792f58SBram Moolenaar
87a5792f58SBram Moolenaar  " give header
88910f66f9SBram Moolenaar"  call Decho("printing header")
89a5792f58SBram Moolenaar  exe "$put ='".'\"'." tar.vim version ".g:loaded_tar."'"
90a5792f58SBram Moolenaar  exe "$put ='".'\"'." Browsing tarfile ".a:tarfile."'"
91a5792f58SBram Moolenaar  exe "$put ='".'\"'." Select a file with cursor and press ENTER"."'"
92a5792f58SBram Moolenaar  0d
93a5792f58SBram Moolenaar  $
94a5792f58SBram Moolenaar
95910f66f9SBram Moolenaar  let tarfile= a:tarfile
96910f66f9SBram Moolenaar  if has("win32") && executable("cygpath")
97910f66f9SBram Moolenaar   " assuming cygwin
98910f66f9SBram Moolenaar   let tarfile=substitute(system("cygpath -u ".tarfile),'\n$','','e')
99a5792f58SBram Moolenaar  endif
100*d68071d8SBram Moolenaar  let curlast= line("$")
101910f66f9SBram Moolenaar  if tarfile =~# '\.\(gz\|tgz\)$'
102910f66f9SBram Moolenaar"   call Decho("exe silent r! gzip -d -c '".tarfile."'| tar -".g:tar_browseoptions." - ")
103910f66f9SBram Moolenaar   exe "silent r! gzip -d -c '".tarfile."'| tar -".g:tar_browseoptions." - "
104910f66f9SBram Moolenaar  elseif tarfile =~# '\.bz2$'
105910f66f9SBram Moolenaar"   call Decho("exe silent r! bzip2 -d -c '".tarfile."'| tar -".g:tar_browseoptions." - ")
106910f66f9SBram Moolenaar   exe "silent r! bzip2 -d -c '".tarfile."'| tar -".g:tar_browseoptions." - "
107910f66f9SBram Moolenaar  else
108910f66f9SBram Moolenaar"   call Decho("exe silent r! ".g:tar_cmd." -".g:tar_browseoptions." '".tarfile."'")
109910f66f9SBram Moolenaar   exe "silent r! ".g:tar_cmd." -".g:tar_browseoptions." '".tarfile."'"
110910f66f9SBram Moolenaar  endif
111910f66f9SBram Moolenaar  if v:shell_error != 0
112*d68071d8SBram Moolenaar   echohl WarningMsg | echo "***warning*** (tar#Browse) please check your g:tar_browseoptions<".g:tar_browseoptions.">"
113*d68071d8SBram Moolenaar   call inputsave()|call input("Press <cr> to continue")|call inputrestore()
114*d68071d8SBram Moolenaar"   call Dret("tar#Browse : a:tarfile<".a:tarfile.">")
115*d68071d8SBram Moolenaar   silent %d
116*d68071d8SBram Moolenaar   let eikeep= &ei
117*d68071d8SBram Moolenaar   set ei=BufReadCmd,FileReadCmd
118*d68071d8SBram Moolenaar   exe "r ".a:tarfile
119*d68071d8SBram Moolenaar   let &ei= eikeep
120*d68071d8SBram Moolenaar   1d
121*d68071d8SBram Moolenaar   return
122*d68071d8SBram Moolenaar  endif
123*d68071d8SBram Moolenaar  if line("$") == curlast || ( line("$") == (curlast + 1) && getline("$") =~? '\c\%(warning\|error\|inappropriate\|unrecognized\)')
124*d68071d8SBram Moolenaar   echohl WarningMsg | echo "***warning*** (tar#Browse) ".a:tarfile." doesn't appear to be a tar file" | echohl None
125*d68071d8SBram Moolenaar   call inputsave()|call input("Press <cr> to continue")|call inputrestore()
126*d68071d8SBram Moolenaar   silent %d
127*d68071d8SBram Moolenaar   let eikeep= &ei
128*d68071d8SBram Moolenaar   set ei=BufReadCmd,FileReadCmd
129*d68071d8SBram Moolenaar   exe "r ".a:tarfile
130*d68071d8SBram Moolenaar   let &ei= eikeep
131*d68071d8SBram Moolenaar   1d
132*d68071d8SBram Moolenaar"   call Dret("tar#Browse : a:tarfile<".a:tarfile.">")
133910f66f9SBram Moolenaar   return
134910f66f9SBram Moolenaar  endif
135a5792f58SBram Moolenaar
136a5792f58SBram Moolenaar  setlocal noma nomod ro
137a5792f58SBram Moolenaar  noremap <silent> <buffer> <cr> :call <SID>TarBrowseSelect()<cr>
138a5792f58SBram Moolenaar
139bba577a2SBram Moolenaar  let &report= repkeep
140a5792f58SBram Moolenaar"  call Dret("tar#Browse : w:tarfile<".w:tarfile.">")
141ab194816SBram Moolenaarendfun
14287e25fdfSBram Moolenaar
143ab194816SBram Moolenaar" ---------------------------------------------------------------------
144a5792f58SBram Moolenaar" TarBrowseSelect: {{{2
145a5792f58SBram Moolenaarfun! s:TarBrowseSelect()
146a5792f58SBram Moolenaar"  call Dfunc("TarBrowseSelect() w:tarfile<".w:tarfile."> curfile<".expand("%").">")
147bba577a2SBram Moolenaar  let repkeep= &report
148bba577a2SBram Moolenaar  set report=10
149a5792f58SBram Moolenaar  let fname= getline(".")
150a5792f58SBram Moolenaar"  call Decho("fname<".fname.">")
151a5792f58SBram Moolenaar
152a5792f58SBram Moolenaar  " sanity check
153a5792f58SBram Moolenaar  if fname =~ '^"'
154bba577a2SBram Moolenaar   let &report= repkeep
155a5792f58SBram Moolenaar"   call Dret("TarBrowseSelect")
156a5792f58SBram Moolenaar   return
157a5792f58SBram Moolenaar  endif
158a5792f58SBram Moolenaar
159a5792f58SBram Moolenaar  " about to make a new window, need to use w:tarfile
160a5792f58SBram Moolenaar  let tarfile= w:tarfile
161a5792f58SBram Moolenaar  let curfile= expand("%")
162910f66f9SBram Moolenaar  if has("win32") && executable("cygpath")
163910f66f9SBram Moolenaar   " assuming cygwin
164910f66f9SBram Moolenaar   let tarfile=substitute(system("cygpath -u ".tarfile),'\n$','','e')
165910f66f9SBram Moolenaar  endif
166a5792f58SBram Moolenaar
167a5792f58SBram Moolenaar  new
168a5792f58SBram Moolenaar  wincmd _
169a5792f58SBram Moolenaar  let s:tblfile_{winnr()}= curfile
170910f66f9SBram Moolenaar  call tar#Read("tarfile:".tarfile.':'.fname,1)
171a5792f58SBram Moolenaar  filetype detect
172a5792f58SBram Moolenaar
173bba577a2SBram Moolenaar  let &report= repkeep
174a5792f58SBram Moolenaar"  call Dret("TarBrowseSelect : s:tblfile_".winnr()."<".s:tblfile_{winnr()}.">")
175a5792f58SBram Moolenaarendfun
176a5792f58SBram Moolenaar
177a5792f58SBram Moolenaar" ---------------------------------------------------------------------
178a5792f58SBram Moolenaar" tar#Read: {{{2
179a5792f58SBram Moolenaarfun! tar#Read(fname,mode)
180a5792f58SBram Moolenaar"  call Dfunc("tar#Read(fname<".a:fname.">,mode=".a:mode.")")
181bba577a2SBram Moolenaar  let repkeep= &report
182bba577a2SBram Moolenaar  set report=10
183a5792f58SBram Moolenaar  let tarfile = substitute(a:fname,'tarfile:\(.\{-}\):.*$','\1','')
184a5792f58SBram Moolenaar  let fname   = substitute(a:fname,'tarfile:.\{-}:\(.*\)$','\1','')
185910f66f9SBram Moolenaar  if has("win32") && executable("cygpath")
186910f66f9SBram Moolenaar   " assuming cygwin
187910f66f9SBram Moolenaar   let tarfile=substitute(system("cygpath -u ".tarfile),'\n$','','e')
188910f66f9SBram Moolenaar  endif
189910f66f9SBram Moolenaar"  call Decho("tarfile<".tarfile.">")
190910f66f9SBram Moolenaar"  call Decho("fname<".fname.">")
191a5792f58SBram Moolenaar
192a5792f58SBram Moolenaar  if tarfile =~# '\.\(gz\|tgz\)$'
193a5792f58SBram Moolenaar"   call Decho("exe silent r! gzip -d -c '".tarfile."'| tar -OPxf - '".fname."'")
194a5792f58SBram Moolenaar   exe "silent r! gzip -d -c '".tarfile."'| tar -".g:tar_readoptions." - '".fname."'"
1951cbe5f73SBram Moolenaar  elseif tarfile =~# '\.bz2$'
196a5792f58SBram Moolenaar"   call Decho("exe silent r! bzip2 -d -c '".tarfile."'| tar -".g:tar_readoptions." - '".fname."'")
197a5792f58SBram Moolenaar   exe "silent r! bzip2 -d -c '".tarfile."'| tar -".g:tar_readoptions." - '".fname."'"
198a5792f58SBram Moolenaar  else
199a5792f58SBram Moolenaar"   call Decho("exe silent r! tar -".g:tar_readoptions." '".tarfile."' '".fname."'")
200910f66f9SBram Moolenaar   exe "silent r! ".g:tar_cmd." -".g:tar_readoptions." '".tarfile."' '".fname."'"
201a5792f58SBram Moolenaar  endif
202a5792f58SBram Moolenaar  let w:tarfile= a:fname
203a5792f58SBram Moolenaar  exe "file tarfile:".fname
204a5792f58SBram Moolenaar
205a5792f58SBram Moolenaar  " cleanup
206a5792f58SBram Moolenaar  0d
207a5792f58SBram Moolenaar  set nomod
208a5792f58SBram Moolenaar
209bba577a2SBram Moolenaar  let &report= repkeep
210a5792f58SBram Moolenaar"  call Dret("tar#Read : w:tarfile<".w:tarfile.">")
211a5792f58SBram Moolenaarendfun
212a5792f58SBram Moolenaar
213a5792f58SBram Moolenaar" ---------------------------------------------------------------------
214a5792f58SBram Moolenaar" tar#Write: {{{2
215a5792f58SBram Moolenaarfun! tar#Write(fname)
216a5792f58SBram Moolenaar"  call Dfunc("tar#Write(fname<".a:fname.">) w:tarfile<".w:tarfile."> tblfile_".winnr()."<".s:tblfile_{winnr()}.">")
217bba577a2SBram Moolenaar  let repkeep= &report
218bba577a2SBram Moolenaar  set report=10
219a5792f58SBram Moolenaar
220ab194816SBram Moolenaar  " sanity checks
221910f66f9SBram Moolenaar  if !executable(g:tar_cmd)
222910f66f9SBram Moolenaar   echohl Error | echo '***error*** (tar#Browse) "'.g:tar_cmd.'" not available on your system'
223a5792f58SBram Moolenaar   call inputsave()|call input("Press <cr> to continue")|call inputrestore()
224bba577a2SBram Moolenaar   let &report= repkeep
225ab194816SBram Moolenaar"   call Dret("tar#Write")
226ab194816SBram Moolenaar   return
227ab194816SBram Moolenaar  endif
228ab194816SBram Moolenaar  if !exists("*mkdir")
229a5792f58SBram Moolenaar   echohl Error | echo "***error*** (tar#Write) sorry, mkdir() doesn't work on your system" | echohl None
230a5792f58SBram Moolenaar   call inputsave()|call input("Press <cr> to continue")|call inputrestore()
231bba577a2SBram Moolenaar   let &report= repkeep
232ab194816SBram Moolenaar"   call Dret("tar#Write")
233ab194816SBram Moolenaar   return
234ab194816SBram Moolenaar  endif
235ab194816SBram Moolenaar
236ab194816SBram Moolenaar  let curdir= getcwd()
237ab194816SBram Moolenaar  let tmpdir= tempname()
238ab194816SBram Moolenaar"  call Decho("orig tempname<".tmpdir.">")
239ab194816SBram Moolenaar  if tmpdir =~ '\.'
240ab194816SBram Moolenaar   let tmpdir= substitute(tmpdir,'\.[^.]*$','','e')
241ab194816SBram Moolenaar  endif
242ab194816SBram Moolenaar"  call Decho("tmpdir<".tmpdir.">")
243ab194816SBram Moolenaar  call mkdir(tmpdir,"p")
244ab194816SBram Moolenaar
245ab194816SBram Moolenaar  " attempt to change to the indicated directory
246ab194816SBram Moolenaar  try
247ab194816SBram Moolenaar   exe "cd ".escape(tmpdir,' \')
248ab194816SBram Moolenaar  catch /^Vim\%((\a\+)\)\=:E344/
249a5792f58SBram Moolenaar   echohl Error | echo "***error*** (tar#Write) cannot cd to temporary directory" | Echohl None
250a5792f58SBram Moolenaar   call inputsave()|call input("Press <cr> to continue")|call inputrestore()
251bba577a2SBram Moolenaar   let &report= repkeep
252ab194816SBram Moolenaar"   call Dret("tar#Write")
253ab194816SBram Moolenaar   return
254ab194816SBram Moolenaar  endtry
255ab194816SBram Moolenaar"  call Decho("current directory now: ".getcwd())
256ab194816SBram Moolenaar
257a5792f58SBram Moolenaar  " place temporary files under .../_ZIPVIM_/
258a5792f58SBram Moolenaar  if isdirectory("_ZIPVIM_")
259a5792f58SBram Moolenaar   call s:Rmdir("_ZIPVIM_")
260ab194816SBram Moolenaar  endif
261a5792f58SBram Moolenaar  call mkdir("_ZIPVIM_")
262a5792f58SBram Moolenaar  cd _ZIPVIM_
263ab194816SBram Moolenaar"  call Decho("current directory now: ".getcwd())
264ab194816SBram Moolenaar
265a5792f58SBram Moolenaar  let tarfile = substitute(w:tarfile,'tarfile:\(.\{-}\):.*$','\1','')
266a5792f58SBram Moolenaar  let fname   = substitute(w:tarfile,'tarfile:.\{-}:\(.*\)$','\1','')
267a5792f58SBram Moolenaar
268a5792f58SBram Moolenaar  " handle compressed archives
269a5792f58SBram Moolenaar  if tarfile =~# '\.gz'
270a5792f58SBram Moolenaar   call system("gzip -d ".tarfile)
271a5792f58SBram Moolenaar   let tarfile = substitute(tarfile,'\.gz','','e')
272a5792f58SBram Moolenaar   let compress= "gzip '".tarfile."'"
273a5792f58SBram Moolenaar  elseif tarfile =~# '\.tgz'
274a5792f58SBram Moolenaar   call system("gzip -d ".tarfile)
275a5792f58SBram Moolenaar   let tarfile = substitute(tarfile,'\.tgz','.tar','e')
276a5792f58SBram Moolenaar   let compress= "gzip '".tarfile."'"
277a5792f58SBram Moolenaar   let tgz     = 1
278a5792f58SBram Moolenaar  elseif tarfile =~# '\.bz2'
279a5792f58SBram Moolenaar   call system("bzip2 -d ".tarfile)
280a5792f58SBram Moolenaar   let tarfile = substitute(tarfile,'\.bz2','','e')
281a5792f58SBram Moolenaar   let compress= "bzip2 '".tarfile."'"
282a5792f58SBram Moolenaar  endif
283a5792f58SBram Moolenaar
284a5792f58SBram Moolenaar  if v:shell_error != 0
285a5792f58SBram Moolenaar   echohl Error | echo "***error*** (tar#Write) sorry, unable to update ".tarfile." with ".fname | echohl None
286a5792f58SBram Moolenaar   call inputsave()|call input("Press <cr> to continue")|call inputrestore()
287a5792f58SBram Moolenaar  else
288a5792f58SBram Moolenaar
289a5792f58SBram Moolenaar"   call Decho("tarfile<".tarfile."> fname<".fname.">")
290a5792f58SBram Moolenaar
2911cbe5f73SBram Moolenaar   if fname =~ '/'
292a5792f58SBram Moolenaar    let dirpath = substitute(fname,'/[^/]\+$','','e')
2931cbe5f73SBram Moolenaar    if executable("cygpath")
2941cbe5f73SBram Moolenaar     let dirpath = substitute(system("cygpath ".dirpath),'\n','','e')
2951cbe5f73SBram Moolenaar    endif
2961cbe5f73SBram Moolenaar    call mkdir(dirpath,"p")
2971cbe5f73SBram Moolenaar   endif
298a5792f58SBram Moolenaar   if tarfile !~ '/'
299a5792f58SBram Moolenaar    let tarfile= curdir.'/'.tarfile
300a5792f58SBram Moolenaar   endif
301a5792f58SBram Moolenaar"   call Decho("tarfile<".tarfile."> fname<".fname.">")
302a5792f58SBram Moolenaar
303a5792f58SBram Moolenaar   exe "w! ".fname
304ab194816SBram Moolenaar   if executable("cygpath")
305ab194816SBram Moolenaar    let tarfile = substitute(system("cygpath ".tarfile),'\n','','e')
306ab194816SBram Moolenaar   endif
307ab194816SBram Moolenaar
308a5792f58SBram Moolenaar   " delete old file from tarfile
309a5792f58SBram Moolenaar"   call Decho("tar --delete -f '".tarfile."' '".fname."'")
310a5792f58SBram Moolenaar   call system("tar --delete -f '".tarfile."' '".fname."'")
311ab194816SBram Moolenaar   if v:shell_error != 0
312a5792f58SBram Moolenaar    echohl Error | echo "***error*** (tar#Write) sorry, unable to update ".tarfile." with ".fname | echohl None
313a5792f58SBram Moolenaar    call inputsave()|call input("Press <cr> to continue")|call inputrestore()
314ab194816SBram Moolenaar   else
315a5792f58SBram Moolenaar
316a5792f58SBram Moolenaar    " update tarfile with new file
317a5792f58SBram Moolenaar"    call Decho("tar -".g:tar_writeoptions." '".tarfile."' '".fname."'")
318a5792f58SBram Moolenaar    call system("tar -".g:tar_writeoptions." '".tarfile."' '".fname."'")
319a5792f58SBram Moolenaar    if v:shell_error != 0
320a5792f58SBram Moolenaar     echohl Error | echo "***error*** (tar#Write) sorry, unable to update ".tarfile." with ".fname | echohl None
321a5792f58SBram Moolenaar     call inputsave()|call input("Press <cr> to continue")|call inputrestore()
322a5792f58SBram Moolenaar    elseif exists("compress")
323a5792f58SBram Moolenaar"     call Decho("call system(".compress.")")
324a5792f58SBram Moolenaar     call system(compress)
325a5792f58SBram Moolenaar     if exists("tgz")
326a5792f58SBram Moolenaar"      call Decho("rename(".tarfile.".gz,".substitute(tarfile,'\.tar$','.tgz','e').")")
327a5792f58SBram Moolenaar      call rename(tarfile.".gz",substitute(tarfile,'\.tar$','.tgz','e'))
328a5792f58SBram Moolenaar     endif
329a5792f58SBram Moolenaar    endif
330a5792f58SBram Moolenaar   endif
331a5792f58SBram Moolenaar
332a5792f58SBram Moolenaar   " support writing tarfiles across a network
333a5792f58SBram Moolenaar   if s:tblfile_{winnr()} =~ '^\a\+://'
334a5792f58SBram Moolenaar"    call Decho("handle writing <".tarfile."> across network to <".s:tblfile_{winnr()}.">")
335a5792f58SBram Moolenaar    let tblfile= s:tblfile_{winnr()}
336a5792f58SBram Moolenaar    1split|enew
337a5792f58SBram Moolenaar    let binkeep= &binary
338a5792f58SBram Moolenaar    let eikeep = &ei
339a5792f58SBram Moolenaar    set binary ei=all
340a5792f58SBram Moolenaar    exe "e! ".tarfile
341a5792f58SBram Moolenaar    call netrw#NetWrite(tblfile)
342a5792f58SBram Moolenaar    let &ei     = eikeep
343a5792f58SBram Moolenaar    let &binary = binkeep
344a5792f58SBram Moolenaar    q!
345a5792f58SBram Moolenaar    unlet s:tblfile_{winnr()}
346a5792f58SBram Moolenaar   endif
347ab194816SBram Moolenaar  endif
348ab194816SBram Moolenaar
349ab194816SBram Moolenaar  " cleanup and restore current directory
350ab194816SBram Moolenaar  cd ..
351a5792f58SBram Moolenaar  call s:Rmdir("_ZIPVIM_")
352ab194816SBram Moolenaar  exe "cd ".escape(curdir,' \')
353ab194816SBram Moolenaar  setlocal nomod
354ab194816SBram Moolenaar
355bba577a2SBram Moolenaar  let &report= repkeep
356ab194816SBram Moolenaar"  call Dret("tar#Write")
357ab194816SBram Moolenaarendfun
358ab194816SBram Moolenaar
359ab194816SBram Moolenaar" ---------------------------------------------------------------------
360a5792f58SBram Moolenaar" Rmdir: {{{2
361ab194816SBram Moolenaarfun! s:Rmdir(fname)
362ab194816SBram Moolenaar"  call Dfunc("Rmdir(fname<".a:fname.">)")
363ab194816SBram Moolenaar  if has("unix")
364ab194816SBram Moolenaar   call system("/bin/rm -rf ".a:fname)
365ab194816SBram Moolenaar  elseif has("win32") || has("win95") || has("win64") || has("win16")
366ab194816SBram Moolenaar   if &shell =~? "sh$"
367ab194816SBram Moolenaar    call system("/bin/rm -rf ".a:fname)
368ab194816SBram Moolenaar   else
369ab194816SBram Moolenaar    call system("del /S ".a:fname)
370ab194816SBram Moolenaar   endif
371ab194816SBram Moolenaar  endif
372ab194816SBram Moolenaar"  call Dret("Rmdir")
373ab194816SBram Moolenaarendfun
374ab194816SBram Moolenaar
375a5792f58SBram Moolenaar" ------------------------------------------------------------------------
376a5792f58SBram Moolenaar" Modelines And Restoration: {{{1
377a5792f58SBram Moolenaarlet &cpo= s:keepcpo
378a5792f58SBram Moolenaarunlet s:keepcpo
379a5792f58SBram Moolenaar" vim:ts=8 fdm=marker
380