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