xref: /vim-8.2.3635/runtime/autoload/tar.vim (revision c81e5e79)
1a5792f58SBram Moolenaar" tar.vim: Handles browsing tarfiles
2a5792f58SBram Moolenaar"            AUTOLOAD PORTION
3*c81e5e79SBram Moolenaar" Date:			Sep 29, 2006
4*c81e5e79SBram Moolenaar" Version:		11
5*c81e5e79SBram Moolenaar" Maintainer:	Charles E Campbell, Jr <[email protected]>
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" ---------------------------------------------------------------------
21*c81e5e79SBram Moolenaar" Load Once: {{{1
22a5792f58SBram Moolenaarlet s:keepcpo= &cpo
23a5792f58SBram Moolenaarset cpo&vim
24*c81e5e79SBram Moolenaarif &cp || exists("g:loaded_tar") || v:version < 700
25a5792f58SBram Moolenaar finish
26a5792f58SBram Moolenaarendif
27*c81e5e79SBram Moolenaarlet g:loaded_tar= "v11"
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
44*c81e5e79SBram Moolenaarif !exists("g:tar_shq")
45*c81e5e79SBram Moolenaar if has("unix")
46*c81e5e79SBram Moolenaar  let g:tar_shq= "'"
47*c81e5e79SBram Moolenaar else
48*c81e5e79SBram Moolenaar  let g:tar_shq= '"'
49*c81e5e79SBram Moolenaar endif
50*c81e5e79SBram Moolenaarendif
51a5792f58SBram Moolenaar
52a5792f58SBram Moolenaar" ----------------
53a5792f58SBram Moolenaar"  Functions: {{{1
54a5792f58SBram Moolenaar" ----------------
55a5792f58SBram Moolenaar
56a5792f58SBram Moolenaar" ---------------------------------------------------------------------
57a5792f58SBram Moolenaar" tar#Browse: {{{2
58a5792f58SBram Moolenaarfun! tar#Browse(tarfile)
59a5792f58SBram Moolenaar"  call Dfunc("tar#Browse(tarfile<".a:tarfile.">)")
60bba577a2SBram Moolenaar  let repkeep= &report
61bba577a2SBram Moolenaar  set report=10
62a5792f58SBram Moolenaar
63a5792f58SBram Moolenaar  " sanity checks
64910f66f9SBram Moolenaar  if !executable(g:tar_cmd)
65*c81e5e79SBram Moolenaar   redraw!
66910f66f9SBram Moolenaar   echohl Error | echo '***error*** (tar#Browse) "'.g:tar_cmd.'" not available on your system'
67*c81e5e79SBram Moolenaar"   call inputsave()|call input("Press <cr> to continue")|call inputrestore()
68bba577a2SBram Moolenaar   let &report= repkeep
69a5792f58SBram Moolenaar"   call Dret("tar#Browse")
7087e25fdfSBram Moolenaar   return
7187e25fdfSBram Moolenaar  endif
72a5792f58SBram Moolenaar  if !filereadable(a:tarfile)
73910f66f9SBram Moolenaar"   call Decho('a:tarfile<'.a:tarfile.'> not filereadable')
74a5792f58SBram Moolenaar   if a:tarfile !~# '^\a\+://'
75a5792f58SBram Moolenaar    " if its an url, don't complain, let url-handlers such as vim do its thing
76*c81e5e79SBram Moolenaar    redraw!
77a5792f58SBram Moolenaar    echohl Error | echo "***error*** (tar#Browse) File not readable<".a:tarfile.">" | echohl None
78*c81e5e79SBram Moolenaar"    call inputsave()|call input("Press <cr> to continue")|call inputrestore()
7987e25fdfSBram Moolenaar   endif
80bba577a2SBram Moolenaar   let &report= repkeep
81a5792f58SBram Moolenaar"   call Dret("tar#Browse : file<".a:tarfile."> not readable")
8287e25fdfSBram Moolenaar   return
8387e25fdfSBram Moolenaar  endif
84a5792f58SBram Moolenaar  if &ma != 1
85a5792f58SBram Moolenaar   set ma
8687e25fdfSBram Moolenaar  endif
87a5792f58SBram Moolenaar  let w:tarfile= a:tarfile
88a5792f58SBram Moolenaar
89a5792f58SBram Moolenaar  setlocal noswapfile
90a5792f58SBram Moolenaar  setlocal buftype=nofile
91a5792f58SBram Moolenaar  setlocal bufhidden=hide
92a5792f58SBram Moolenaar  setlocal nobuflisted
93a5792f58SBram Moolenaar  setlocal nowrap
94a5792f58SBram Moolenaar  set ft=tar
95a5792f58SBram Moolenaar
96a5792f58SBram Moolenaar  " give header
97910f66f9SBram Moolenaar"  call Decho("printing header")
98a5792f58SBram Moolenaar  exe "$put ='".'\"'." tar.vim version ".g:loaded_tar."'"
99a5792f58SBram Moolenaar  exe "$put ='".'\"'." Browsing tarfile ".a:tarfile."'"
100a5792f58SBram Moolenaar  exe "$put ='".'\"'." Select a file with cursor and press ENTER"."'"
101a5792f58SBram Moolenaar  0d
102a5792f58SBram Moolenaar  $
103a5792f58SBram Moolenaar
104910f66f9SBram Moolenaar  let tarfile= a:tarfile
105910f66f9SBram Moolenaar  if has("win32") && executable("cygpath")
106910f66f9SBram Moolenaar   " assuming cygwin
107910f66f9SBram Moolenaar   let tarfile=substitute(system("cygpath -u ".tarfile),'\n$','','e')
108a5792f58SBram Moolenaar  endif
109d68071d8SBram Moolenaar  let curlast= line("$")
110910f66f9SBram Moolenaar  if tarfile =~# '\.\(gz\|tgz\)$'
111*c81e5e79SBram Moolenaar"   call Decho("exe silent r! gzip -d -c ".g:tar_shq.tarfile.g:tar_shq."| ".g:tar_cmd." -".g:tar_browseoptions." - ")
112*c81e5e79SBram Moolenaar   exe "silent r! gzip -d -c ".g:tar_shq.tarfile.g:tar_shq."| ".g:tar_cmd." -".g:tar_browseoptions." - "
113910f66f9SBram Moolenaar  elseif tarfile =~# '\.bz2$'
114*c81e5e79SBram Moolenaar"   call Decho("exe silent r! bzip2 -d -c ".g:tar_shq.tarfile.g:tar_shq."| ".g:tar_cmd." -".g:tar_browseoptions." - ")
115*c81e5e79SBram Moolenaar   exe "silent r! bzip2 -d -c ".g:tar_shq.tarfile.g:tar_shq."| ".g:tar_cmd." -".g:tar_browseoptions." - "
116910f66f9SBram Moolenaar  else
117*c81e5e79SBram Moolenaar"   call Decho("exe silent r! ".g:tar_cmd." -".g:tar_browseoptions." ".g:tar_shq.tarfile.g:tar_shq)
118*c81e5e79SBram Moolenaar   exe "silent r! ".g:tar_cmd." -".g:tar_browseoptions." ".g:tar_shq.tarfile.g:tar_shq
119910f66f9SBram Moolenaar  endif
120910f66f9SBram Moolenaar  if v:shell_error != 0
121*c81e5e79SBram Moolenaar   redraw!
122d68071d8SBram Moolenaar   echohl WarningMsg | echo "***warning*** (tar#Browse) please check your g:tar_browseoptions<".g:tar_browseoptions.">"
123*c81e5e79SBram Moolenaar"   call inputsave()|call input("Press <cr> to continue")|call inputrestore()
124d68071d8SBram Moolenaar"   call Dret("tar#Browse : a:tarfile<".a:tarfile.">")
125d68071d8SBram Moolenaar   return
126d68071d8SBram Moolenaar  endif
127*c81e5e79SBram Moolenaar  if line("$") == curlast || ( line("$") == (curlast + 1) && getline("$") =~ '\c\%(warning\|error\|inappropriate\|unrecognized\)')
128*c81e5e79SBram Moolenaar   redraw!
129d68071d8SBram Moolenaar   echohl WarningMsg | echo "***warning*** (tar#Browse) ".a:tarfile." doesn't appear to be a tar file" | echohl None
130*c81e5e79SBram Moolenaar"   call inputsave()|call input("Press <cr> to continue")|call inputrestore()
131d68071d8SBram Moolenaar   silent %d
132d68071d8SBram Moolenaar   let eikeep= &ei
133d68071d8SBram Moolenaar   set ei=BufReadCmd,FileReadCmd
134d68071d8SBram Moolenaar   exe "r ".a:tarfile
135d68071d8SBram Moolenaar   let &ei= eikeep
136d68071d8SBram Moolenaar   1d
137d68071d8SBram Moolenaar"   call Dret("tar#Browse : a:tarfile<".a:tarfile.">")
138910f66f9SBram Moolenaar   return
139910f66f9SBram Moolenaar  endif
140a5792f58SBram Moolenaar
141a5792f58SBram Moolenaar  setlocal noma nomod ro
142a5792f58SBram Moolenaar  noremap <silent> <buffer> <cr> :call <SID>TarBrowseSelect()<cr>
143a5792f58SBram Moolenaar
144bba577a2SBram Moolenaar  let &report= repkeep
145a5792f58SBram Moolenaar"  call Dret("tar#Browse : w:tarfile<".w:tarfile.">")
146ab194816SBram Moolenaarendfun
14787e25fdfSBram Moolenaar
148ab194816SBram Moolenaar" ---------------------------------------------------------------------
149a5792f58SBram Moolenaar" TarBrowseSelect: {{{2
150a5792f58SBram Moolenaarfun! s:TarBrowseSelect()
151a5792f58SBram Moolenaar"  call Dfunc("TarBrowseSelect() w:tarfile<".w:tarfile."> curfile<".expand("%").">")
152bba577a2SBram Moolenaar  let repkeep= &report
153bba577a2SBram Moolenaar  set report=10
154a5792f58SBram Moolenaar  let fname= getline(".")
155a5792f58SBram Moolenaar"  call Decho("fname<".fname.">")
156a5792f58SBram Moolenaar
157a5792f58SBram Moolenaar  " sanity check
158a5792f58SBram Moolenaar  if fname =~ '^"'
159bba577a2SBram Moolenaar   let &report= repkeep
160a5792f58SBram Moolenaar"   call Dret("TarBrowseSelect")
161a5792f58SBram Moolenaar   return
162a5792f58SBram Moolenaar  endif
163a5792f58SBram Moolenaar
164a5792f58SBram Moolenaar  " about to make a new window, need to use w:tarfile
165a5792f58SBram Moolenaar  let tarfile= w:tarfile
166a5792f58SBram Moolenaar  let curfile= expand("%")
167910f66f9SBram Moolenaar  if has("win32") && executable("cygpath")
168910f66f9SBram Moolenaar   " assuming cygwin
169910f66f9SBram Moolenaar   let tarfile=substitute(system("cygpath -u ".tarfile),'\n$','','e')
170910f66f9SBram Moolenaar  endif
171a5792f58SBram Moolenaar
172a5792f58SBram Moolenaar  new
173a5792f58SBram Moolenaar  wincmd _
174a5792f58SBram Moolenaar  let s:tblfile_{winnr()}= curfile
175910f66f9SBram Moolenaar  call tar#Read("tarfile:".tarfile.':'.fname,1)
176a5792f58SBram Moolenaar  filetype detect
177a5792f58SBram Moolenaar
178bba577a2SBram Moolenaar  let &report= repkeep
179a5792f58SBram Moolenaar"  call Dret("TarBrowseSelect : s:tblfile_".winnr()."<".s:tblfile_{winnr()}.">")
180a5792f58SBram Moolenaarendfun
181a5792f58SBram Moolenaar
182a5792f58SBram Moolenaar" ---------------------------------------------------------------------
183a5792f58SBram Moolenaar" tar#Read: {{{2
184a5792f58SBram Moolenaarfun! tar#Read(fname,mode)
185a5792f58SBram Moolenaar"  call Dfunc("tar#Read(fname<".a:fname.">,mode=".a:mode.")")
186bba577a2SBram Moolenaar  let repkeep= &report
187bba577a2SBram Moolenaar  set report=10
188a5792f58SBram Moolenaar  let tarfile = substitute(a:fname,'tarfile:\(.\{-}\):.*$','\1','')
189a5792f58SBram Moolenaar  let fname   = substitute(a:fname,'tarfile:.\{-}:\(.*\)$','\1','')
190910f66f9SBram Moolenaar  if has("win32") && executable("cygpath")
191910f66f9SBram Moolenaar   " assuming cygwin
192910f66f9SBram Moolenaar   let tarfile=substitute(system("cygpath -u ".tarfile),'\n$','','e')
193910f66f9SBram Moolenaar  endif
194910f66f9SBram Moolenaar"  call Decho("tarfile<".tarfile.">")
195910f66f9SBram Moolenaar"  call Decho("fname<".fname.">")
196a5792f58SBram Moolenaar
197a5792f58SBram Moolenaar  if tarfile =~# '\.\(gz\|tgz\)$'
198*c81e5e79SBram Moolenaar"   call Decho("exe silent r! gzip -d -c ".g:tar_shq.tarfile.g:tar_shq."| ".g:tar_cmd." -OPxf - '".fname."'")
199*c81e5e79SBram Moolenaar   exe "silent r! gzip -d -c ".g:tar_shq.tarfile.g:tar_shq."| ".g:tar_cmd." -".g:tar_readoptions." - '".fname."'"
2001cbe5f73SBram Moolenaar  elseif tarfile =~# '\.bz2$'
201*c81e5e79SBram Moolenaar"   call Decho("exe silent r! bzip2 -d -c ".g:tar_shq.tarfile.g:tar_shq."| ".g:tar_cmd." -".g:tar_readoptions." - '".fname."'")
202*c81e5e79SBram Moolenaar   exe "silent r! bzip2 -d -c ".g:tar_shq.tarfile.g:tar_shq."| ".g:tar_cmd." -".g:tar_readoptions." - '".fname."'"
203a5792f58SBram Moolenaar  else
204*c81e5e79SBram Moolenaar"   call Decho("exe silent r! ".g:tar_cmd." -".g:tar_readoptions." ".g:tar_shq.tarfile.g:tar_shq." ".g:tar_shq.fname.g:tar_shq)
205*c81e5e79SBram Moolenaar   exe "silent r! ".g:tar_cmd." -".g:tar_readoptions." ".g:tar_shq.tarfile.g:tar_shq." ".g:tar_shq.fname.g:tar_shq
206a5792f58SBram Moolenaar  endif
207a5792f58SBram Moolenaar  let w:tarfile= a:fname
208a5792f58SBram Moolenaar  exe "file tarfile:".fname
209a5792f58SBram Moolenaar
210a5792f58SBram Moolenaar  " cleanup
211a5792f58SBram Moolenaar  0d
212a5792f58SBram Moolenaar  set nomod
213a5792f58SBram Moolenaar
214bba577a2SBram Moolenaar  let &report= repkeep
215a5792f58SBram Moolenaar"  call Dret("tar#Read : w:tarfile<".w:tarfile.">")
216a5792f58SBram Moolenaarendfun
217a5792f58SBram Moolenaar
218a5792f58SBram Moolenaar" ---------------------------------------------------------------------
219a5792f58SBram Moolenaar" tar#Write: {{{2
220a5792f58SBram Moolenaarfun! tar#Write(fname)
221a5792f58SBram Moolenaar"  call Dfunc("tar#Write(fname<".a:fname.">) w:tarfile<".w:tarfile."> tblfile_".winnr()."<".s:tblfile_{winnr()}.">")
222bba577a2SBram Moolenaar  let repkeep= &report
223bba577a2SBram Moolenaar  set report=10
224a5792f58SBram Moolenaar
225ab194816SBram Moolenaar  " sanity checks
226910f66f9SBram Moolenaar  if !executable(g:tar_cmd)
227*c81e5e79SBram Moolenaar   redraw!
228910f66f9SBram Moolenaar   echohl Error | echo '***error*** (tar#Browse) "'.g:tar_cmd.'" not available on your system'
229*c81e5e79SBram Moolenaar"   call inputsave()|call input("Press <cr> to continue")|call inputrestore()
230bba577a2SBram Moolenaar   let &report= repkeep
231ab194816SBram Moolenaar"   call Dret("tar#Write")
232ab194816SBram Moolenaar   return
233ab194816SBram Moolenaar  endif
234ab194816SBram Moolenaar  if !exists("*mkdir")
235*c81e5e79SBram Moolenaar   redraw!
236a5792f58SBram Moolenaar   echohl Error | echo "***error*** (tar#Write) sorry, mkdir() doesn't work on your system" | echohl None
237*c81e5e79SBram Moolenaar"   call inputsave()|call input("Press <cr> to continue")|call inputrestore()
238bba577a2SBram Moolenaar   let &report= repkeep
239ab194816SBram Moolenaar"   call Dret("tar#Write")
240ab194816SBram Moolenaar   return
241ab194816SBram Moolenaar  endif
242ab194816SBram Moolenaar
243ab194816SBram Moolenaar  let curdir= getcwd()
244ab194816SBram Moolenaar  let tmpdir= tempname()
245ab194816SBram Moolenaar"  call Decho("orig tempname<".tmpdir.">")
246ab194816SBram Moolenaar  if tmpdir =~ '\.'
247ab194816SBram Moolenaar   let tmpdir= substitute(tmpdir,'\.[^.]*$','','e')
248ab194816SBram Moolenaar  endif
249ab194816SBram Moolenaar"  call Decho("tmpdir<".tmpdir.">")
250ab194816SBram Moolenaar  call mkdir(tmpdir,"p")
251ab194816SBram Moolenaar
252ab194816SBram Moolenaar  " attempt to change to the indicated directory
253ab194816SBram Moolenaar  try
254ab194816SBram Moolenaar   exe "cd ".escape(tmpdir,' \')
255ab194816SBram Moolenaar  catch /^Vim\%((\a\+)\)\=:E344/
256*c81e5e79SBram Moolenaar   redraw!
257a5792f58SBram Moolenaar   echohl Error | echo "***error*** (tar#Write) cannot cd to temporary directory" | Echohl None
258*c81e5e79SBram Moolenaar"   call inputsave()|call input("Press <cr> to continue")|call inputrestore()
259bba577a2SBram Moolenaar   let &report= repkeep
260ab194816SBram Moolenaar"   call Dret("tar#Write")
261ab194816SBram Moolenaar   return
262ab194816SBram Moolenaar  endtry
263ab194816SBram Moolenaar"  call Decho("current directory now: ".getcwd())
264ab194816SBram Moolenaar
265a5792f58SBram Moolenaar  " place temporary files under .../_ZIPVIM_/
266a5792f58SBram Moolenaar  if isdirectory("_ZIPVIM_")
267a5792f58SBram Moolenaar   call s:Rmdir("_ZIPVIM_")
268ab194816SBram Moolenaar  endif
269a5792f58SBram Moolenaar  call mkdir("_ZIPVIM_")
270a5792f58SBram Moolenaar  cd _ZIPVIM_
271ab194816SBram Moolenaar"  call Decho("current directory now: ".getcwd())
272ab194816SBram Moolenaar
273a5792f58SBram Moolenaar  let tarfile = substitute(w:tarfile,'tarfile:\(.\{-}\):.*$','\1','')
274a5792f58SBram Moolenaar  let fname   = substitute(w:tarfile,'tarfile:.\{-}:\(.*\)$','\1','')
275a5792f58SBram Moolenaar
276a5792f58SBram Moolenaar  " handle compressed archives
277a5792f58SBram Moolenaar  if tarfile =~# '\.gz'
278a5792f58SBram Moolenaar   call system("gzip -d ".tarfile)
279a5792f58SBram Moolenaar   let tarfile = substitute(tarfile,'\.gz','','e')
280a5792f58SBram Moolenaar   let compress= "gzip '".tarfile."'"
281a5792f58SBram Moolenaar  elseif tarfile =~# '\.tgz'
282a5792f58SBram Moolenaar   call system("gzip -d ".tarfile)
283a5792f58SBram Moolenaar   let tarfile = substitute(tarfile,'\.tgz','.tar','e')
284a5792f58SBram Moolenaar   let compress= "gzip '".tarfile."'"
285a5792f58SBram Moolenaar   let tgz     = 1
286a5792f58SBram Moolenaar  elseif tarfile =~# '\.bz2'
287a5792f58SBram Moolenaar   call system("bzip2 -d ".tarfile)
288a5792f58SBram Moolenaar   let tarfile = substitute(tarfile,'\.bz2','','e')
289a5792f58SBram Moolenaar   let compress= "bzip2 '".tarfile."'"
290a5792f58SBram Moolenaar  endif
291a5792f58SBram Moolenaar
292a5792f58SBram Moolenaar  if v:shell_error != 0
293*c81e5e79SBram Moolenaar   redraw!
294a5792f58SBram Moolenaar   echohl Error | echo "***error*** (tar#Write) sorry, unable to update ".tarfile." with ".fname | echohl None
295*c81e5e79SBram Moolenaar"   call inputsave()|call input("Press <cr> to continue")|call inputrestore()
296a5792f58SBram Moolenaar  else
297a5792f58SBram Moolenaar
298a5792f58SBram Moolenaar"   call Decho("tarfile<".tarfile."> fname<".fname.">")
299a5792f58SBram Moolenaar
3001cbe5f73SBram Moolenaar   if fname =~ '/'
301a5792f58SBram Moolenaar    let dirpath = substitute(fname,'/[^/]\+$','','e')
3021cbe5f73SBram Moolenaar    if executable("cygpath")
3031cbe5f73SBram Moolenaar     let dirpath = substitute(system("cygpath ".dirpath),'\n','','e')
3041cbe5f73SBram Moolenaar    endif
3051cbe5f73SBram Moolenaar    call mkdir(dirpath,"p")
3061cbe5f73SBram Moolenaar   endif
307a5792f58SBram Moolenaar   if tarfile !~ '/'
308a5792f58SBram Moolenaar    let tarfile= curdir.'/'.tarfile
309a5792f58SBram Moolenaar   endif
310a5792f58SBram Moolenaar"   call Decho("tarfile<".tarfile."> fname<".fname.">")
311a5792f58SBram Moolenaar
312a5792f58SBram Moolenaar   exe "w! ".fname
313ab194816SBram Moolenaar   if executable("cygpath")
314ab194816SBram Moolenaar    let tarfile = substitute(system("cygpath ".tarfile),'\n','','e')
315ab194816SBram Moolenaar   endif
316ab194816SBram Moolenaar
317a5792f58SBram Moolenaar   " delete old file from tarfile
318a5792f58SBram Moolenaar"   call Decho("tar --delete -f '".tarfile."' '".fname."'")
319a5792f58SBram Moolenaar   call system("tar --delete -f '".tarfile."' '".fname."'")
320ab194816SBram Moolenaar   if v:shell_error != 0
321*c81e5e79SBram Moolenaar    redraw!
322a5792f58SBram Moolenaar    echohl Error | echo "***error*** (tar#Write) sorry, unable to update ".tarfile." with ".fname | echohl None
323*c81e5e79SBram Moolenaar"    call inputsave()|call input("Press <cr> to continue")|call inputrestore()
324ab194816SBram Moolenaar   else
325a5792f58SBram Moolenaar
326a5792f58SBram Moolenaar    " update tarfile with new file
327a5792f58SBram Moolenaar"    call Decho("tar -".g:tar_writeoptions." '".tarfile."' '".fname."'")
328a5792f58SBram Moolenaar    call system("tar -".g:tar_writeoptions." '".tarfile."' '".fname."'")
329a5792f58SBram Moolenaar    if v:shell_error != 0
330*c81e5e79SBram Moolenaar     redraw!
331a5792f58SBram Moolenaar     echohl Error | echo "***error*** (tar#Write) sorry, unable to update ".tarfile." with ".fname | echohl None
332*c81e5e79SBram Moolenaar"     call inputsave()|call input("Press <cr> to continue")|call inputrestore()
333a5792f58SBram Moolenaar    elseif exists("compress")
334a5792f58SBram Moolenaar"     call Decho("call system(".compress.")")
335a5792f58SBram Moolenaar     call system(compress)
336a5792f58SBram Moolenaar     if exists("tgz")
337a5792f58SBram Moolenaar"      call Decho("rename(".tarfile.".gz,".substitute(tarfile,'\.tar$','.tgz','e').")")
338a5792f58SBram Moolenaar      call rename(tarfile.".gz",substitute(tarfile,'\.tar$','.tgz','e'))
339a5792f58SBram Moolenaar     endif
340a5792f58SBram Moolenaar    endif
341a5792f58SBram Moolenaar   endif
342a5792f58SBram Moolenaar
343a5792f58SBram Moolenaar   " support writing tarfiles across a network
344a5792f58SBram Moolenaar   if s:tblfile_{winnr()} =~ '^\a\+://'
345a5792f58SBram Moolenaar"    call Decho("handle writing <".tarfile."> across network to <".s:tblfile_{winnr()}.">")
346a5792f58SBram Moolenaar    let tblfile= s:tblfile_{winnr()}
347a5792f58SBram Moolenaar    1split|enew
348a5792f58SBram Moolenaar    let binkeep= &binary
349a5792f58SBram Moolenaar    let eikeep = &ei
350a5792f58SBram Moolenaar    set binary ei=all
351a5792f58SBram Moolenaar    exe "e! ".tarfile
352a5792f58SBram Moolenaar    call netrw#NetWrite(tblfile)
353a5792f58SBram Moolenaar    let &ei     = eikeep
354a5792f58SBram Moolenaar    let &binary = binkeep
355a5792f58SBram Moolenaar    q!
356a5792f58SBram Moolenaar    unlet s:tblfile_{winnr()}
357a5792f58SBram Moolenaar   endif
358ab194816SBram Moolenaar  endif
359ab194816SBram Moolenaar
360ab194816SBram Moolenaar  " cleanup and restore current directory
361ab194816SBram Moolenaar  cd ..
362a5792f58SBram Moolenaar  call s:Rmdir("_ZIPVIM_")
363ab194816SBram Moolenaar  exe "cd ".escape(curdir,' \')
364ab194816SBram Moolenaar  setlocal nomod
365ab194816SBram Moolenaar
366bba577a2SBram Moolenaar  let &report= repkeep
367ab194816SBram Moolenaar"  call Dret("tar#Write")
368ab194816SBram Moolenaarendfun
369ab194816SBram Moolenaar
370ab194816SBram Moolenaar" ---------------------------------------------------------------------
371a5792f58SBram Moolenaar" Rmdir: {{{2
372ab194816SBram Moolenaarfun! s:Rmdir(fname)
373ab194816SBram Moolenaar"  call Dfunc("Rmdir(fname<".a:fname.">)")
374ab194816SBram Moolenaar  if has("unix")
375ab194816SBram Moolenaar   call system("/bin/rm -rf ".a:fname)
376ab194816SBram Moolenaar  elseif has("win32") || has("win95") || has("win64") || has("win16")
377ab194816SBram Moolenaar   if &shell =~? "sh$"
378ab194816SBram Moolenaar    call system("/bin/rm -rf ".a:fname)
379ab194816SBram Moolenaar   else
380ab194816SBram Moolenaar    call system("del /S ".a:fname)
381ab194816SBram Moolenaar   endif
382ab194816SBram Moolenaar  endif
383ab194816SBram Moolenaar"  call Dret("Rmdir")
384ab194816SBram Moolenaarendfun
385ab194816SBram Moolenaar
386a5792f58SBram Moolenaar" ------------------------------------------------------------------------
387a5792f58SBram Moolenaar" Modelines And Restoration: {{{1
388a5792f58SBram Moolenaarlet &cpo= s:keepcpo
389a5792f58SBram Moolenaarunlet s:keepcpo
390a5792f58SBram Moolenaar"  vim:ts=8 fdm=marker
391