xref: /vim-8.2.3635/runtime/autoload/tar.vim (revision d4a1aabe)
1a5792f58SBram Moolenaar" tar.vim: Handles browsing tarfiles
2a5792f58SBram Moolenaar"            AUTOLOAD PORTION
3ff034194SBram Moolenaar" Date:			Apr 17, 2013
4ff034194SBram Moolenaar" Version:		29
5ff034194SBram Moolenaar" Maintainer:	Charles E Campbell <[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"
10ff034194SBram Moolenaar" Copyright:    Copyright (C) 2005-2011 Charles E. Campbell {{{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,
148c8de839SBram Moolenaar"               tar.vim and tarPlugin.vim are provided *as is* and comes
158c8de839SBram Moolenaar"               with no warranty of any kind, either expressed or implied.
168c8de839SBram Moolenaar"               By using this plugin, you agree that in no event will the
178c8de839SBram Moolenaar"               copyright holder be liable for any damages resulting from
188c8de839SBram Moolenaar"               the use of this software.
195c73622aSBram Moolenaar"     call inputsave()|call input("Press <cr> to continue")|call inputrestore()
20ab194816SBram Moolenaar" ---------------------------------------------------------------------
21c81e5e79SBram Moolenaar" Load Once: {{{1
225c73622aSBram Moolenaarif &cp || exists("g:loaded_tar")
23a5792f58SBram Moolenaar finish
24a5792f58SBram Moolenaarendif
25ff034194SBram Moolenaarlet g:loaded_tar= "v29"
265c73622aSBram Moolenaarif v:version < 702
275c73622aSBram Moolenaar echohl WarningMsg
285c73622aSBram Moolenaar echo "***warning*** this version of tar needs vim 7.2"
295c73622aSBram Moolenaar echohl Normal
305c73622aSBram Moolenaar finish
318c8de839SBram Moolenaarendif
325c73622aSBram Moolenaarlet s:keepcpo= &cpo
335c73622aSBram Moolenaarset cpo&vim
34ff034194SBram Moolenaar"DechoTabOn
355c73622aSBram Moolenaar"call Decho("loading autoload/tar.vim")
3687e25fdfSBram Moolenaar
37a5792f58SBram Moolenaar" ---------------------------------------------------------------------
38a5792f58SBram Moolenaar"  Default Settings: {{{1
39a5792f58SBram Moolenaarif !exists("g:tar_browseoptions")
40a5792f58SBram Moolenaar let g:tar_browseoptions= "Ptf"
41a5792f58SBram Moolenaarendif
42a5792f58SBram Moolenaarif !exists("g:tar_readoptions")
43a5792f58SBram Moolenaar let g:tar_readoptions= "OPxf"
44a5792f58SBram Moolenaarendif
45910f66f9SBram Moolenaarif !exists("g:tar_cmd")
46910f66f9SBram Moolenaar let g:tar_cmd= "tar"
47910f66f9SBram Moolenaarendif
48a5792f58SBram Moolenaarif !exists("g:tar_writeoptions")
49a5792f58SBram Moolenaar let g:tar_writeoptions= "uf"
50a5792f58SBram Moolenaarendif
51251e1912SBram Moolenaarif !exists("g:netrw_cygwin")
52251e1912SBram Moolenaar if has("win32") || has("win95") || has("win64") || has("win16")
53251e1912SBram Moolenaar  if &shell =~ '\%(\<bash\>\|\<zsh\>\)\%(\.exe\)\=$'
54251e1912SBram Moolenaar   let g:netrw_cygwin= 1
55251e1912SBram Moolenaar  else
56251e1912SBram Moolenaar   let g:netrw_cygwin= 0
57251e1912SBram Moolenaar  endif
58251e1912SBram Moolenaar else
59251e1912SBram Moolenaar  let g:netrw_cygwin= 0
60251e1912SBram Moolenaar endif
61251e1912SBram Moolenaarendif
625c73622aSBram Moolenaarif !exists("g:tar_copycmd")
635c73622aSBram Moolenaar if !exists("g:netrw_localcopycmd")
645c73622aSBram Moolenaar  if has("win32") || has("win95") || has("win64") || has("win16")
655c73622aSBram Moolenaar   if g:netrw_cygwin
665c73622aSBram Moolenaar    let g:netrw_localcopycmd= "cp"
675c73622aSBram Moolenaar   else
685c73622aSBram Moolenaar    let g:netrw_localcopycmd= "copy"
695c73622aSBram Moolenaar   endif
705c73622aSBram Moolenaar  elseif has("unix") || has("macunix")
715c73622aSBram Moolenaar   let g:netrw_localcopycmd= "cp"
725c73622aSBram Moolenaar  else
735c73622aSBram Moolenaar   let g:netrw_localcopycmd= ""
745c73622aSBram Moolenaar  endif
755c73622aSBram Moolenaar endif
765c73622aSBram Moolenaar let g:tar_copycmd= g:netrw_localcopycmd
775c73622aSBram Moolenaarendif
785c73622aSBram Moolenaarif !exists("g:tar_extractcmd")
795c73622aSBram Moolenaar let g:tar_extractcmd= "tar -xf"
805c73622aSBram Moolenaarendif
818c8de839SBram Moolenaar
828c8de839SBram Moolenaar" set up shell quoting character
83c81e5e79SBram Moolenaarif !exists("g:tar_shq")
84ff034194SBram Moolenaar if exists("+shq") && exists("&shq") && &shq != ""
858c8de839SBram Moolenaar  let g:tar_shq= &shq
868c8de839SBram Moolenaar elseif has("win32") || has("win95") || has("win64") || has("win16")
878c8de839SBram Moolenaar  if exists("g:netrw_cygwin") && g:netrw_cygwin
88c81e5e79SBram Moolenaar   let g:tar_shq= "'"
89c81e5e79SBram Moolenaar  else
90c81e5e79SBram Moolenaar   let g:tar_shq= '"'
91c81e5e79SBram Moolenaar  endif
928c8de839SBram Moolenaar else
938c8de839SBram Moolenaar  let g:tar_shq= "'"
948c8de839SBram Moolenaar endif
958c8de839SBram Moolenaar" call Decho("g:tar_shq<".g:tar_shq.">")
96c81e5e79SBram Moolenaarendif
97a5792f58SBram Moolenaar
98a5792f58SBram Moolenaar" ----------------
99a5792f58SBram Moolenaar"  Functions: {{{1
100a5792f58SBram Moolenaar" ----------------
101a5792f58SBram Moolenaar
102a5792f58SBram Moolenaar" ---------------------------------------------------------------------
103a5792f58SBram Moolenaar" tar#Browse: {{{2
104a5792f58SBram Moolenaarfun! tar#Browse(tarfile)
105a5792f58SBram Moolenaar"  call Dfunc("tar#Browse(tarfile<".a:tarfile.">)")
106bba577a2SBram Moolenaar  let repkeep= &report
107bba577a2SBram Moolenaar  set report=10
108a5792f58SBram Moolenaar
109a5792f58SBram Moolenaar  " sanity checks
110910f66f9SBram Moolenaar  if !executable(g:tar_cmd)
111c81e5e79SBram Moolenaar   redraw!
112910f66f9SBram Moolenaar   echohl Error | echo '***error*** (tar#Browse) "'.g:tar_cmd.'" not available on your system'
113bba577a2SBram Moolenaar   let &report= repkeep
114a5792f58SBram Moolenaar"   call Dret("tar#Browse")
11587e25fdfSBram Moolenaar   return
11687e25fdfSBram Moolenaar  endif
117a5792f58SBram Moolenaar  if !filereadable(a:tarfile)
118910f66f9SBram Moolenaar"   call Decho('a:tarfile<'.a:tarfile.'> not filereadable')
119a5792f58SBram Moolenaar   if a:tarfile !~# '^\a\+://'
1203e496b0eSBram Moolenaar    " if it's an url, don't complain, let url-handlers such as vim do its thing
121c81e5e79SBram Moolenaar    redraw!
122a5792f58SBram Moolenaar    echohl Error | echo "***error*** (tar#Browse) File not readable<".a:tarfile.">" | echohl None
12387e25fdfSBram Moolenaar   endif
124bba577a2SBram Moolenaar   let &report= repkeep
125a5792f58SBram Moolenaar"   call Dret("tar#Browse : file<".a:tarfile."> not readable")
12687e25fdfSBram Moolenaar   return
12787e25fdfSBram Moolenaar  endif
128a5792f58SBram Moolenaar  if &ma != 1
129a5792f58SBram Moolenaar   set ma
13087e25fdfSBram Moolenaar  endif
1317fc0c065SBram Moolenaar  let b:tarfile= a:tarfile
132a5792f58SBram Moolenaar
133a5792f58SBram Moolenaar  setlocal noswapfile
134a5792f58SBram Moolenaar  setlocal buftype=nofile
135a5792f58SBram Moolenaar  setlocal bufhidden=hide
136a5792f58SBram Moolenaar  setlocal nobuflisted
137a5792f58SBram Moolenaar  setlocal nowrap
138a5792f58SBram Moolenaar  set ft=tar
139a5792f58SBram Moolenaar
140a5792f58SBram Moolenaar  " give header
141910f66f9SBram Moolenaar"  call Decho("printing header")
1428c8de839SBram Moolenaar  let lastline= line("$")
1438c8de839SBram Moolenaar  call setline(lastline+1,'" tar.vim version '.g:loaded_tar)
1448c8de839SBram Moolenaar  call setline(lastline+2,'" Browsing tarfile '.a:tarfile)
1458c8de839SBram Moolenaar  call setline(lastline+3,'" Select a file with cursor and press ENTER')
146251e1912SBram Moolenaar  keepj $put =''
1476be7f873SBram Moolenaar  keepj sil! 0d
148251e1912SBram Moolenaar  keepj $
149a5792f58SBram Moolenaar
150910f66f9SBram Moolenaar  let tarfile= a:tarfile
151ff034194SBram Moolenaar  if has("win32unix") && executable("cygpath")
152910f66f9SBram Moolenaar   " assuming cygwin
1535c73622aSBram Moolenaar   let tarfile=substitute(system("cygpath -u ".shellescape(tarfile,0)),'\n$','','e')
154a5792f58SBram Moolenaar  endif
15520aac6c1SBram Moolenaar
156d68071d8SBram Moolenaar  let curlast= line("$")
157910f66f9SBram Moolenaar  if tarfile =~# '\.\(gz\|tgz\)$'
158*d4a1aabeSBram Moolenaar    let gzip_command = s:get_gzip_command(tarfile)
1595c73622aSBram Moolenaar"   call Decho("1: exe silent r! gzip -d -c -- ".shellescape(tarfile,1)." | ".g:tar_cmd." -".g:tar_browseoptions." - ")
16020aac6c1SBram Moolenaar   exe "sil! r! " . gzip_command . " -d -c -- ".shellescape(tarfile,1)." | ".g:tar_cmd." -".g:tar_browseoptions." - "
1618c8de839SBram Moolenaar  elseif tarfile =~# '\.lrp'
1625c73622aSBram Moolenaar"   call Decho("2: exe silent r! cat -- ".shellescape(tarfile,1)."|gzip -d -c -|".g:tar_cmd." -".g:tar_browseoptions." - ")
163*d4a1aabeSBram Moolenaar   exe "sil! r! cat -- ".shellescape(tarfile,1)."|gzip -d -c -|".g:tar_cmd." -".g:tar_browseoptions." - "
1646be7f873SBram Moolenaar  elseif tarfile =~# '\.\(bz2\|tbz\|tb2\)$'
1655c73622aSBram Moolenaar"   call Decho("3: exe silent r! bzip2 -d -c -- ".shellescape(tarfile,1)." | ".g:tar_cmd." -".g:tar_browseoptions." - ")
166251e1912SBram Moolenaar   exe "sil! r! bzip2 -d -c -- ".shellescape(tarfile,1)." | ".g:tar_cmd." -".g:tar_browseoptions." - "
1676be7f873SBram Moolenaar  elseif tarfile =~# '\.\(lzma\|tlz\)$'
1685c73622aSBram Moolenaar"   call Decho("3: exe silent r! lzma -d -c -- ".shellescape(tarfile,1)." | ".g:tar_cmd." -".g:tar_browseoptions." - ")
169251e1912SBram Moolenaar   exe "sil! r! lzma -d -c -- ".shellescape(tarfile,1)." | ".g:tar_cmd." -".g:tar_browseoptions." - "
170477db060SBram Moolenaar  elseif tarfile =~# '\.\(xz\|txz\)$'
171477db060SBram Moolenaar"   call Decho("3: exe silent r! xz --decompress --stdout -- ".shellescape(tarfile,1)." | ".g:tar_cmd." -".g:tar_browseoptions." - ")
172251e1912SBram Moolenaar   exe "sil! r! xz --decompress --stdout -- ".shellescape(tarfile,1)." | ".g:tar_cmd." -".g:tar_browseoptions." - "
173910f66f9SBram Moolenaar  else
174ed39e1d5SBram Moolenaar   if tarfile =~ '^\s*-'
1755c73622aSBram Moolenaar    " A file name starting with a dash is taken as an option.  Prepend ./ to avoid that.
176ed39e1d5SBram Moolenaar    let tarfile = substitute(tarfile, '-', './-', '')
177ed39e1d5SBram Moolenaar   endif
1785c73622aSBram Moolenaar"   call Decho("4: exe silent r! ".g:tar_cmd." -".g:tar_browseoptions." ".shellescape(tarfile,0))
179251e1912SBram Moolenaar   exe "sil! r! ".g:tar_cmd." -".g:tar_browseoptions." ".shellescape(tarfile,1)
180910f66f9SBram Moolenaar  endif
181910f66f9SBram Moolenaar  if v:shell_error != 0
182c81e5e79SBram Moolenaar   redraw!
183d68071d8SBram Moolenaar   echohl WarningMsg | echo "***warning*** (tar#Browse) please check your g:tar_browseoptions<".g:tar_browseoptions.">"
184d68071d8SBram Moolenaar"   call Dret("tar#Browse : a:tarfile<".a:tarfile.">")
185d68071d8SBram Moolenaar   return
186d68071d8SBram Moolenaar  endif
187c81e5e79SBram Moolenaar  if line("$") == curlast || ( line("$") == (curlast + 1) && getline("$") =~ '\c\%(warning\|error\|inappropriate\|unrecognized\)')
188c81e5e79SBram Moolenaar   redraw!
189d68071d8SBram Moolenaar   echohl WarningMsg | echo "***warning*** (tar#Browse) ".a:tarfile." doesn't appear to be a tar file" | echohl None
190251e1912SBram Moolenaar   keepj sil! %d
191d68071d8SBram Moolenaar   let eikeep= &ei
192d68071d8SBram Moolenaar   set ei=BufReadCmd,FileReadCmd
193c236c16dSBram Moolenaar   exe "r ".fnameescape(a:tarfile)
194d68071d8SBram Moolenaar   let &ei= eikeep
195251e1912SBram Moolenaar   keepj sil! 1d
196d68071d8SBram Moolenaar"   call Dret("tar#Browse : a:tarfile<".a:tarfile.">")
197910f66f9SBram Moolenaar   return
198910f66f9SBram Moolenaar  endif
199a5792f58SBram Moolenaar
200a5792f58SBram Moolenaar  setlocal noma nomod ro
201a5792f58SBram Moolenaar  noremap <silent> <buffer> <cr> :call <SID>TarBrowseSelect()<cr>
202a5792f58SBram Moolenaar
203bba577a2SBram Moolenaar  let &report= repkeep
2047fc0c065SBram Moolenaar"  call Dret("tar#Browse : b:tarfile<".b:tarfile.">")
205ab194816SBram Moolenaarendfun
20687e25fdfSBram Moolenaar
207ab194816SBram Moolenaar" ---------------------------------------------------------------------
208a5792f58SBram Moolenaar" TarBrowseSelect: {{{2
209a5792f58SBram Moolenaarfun! s:TarBrowseSelect()
2107fc0c065SBram Moolenaar"  call Dfunc("TarBrowseSelect() b:tarfile<".b:tarfile."> curfile<".expand("%").">")
211bba577a2SBram Moolenaar  let repkeep= &report
212bba577a2SBram Moolenaar  set report=10
213a5792f58SBram Moolenaar  let fname= getline(".")
214a5792f58SBram Moolenaar"  call Decho("fname<".fname.">")
215a5792f58SBram Moolenaar
216ed39e1d5SBram Moolenaar  if !exists("g:tar_secure") && fname =~ '^\s*-\|\s\+-'
217ed39e1d5SBram Moolenaar   redraw!
2185c73622aSBram Moolenaar   echohl WarningMsg | echo '***warning*** (tar#BrowseSelect) rejecting tarfile member<'.fname.'> because of embedded "-"'
219ed39e1d5SBram Moolenaar"   call Dret('tar#BrowseSelect : rejecting tarfile member<'.fname.'> because of embedded "-"')
220ed39e1d5SBram Moolenaar   return
221ed39e1d5SBram Moolenaar  endif
222ed39e1d5SBram Moolenaar
223a5792f58SBram Moolenaar  " sanity check
224a5792f58SBram Moolenaar  if fname =~ '^"'
225bba577a2SBram Moolenaar   let &report= repkeep
226a5792f58SBram Moolenaar"   call Dret("TarBrowseSelect")
227a5792f58SBram Moolenaar   return
228a5792f58SBram Moolenaar  endif
229a5792f58SBram Moolenaar
2307fc0c065SBram Moolenaar  " about to make a new window, need to use b:tarfile
2317fc0c065SBram Moolenaar  let tarfile= b:tarfile
232a5792f58SBram Moolenaar  let curfile= expand("%")
233ff034194SBram Moolenaar  if has("win32unix") && executable("cygpath")
234910f66f9SBram Moolenaar   " assuming cygwin
2355c73622aSBram Moolenaar   let tarfile=substitute(system("cygpath -u ".shellescape(tarfile,0)),'\n$','','e')
236910f66f9SBram Moolenaar  endif
237a5792f58SBram Moolenaar
238a5792f58SBram Moolenaar  new
2398c8de839SBram Moolenaar  if !exists("g:tar_nomax") || g:tar_nomax == 0
240a5792f58SBram Moolenaar   wincmd _
2418c8de839SBram Moolenaar  endif
242a5792f58SBram Moolenaar  let s:tblfile_{winnr()}= curfile
2438c8de839SBram Moolenaar  call tar#Read("tarfile:".tarfile.'::'.fname,1)
244a5792f58SBram Moolenaar  filetype detect
245ff034194SBram Moolenaar  set nomod
246ff034194SBram Moolenaar  exe 'com! -buffer -nargs=? -complete=file TarDiff	:call tar#Diff(<q-args>,"'.fnameescape(fname).'")'
247a5792f58SBram Moolenaar
248bba577a2SBram Moolenaar  let &report= repkeep
249a5792f58SBram Moolenaar"  call Dret("TarBrowseSelect : s:tblfile_".winnr()."<".s:tblfile_{winnr()}.">")
250a5792f58SBram Moolenaarendfun
251a5792f58SBram Moolenaar
252a5792f58SBram Moolenaar" ---------------------------------------------------------------------
253a5792f58SBram Moolenaar" tar#Read: {{{2
254a5792f58SBram Moolenaarfun! tar#Read(fname,mode)
255a5792f58SBram Moolenaar"  call Dfunc("tar#Read(fname<".a:fname.">,mode=".a:mode.")")
256bba577a2SBram Moolenaar  let repkeep= &report
257bba577a2SBram Moolenaar  set report=10
2588c8de839SBram Moolenaar  let tarfile = substitute(a:fname,'tarfile:\(.\{-}\)::.*$','\1','')
2598c8de839SBram Moolenaar  let fname   = substitute(a:fname,'tarfile:.\{-}::\(.*\)$','\1','')
260ff034194SBram Moolenaar  if has("win32unix") && executable("cygpath")
261910f66f9SBram Moolenaar   " assuming cygwin
2625c73622aSBram Moolenaar   let tarfile=substitute(system("cygpath -u ".shellescape(tarfile,0)),'\n$','','e')
263910f66f9SBram Moolenaar  endif
264910f66f9SBram Moolenaar"  call Decho("tarfile<".tarfile.">")
265910f66f9SBram Moolenaar"  call Decho("fname<".fname.">")
266a5792f58SBram Moolenaar
2675c73622aSBram Moolenaar  if  fname =~ '\.bz2$' && executable("bzcat")
2685c73622aSBram Moolenaar   let decmp= "|bzcat"
2695c73622aSBram Moolenaar   let doro = 1
2705c73622aSBram Moolenaar  elseif      fname =~ '\.gz$'  && executable("zcat")
2718c8de839SBram Moolenaar   let decmp= "|zcat"
2728c8de839SBram Moolenaar   let doro = 1
2735c73622aSBram Moolenaar  elseif  fname =~ '\.lzma$' && executable("lzcat")
2745c73622aSBram Moolenaar   let decmp= "|lzcat"
2758c8de839SBram Moolenaar   let doro = 1
276477db060SBram Moolenaar  elseif  fname =~ '\.xz$' && executable("xzcat")
277477db060SBram Moolenaar   let decmp= "|xzcat"
278477db060SBram Moolenaar   let doro = 1
279a5792f58SBram Moolenaar  else
2808c8de839SBram Moolenaar   let decmp=""
2818c8de839SBram Moolenaar   let doro = 0
282477db060SBram Moolenaar   if fname =~ '\.bz2$\|\.gz$\|\.lzma$\|\.xz$\|\.zip$\|\.Z$'
2838c8de839SBram Moolenaar    setlocal bin
284a5792f58SBram Moolenaar   endif
2858c8de839SBram Moolenaar  endif
2868c8de839SBram Moolenaar
287ed39e1d5SBram Moolenaar  if exists("g:tar_secure")
288ed39e1d5SBram Moolenaar   let tar_secure= " -- "
2898c8de839SBram Moolenaar  else
290ed39e1d5SBram Moolenaar   let tar_secure= " "
291ed39e1d5SBram Moolenaar  endif
29220aac6c1SBram Moolenaar
2935c73622aSBram Moolenaar  if tarfile =~# '\.bz2$'
2945c73622aSBram Moolenaar"   call Decho("7: exe silent r! bzip2 -d -c ".shellescape(tarfile,1)."| ".g:tar_cmd." -".g:tar_readoptions." - ".tar_secure.shellescape(fname,1).decmp)
295251e1912SBram Moolenaar   exe "sil! r! bzip2 -d -c -- ".shellescape(tarfile,1)."| ".g:tar_cmd." -".g:tar_readoptions." - ".tar_secure.shellescape(fname,1).decmp
2965c73622aSBram Moolenaar  elseif tarfile =~# '\.\(gz\|tgz\)$'
297*d4a1aabeSBram Moolenaar    let gzip_command = s:get_gzip_command(tarfile)
2985c73622aSBram Moolenaar"   call Decho("5: exe silent r! gzip -d -c -- ".shellescape(tarfile,1)."| ".g:tar_cmd.' -'.g:tar_readoptions.' - '.tar_secure.shellescape(fname,1))
29920aac6c1SBram Moolenaar   exe "sil! r! " . gzip_command . " -d -c -- ".shellescape(tarfile,1)."| ".g:tar_cmd." -".g:tar_readoptions." - ".tar_secure.shellescape(fname,1).decmp
300ed39e1d5SBram Moolenaar  elseif tarfile =~# '\.lrp$'
3015c73622aSBram Moolenaar"   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)
302*d4a1aabeSBram Moolenaar   exe "sil! r! cat -- ".shellescape(tarfile,1)." | gzip -d -c - | ".g:tar_cmd." -".g:tar_readoptions." - ".tar_secure.shellescape(fname,1).decmp
3035c73622aSBram Moolenaar  elseif tarfile =~# '\.lzma$'
3045c73622aSBram Moolenaar"   call Decho("7: exe silent r! lzma -d -c ".shellescape(tarfile,1)."| ".g:tar_cmd." -".g:tar_readoptions." - ".tar_secure.shellescape(fname,1).decmp)
305251e1912SBram Moolenaar   exe "sil! r! lzma -d -c -- ".shellescape(tarfile,1)."| ".g:tar_cmd." -".g:tar_readoptions." - ".tar_secure.shellescape(fname,1).decmp
306477db060SBram Moolenaar  elseif tarfile =~# '\.\(xz\|txz\)$'
307477db060SBram Moolenaar"   call Decho("3: exe silent r! xz --decompress --stdout -- ".shellescape(tarfile,1)." | ".g:tar_cmd." -".g:tar_readoptions." - ".tar_secure.shellescape(fname,1).decmp)
308251e1912SBram Moolenaar   exe "sil! r! xz --decompress --stdout -- ".shellescape(tarfile,1)." | ".g:tar_cmd." -".g:tar_readoptions." - ".tar_secure.shellescape(fname,1).decmp
309ed39e1d5SBram Moolenaar  else
310ed39e1d5SBram Moolenaar   if tarfile =~ '^\s*-'
3115c73622aSBram Moolenaar    " A file name starting with a dash is taken as an option.  Prepend ./ to avoid that.
312ed39e1d5SBram Moolenaar    let tarfile = substitute(tarfile, '-', './-', '')
313ed39e1d5SBram Moolenaar   endif
3145c73622aSBram Moolenaar"   call Decho("8: exe silent r! ".g:tar_cmd." -".g:tar_readoptions.tar_secure.shellescape(tarfile,1)." ".shellescape(fname,1).decmp)
3155c73622aSBram Moolenaar   exe "silent r! ".g:tar_cmd." -".g:tar_readoptions.shellescape(tarfile,1)." ".tar_secure.shellescape(fname,1).decmp
3168c8de839SBram Moolenaar  endif
3178c8de839SBram Moolenaar
3188c8de839SBram Moolenaar  if doro
3198c8de839SBram Moolenaar   " because the reverse process of compressing changed files back into the tarball is not currently supported
3208c8de839SBram Moolenaar   setlocal ro
3218c8de839SBram Moolenaar  endif
3228c8de839SBram Moolenaar
3237fc0c065SBram Moolenaar  let b:tarfile= a:fname
324c236c16dSBram Moolenaar  exe "file tarfile::".fnameescape(fname)
325a5792f58SBram Moolenaar
326a5792f58SBram Moolenaar  " cleanup
327251e1912SBram Moolenaar  keepj sil! 0d
328a5792f58SBram Moolenaar  set nomod
329a5792f58SBram Moolenaar
330bba577a2SBram Moolenaar  let &report= repkeep
3317fc0c065SBram Moolenaar"  call Dret("tar#Read : b:tarfile<".b:tarfile.">")
332a5792f58SBram Moolenaarendfun
333a5792f58SBram Moolenaar
334a5792f58SBram Moolenaar" ---------------------------------------------------------------------
335a5792f58SBram Moolenaar" tar#Write: {{{2
336a5792f58SBram Moolenaarfun! tar#Write(fname)
3377fc0c065SBram Moolenaar"  call Dfunc("tar#Write(fname<".a:fname.">) b:tarfile<".b:tarfile."> tblfile_".winnr()."<".s:tblfile_{winnr()}.">")
338bba577a2SBram Moolenaar  let repkeep= &report
339bba577a2SBram Moolenaar  set report=10
340a5792f58SBram Moolenaar
341ed39e1d5SBram Moolenaar  if !exists("g:tar_secure") && a:fname =~ '^\s*-\|\s\+-'
342ed39e1d5SBram Moolenaar   redraw!
3435c73622aSBram Moolenaar   echohl WarningMsg | echo '***warning*** (tar#Write) rejecting tarfile member<'.a:fname.'> because of embedded "-"'
344ed39e1d5SBram Moolenaar"   call Dret('tar#Write : rejecting tarfile member<'.fname.'> because of embedded "-"')
345ed39e1d5SBram Moolenaar   return
346ed39e1d5SBram Moolenaar  endif
347ed39e1d5SBram Moolenaar
348ab194816SBram Moolenaar  " sanity checks
349910f66f9SBram Moolenaar  if !executable(g:tar_cmd)
350c81e5e79SBram Moolenaar   redraw!
351910f66f9SBram Moolenaar   echohl Error | echo '***error*** (tar#Browse) "'.g:tar_cmd.'" not available on your system'
352bba577a2SBram Moolenaar   let &report= repkeep
353ab194816SBram Moolenaar"   call Dret("tar#Write")
354ab194816SBram Moolenaar   return
355ab194816SBram Moolenaar  endif
356ab194816SBram Moolenaar  if !exists("*mkdir")
357c81e5e79SBram Moolenaar   redraw!
358a5792f58SBram Moolenaar   echohl Error | echo "***error*** (tar#Write) sorry, mkdir() doesn't work on your system" | echohl None
359bba577a2SBram Moolenaar   let &report= repkeep
360ab194816SBram Moolenaar"   call Dret("tar#Write")
361ab194816SBram Moolenaar   return
362ab194816SBram Moolenaar  endif
363ab194816SBram Moolenaar
364ab194816SBram Moolenaar  let curdir= getcwd()
365ab194816SBram Moolenaar  let tmpdir= tempname()
366ab194816SBram Moolenaar"  call Decho("orig tempname<".tmpdir.">")
367ab194816SBram Moolenaar  if tmpdir =~ '\.'
368ab194816SBram Moolenaar   let tmpdir= substitute(tmpdir,'\.[^.]*$','','e')
369ab194816SBram Moolenaar  endif
370ab194816SBram Moolenaar"  call Decho("tmpdir<".tmpdir.">")
371ab194816SBram Moolenaar  call mkdir(tmpdir,"p")
372ab194816SBram Moolenaar
373ab194816SBram Moolenaar  " attempt to change to the indicated directory
374ab194816SBram Moolenaar  try
3758c8de839SBram Moolenaar   exe "cd ".fnameescape(tmpdir)
376ab194816SBram Moolenaar  catch /^Vim\%((\a\+)\)\=:E344/
377c81e5e79SBram Moolenaar   redraw!
378a5792f58SBram Moolenaar   echohl Error | echo "***error*** (tar#Write) cannot cd to temporary directory" | Echohl None
379bba577a2SBram Moolenaar   let &report= repkeep
380ab194816SBram Moolenaar"   call Dret("tar#Write")
381ab194816SBram Moolenaar   return
382ab194816SBram Moolenaar  endtry
383ab194816SBram Moolenaar"  call Decho("current directory now: ".getcwd())
384ab194816SBram Moolenaar
385a5792f58SBram Moolenaar  " place temporary files under .../_ZIPVIM_/
386a5792f58SBram Moolenaar  if isdirectory("_ZIPVIM_")
387a5792f58SBram Moolenaar   call s:Rmdir("_ZIPVIM_")
388ab194816SBram Moolenaar  endif
389a5792f58SBram Moolenaar  call mkdir("_ZIPVIM_")
390a5792f58SBram Moolenaar  cd _ZIPVIM_
391ab194816SBram Moolenaar"  call Decho("current directory now: ".getcwd())
392ab194816SBram Moolenaar
3937fc0c065SBram Moolenaar  let tarfile = substitute(b:tarfile,'tarfile:\(.\{-}\)::.*$','\1','')
3947fc0c065SBram Moolenaar  let fname   = substitute(b:tarfile,'tarfile:.\{-}::\(.*\)$','\1','')
395a5792f58SBram Moolenaar
39620aac6c1SBram Moolenaar  let gzip_command = s:get_gzip_command(tarfile)
39720aac6c1SBram Moolenaar
398a5792f58SBram Moolenaar  " handle compressed archives
3995c73622aSBram Moolenaar  if tarfile =~# '\.bz2'
4005c73622aSBram Moolenaar   call system("bzip2 -d -- ".shellescape(tarfile,0))
4015c73622aSBram Moolenaar   let tarfile = substitute(tarfile,'\.bz2','','e')
4025c73622aSBram Moolenaar   let compress= "bzip2 -- ".shellescape(tarfile,0)
4035c73622aSBram Moolenaar"   call Decho("compress<".compress.">")
4045c73622aSBram Moolenaar  elseif tarfile =~# '\.gz'
40520aac6c1SBram Moolenaar   call system(gzip_command . " -d -- ".shellescape(tarfile,0))
406a5792f58SBram Moolenaar   let tarfile = substitute(tarfile,'\.gz','','e')
4075c73622aSBram Moolenaar   let compress= "gzip -- ".shellescape(tarfile,0)
4085c73622aSBram Moolenaar"   call Decho("compress<".compress.">")
409a5792f58SBram Moolenaar  elseif tarfile =~# '\.tgz'
41020aac6c1SBram Moolenaar   call system(gzip_command . " -d -- ".shellescape(tarfile,0))
411a5792f58SBram Moolenaar   let tarfile = substitute(tarfile,'\.tgz','.tar','e')
4125c73622aSBram Moolenaar   let compress= "gzip -- ".shellescape(tarfile,0)
413a5792f58SBram Moolenaar   let tgz     = 1
414ed39e1d5SBram Moolenaar"   call Decho("compress<".compress.">")
415477db060SBram Moolenaar  elseif tarfile =~# '\.xz'
416477db060SBram Moolenaar   call system("xz -d -- ".shellescape(tarfile,0))
417477db060SBram Moolenaar   let tarfile = substitute(tarfile,'\.xz','','e')
418477db060SBram Moolenaar   let compress= "xz -- ".shellescape(tarfile,0)
419477db060SBram Moolenaar"   call Decho("compress<".compress.">")
420477db060SBram Moolenaar  elseif tarfile =~# '\.lzma'
421477db060SBram Moolenaar   call system("lzma -d -- ".shellescape(tarfile,0))
422477db060SBram Moolenaar   let tarfile = substitute(tarfile,'\.lzma','','e')
423477db060SBram Moolenaar   let compress= "lzma -- ".shellescape(tarfile,0)
424477db060SBram Moolenaar"   call Decho("compress<".compress.">")
425a5792f58SBram Moolenaar  endif
4268c8de839SBram Moolenaar"  call Decho("tarfile<".tarfile.">")
427a5792f58SBram Moolenaar
428a5792f58SBram Moolenaar  if v:shell_error != 0
429c81e5e79SBram Moolenaar   redraw!
430a5792f58SBram Moolenaar   echohl Error | echo "***error*** (tar#Write) sorry, unable to update ".tarfile." with ".fname | echohl None
431a5792f58SBram Moolenaar  else
432a5792f58SBram Moolenaar
433a5792f58SBram Moolenaar"   call Decho("tarfile<".tarfile."> fname<".fname.">")
434a5792f58SBram Moolenaar
4351cbe5f73SBram Moolenaar   if fname =~ '/'
436a5792f58SBram Moolenaar    let dirpath = substitute(fname,'/[^/]\+$','','e')
437ff034194SBram Moolenaar    if has("win32unix") && executable("cygpath")
4385c73622aSBram Moolenaar     let dirpath = substitute(system("cygpath ".shellescape(dirpath, 0)),'\n','','e')
4391cbe5f73SBram Moolenaar    endif
4401cbe5f73SBram Moolenaar    call mkdir(dirpath,"p")
4411cbe5f73SBram Moolenaar   endif
442a5792f58SBram Moolenaar   if tarfile !~ '/'
443a5792f58SBram Moolenaar    let tarfile= curdir.'/'.tarfile
444a5792f58SBram Moolenaar   endif
445ed39e1d5SBram Moolenaar   if tarfile =~ '^\s*-'
446ed39e1d5SBram Moolenaar    " A file name starting with a dash may be taken as an option.  Prepend ./ to avoid that.
447ed39e1d5SBram Moolenaar    let tarfile = substitute(tarfile, '-', './-', '')
448ed39e1d5SBram Moolenaar   endif
449a5792f58SBram Moolenaar"   call Decho("tarfile<".tarfile."> fname<".fname.">")
450a5792f58SBram Moolenaar
451ed39e1d5SBram Moolenaar   if exists("g:tar_secure")
452ed39e1d5SBram Moolenaar    let tar_secure= " -- "
453ed39e1d5SBram Moolenaar   else
454ed39e1d5SBram Moolenaar    let tar_secure= " "
455ed39e1d5SBram Moolenaar   endif
4568c8de839SBram Moolenaar   exe "w! ".fnameescape(fname)
457ff034194SBram Moolenaar   if has("win32unix") && executable("cygpath")
4585c73622aSBram Moolenaar    let tarfile = substitute(system("cygpath ".shellescape(tarfile,0)),'\n','','e')
459ab194816SBram Moolenaar   endif
460ab194816SBram Moolenaar
461a5792f58SBram Moolenaar   " delete old file from tarfile
4625c73622aSBram Moolenaar"   call Decho("system(".g:tar_cmd." --delete -f ".shellescape(tarfile,0)." -- ".shellescape(fname,0).")")
4635c73622aSBram Moolenaar   call system(g:tar_cmd." --delete -f ".shellescape(tarfile,0).tar_secure.shellescape(fname,0))
464ab194816SBram Moolenaar   if v:shell_error != 0
465c81e5e79SBram Moolenaar    redraw!
4668c8de839SBram Moolenaar    echohl Error | echo "***error*** (tar#Write) sorry, unable to update ".fnameescape(tarfile)." with ".fnameescape(fname) | echohl None
467ab194816SBram Moolenaar   else
468a5792f58SBram Moolenaar
469a5792f58SBram Moolenaar    " update tarfile with new file
4705c73622aSBram Moolenaar"    call Decho(g:tar_cmd." -".g:tar_writeoptions." ".shellescape(tarfile,0).tar_secure.shellescape(fname,0))
4715c73622aSBram Moolenaar    call system(g:tar_cmd." -".g:tar_writeoptions." ".shellescape(tarfile,0).tar_secure.shellescape(fname,0))
472a5792f58SBram Moolenaar    if v:shell_error != 0
473c81e5e79SBram Moolenaar     redraw!
4748c8de839SBram Moolenaar     echohl Error | echo "***error*** (tar#Write) sorry, unable to update ".fnameescape(tarfile)." with ".fnameescape(fname) | echohl None
475a5792f58SBram Moolenaar    elseif exists("compress")
476a5792f58SBram Moolenaar"     call Decho("call system(".compress.")")
477a5792f58SBram Moolenaar     call system(compress)
478a5792f58SBram Moolenaar     if exists("tgz")
479a5792f58SBram Moolenaar"      call Decho("rename(".tarfile.".gz,".substitute(tarfile,'\.tar$','.tgz','e').")")
480a5792f58SBram Moolenaar      call rename(tarfile.".gz",substitute(tarfile,'\.tar$','.tgz','e'))
481a5792f58SBram Moolenaar     endif
482a5792f58SBram Moolenaar    endif
483a5792f58SBram Moolenaar   endif
484a5792f58SBram Moolenaar
485a5792f58SBram Moolenaar   " support writing tarfiles across a network
486a5792f58SBram Moolenaar   if s:tblfile_{winnr()} =~ '^\a\+://'
487a5792f58SBram Moolenaar"    call Decho("handle writing <".tarfile."> across network to <".s:tblfile_{winnr()}.">")
488a5792f58SBram Moolenaar    let tblfile= s:tblfile_{winnr()}
489a5792f58SBram Moolenaar    1split|enew
4905c73622aSBram Moolenaar    let binkeep= &l:binary
491a5792f58SBram Moolenaar    let eikeep = &ei
492a5792f58SBram Moolenaar    set binary ei=all
493c236c16dSBram Moolenaar    exe "e! ".fnameescape(tarfile)
494a5792f58SBram Moolenaar    call netrw#NetWrite(tblfile)
495a5792f58SBram Moolenaar    let &ei       = eikeep
4965c73622aSBram Moolenaar    let &l:binary = binkeep
497a5792f58SBram Moolenaar    q!
498a5792f58SBram Moolenaar    unlet s:tblfile_{winnr()}
499a5792f58SBram Moolenaar   endif
500ab194816SBram Moolenaar  endif
501ab194816SBram Moolenaar
502ab194816SBram Moolenaar  " cleanup and restore current directory
503ab194816SBram Moolenaar  cd ..
504a5792f58SBram Moolenaar  call s:Rmdir("_ZIPVIM_")
505c236c16dSBram Moolenaar  exe "cd ".fnameescape(curdir)
506ab194816SBram Moolenaar  setlocal nomod
507ab194816SBram Moolenaar
508bba577a2SBram Moolenaar  let &report= repkeep
509ab194816SBram Moolenaar"  call Dret("tar#Write")
510ab194816SBram Moolenaarendfun
511ab194816SBram Moolenaar
512ab194816SBram Moolenaar" ---------------------------------------------------------------------
513ff034194SBram Moolenaar" tar#Diff: {{{2
514ff034194SBram Moolenaarfun! tar#Diff(userfname,fname)
515ff034194SBram Moolenaar"  call Dfunc("tar#Diff(userfname<".a:userfname."> fname<".a:fname.")")
516ff034194SBram Moolenaar  let fname= a:fname
517ff034194SBram Moolenaar  if a:userfname != ""
518ff034194SBram Moolenaar   let fname= a:userfname
519ff034194SBram Moolenaar  endif
520ff034194SBram Moolenaar  if filereadable(fname)
521ff034194SBram Moolenaar   " sets current file (from tarball) for diff'ing
522ff034194SBram Moolenaar   " splits window vertically
523ff034194SBram Moolenaar   " opens original file, sets it for diff'ing
524ff034194SBram Moolenaar   " sets up b:tardiff_otherbuf variables so each buffer knows about the other (for closing purposes)
525ff034194SBram Moolenaar   diffthis
526ff034194SBram Moolenaar   wincmd v
527ff034194SBram Moolenaar   exe "e ".fnameescape(fname)
528ff034194SBram Moolenaar   diffthis
529ff034194SBram Moolenaar  else
530ff034194SBram Moolenaar   redraw!
531ff034194SBram Moolenaar   echo "***warning*** unable to read file<".fname.">"
532ff034194SBram Moolenaar  endif
533ff034194SBram Moolenaar"  call Dret("tar#Diff")
534ff034194SBram Moolenaarendfun
535ff034194SBram Moolenaar
536ff034194SBram Moolenaar" ---------------------------------------------------------------------
5375c73622aSBram Moolenaar" s:Rmdir: {{{2
538ab194816SBram Moolenaarfun! s:Rmdir(fname)
539ab194816SBram Moolenaar"  call Dfunc("Rmdir(fname<".a:fname.">)")
540ab194816SBram Moolenaar  if has("unix")
5415c73622aSBram Moolenaar   call system("/bin/rm -rf -- ".shellescape(a:fname,0))
542ab194816SBram Moolenaar  elseif has("win32") || has("win95") || has("win64") || has("win16")
543ab194816SBram Moolenaar   if &shell =~? "sh$"
5445c73622aSBram Moolenaar    call system("/bin/rm -rf -- ".shellescape(a:fname,0))
545ab194816SBram Moolenaar   else
5465c73622aSBram Moolenaar    call system("del /S ".shellescape(a:fname,0))
547ab194816SBram Moolenaar   endif
548ab194816SBram Moolenaar  endif
549ab194816SBram Moolenaar"  call Dret("Rmdir")
550ab194816SBram Moolenaarendfun
551ab194816SBram Moolenaar
5528c8de839SBram Moolenaar" ---------------------------------------------------------------------
5535c73622aSBram Moolenaar" tar#Vimuntar: installs a tarball in the user's .vim / vimfiles directory {{{2
5545c73622aSBram Moolenaarfun! tar#Vimuntar(...)
5555c73622aSBram Moolenaar"  call Dfunc("tar#Vimuntar() a:0=".a:0." a:1<".(exists("a:1")? a:1 : "-n/a-").">")
5565c73622aSBram Moolenaar  let tarball = expand("%")
5575c73622aSBram Moolenaar"  call Decho("tarball<".tarball.">")
5585c73622aSBram Moolenaar  let tarbase = substitute(tarball,'\..*$','','')
5595c73622aSBram Moolenaar"  call Decho("tarbase<".tarbase.">")
5605c73622aSBram Moolenaar  let tarhome = expand("%:p")
5615c73622aSBram Moolenaar  if has("win32") || has("win95") || has("win64") || has("win16")
5625c73622aSBram Moolenaar   let tarhome= substitute(tarhome,'\\','/','g')
5635c73622aSBram Moolenaar  endif
5645c73622aSBram Moolenaar  let tarhome= substitute(tarhome,'/[^/]*$','','')
5655c73622aSBram Moolenaar"  call Decho("tarhome<".tarhome.">")
5665c73622aSBram Moolenaar  let tartail = expand("%:t")
5675c73622aSBram Moolenaar"  call Decho("tartail<".tartail.">")
5685c73622aSBram Moolenaar  let curdir  = getcwd()
5695c73622aSBram Moolenaar"  call Decho("curdir <".curdir.">")
5705c73622aSBram Moolenaar  " set up vimhome
5715c73622aSBram Moolenaar  if a:0 > 0 && a:1 != ""
5725c73622aSBram Moolenaar   let vimhome= a:1
573c236c16dSBram Moolenaar  else
5745c73622aSBram Moolenaar   let vimhome= vimball#VimballHome()
5755c73622aSBram Moolenaar  endif
5765c73622aSBram Moolenaar"  call Decho("vimhome<".vimhome.">")
5775c73622aSBram Moolenaar
5785c73622aSBram Moolenaar"  call Decho("curdir<".curdir."> vimhome<".vimhome.">")
5795c73622aSBram Moolenaar  if simplify(curdir) != simplify(vimhome)
5805c73622aSBram Moolenaar   " copy (possibly compressed) tarball to .vim/vimfiles
5815c73622aSBram Moolenaar"   call Decho(netrw#WinPath(g:tar_copycmd)." ".shellescape(tartail)." ".shellescape(vimhome))
5825c73622aSBram Moolenaar   call system(netrw#WinPath(g:tar_copycmd)." ".shellescape(tartail)." ".shellescape(vimhome))
5835c73622aSBram Moolenaar"   call Decho("exe cd ".fnameescape(vimhome))
5845c73622aSBram Moolenaar   exe "cd ".fnameescape(vimhome)
5855c73622aSBram Moolenaar  endif
5865c73622aSBram Moolenaar"  call Decho("getcwd<".getcwd().">")
5875c73622aSBram Moolenaar
5885c73622aSBram Moolenaar  " if necessary, decompress the tarball; then, extract it
5895c73622aSBram Moolenaar  if tartail =~ '\.tgz'
590*d4a1aabeSBram Moolenaar   let gzip_command = s:get_gzip_command(tarfile)
591*d4a1aabeSBram Moolenaar   if executable(gzip_command)
592*d4a1aabeSBram Moolenaar    silent exe "!" . gzip_command . " -d ".shellescape(tartail)
59320aac6c1SBram Moolenaar   elseif executable("gunzip")
5945c73622aSBram Moolenaar    silent exe "!gunzip ".shellescape(tartail)
5955c73622aSBram Moolenaar   elseif executable("gzip")
5965c73622aSBram Moolenaar    silent exe "!gzip -d ".shellescape(tartail)
5975c73622aSBram Moolenaar   else
5985c73622aSBram Moolenaar    echoerr "unable to decompress<".tartail."> on this sytem"
5995c73622aSBram Moolenaar    if simplify(curdir) != simplify(tarhome)
6005c73622aSBram Moolenaar     " remove decompressed tarball, restore directory
6015c73622aSBram Moolenaar"     call Decho("delete(".tartail.".tar)")
6025c73622aSBram Moolenaar     call delete(tartail.".tar")
6035c73622aSBram Moolenaar"     call Decho("exe cd ".fnameescape(curdir))
6045c73622aSBram Moolenaar     exe "cd ".fnameescape(curdir)
6055c73622aSBram Moolenaar    endif
6065c73622aSBram Moolenaar"    call Dret("tar#Vimuntar")
6075c73622aSBram Moolenaar    return
608c236c16dSBram Moolenaar   endif
6098c8de839SBram Moolenaar  else
6105c73622aSBram Moolenaar   call vimball#Decompress(tartail,0)
6118c8de839SBram Moolenaar  endif
6125c73622aSBram Moolenaar  let extractcmd= netrw#WinPath(g:tar_extractcmd)
6135c73622aSBram Moolenaar"  call Decho("system(".extractcmd." ".shellescape(tarbase.".tar").")")
6145c73622aSBram Moolenaar  call system(extractcmd." ".shellescape(tarbase.".tar"))
6155c73622aSBram Moolenaar
6165c73622aSBram Moolenaar  " set up help
6175c73622aSBram Moolenaar  if filereadable("doc/".tarbase.".txt")
6185c73622aSBram Moolenaar"   call Decho("exe helptags ".getcwd()."/doc")
6195c73622aSBram Moolenaar   exe "helptags ".getcwd()."/doc"
6205c73622aSBram Moolenaar  endif
6215c73622aSBram Moolenaar
6225c73622aSBram Moolenaar  if simplify(tarhome) != simplify(vimhome)
6235c73622aSBram Moolenaar   " remove decompressed tarball, restore directory
6245c73622aSBram Moolenaar   call delete(vimhome."/".tarbase.".tar")
6255c73622aSBram Moolenaar   exe "cd ".fnameescape(curdir)
6265c73622aSBram Moolenaar  endif
6275c73622aSBram Moolenaar
6285c73622aSBram Moolenaar"  call Dret("tar#Vimuntar")
6298c8de839SBram Moolenaarendfun
6308c8de839SBram Moolenaar
63120aac6c1SBram Moolenaarfunc s:get_gzip_command(file)
632*d4a1aabeSBram Moolenaar  " Try using the "file" command to get the actual compression type, since
633*d4a1aabeSBram Moolenaar  " there is no standard way for the naming: ".tgz", ".tbz", ".txz", etc.
634*d4a1aabeSBram Moolenaar  " If the "file" command doesn't work fall back to just using the file name.
635*d4a1aabeSBram Moolenaar  if a:file =~# 'z$'
636*d4a1aabeSBram Moolenaar    let filetype = system('file ' . a:file)
637*d4a1aabeSBram Moolenaar    if filetype =~ 'bzip2 compressed' && executable('bzip2')
63820aac6c1SBram Moolenaar      return 'bzip2'
63920aac6c1SBram Moolenaar    endif
640*d4a1aabeSBram Moolenaar    if filetype =~ 'XZ compressed' && executable('xz')
641*d4a1aabeSBram Moolenaar      return 'xz'
642*d4a1aabeSBram Moolenaar    endif
643*d4a1aabeSBram Moolenaar  endif
644*d4a1aabeSBram Moolenaar  if a:file =~# 'bz2$'
645*d4a1aabeSBram Moolenaar    return 'bzip2'
646*d4a1aabeSBram Moolenaar  endif
647*d4a1aabeSBram Moolenaar  if a:file =~# 'xz$'
648*d4a1aabeSBram Moolenaar    return 'xz'
649*d4a1aabeSBram Moolenaar  endif
65020aac6c1SBram Moolenaar  return 'gzip'
65120aac6c1SBram Moolenaarendfunc
65220aac6c1SBram Moolenaar
6535c73622aSBram Moolenaar" =====================================================================
654a5792f58SBram Moolenaar" Modelines And Restoration: {{{1
655a5792f58SBram Moolenaarlet &cpo= s:keepcpo
656a5792f58SBram Moolenaarunlet s:keepcpo
657a5792f58SBram Moolenaar" vim:ts=8 fdm=marker
658