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