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