updated for version 7.0147

This commit is contained in:
Bram Moolenaar
2005-09-14 21:40:12 +00:00
parent cd292719e0
commit ab194816fe
8 changed files with 229 additions and 44 deletions

View File

@ -1,11 +1,11 @@
" vim:set ts=8 sts=4 sw=4:
"
" tar.vim -- a Vim plugin for browsing tarfiles
" Copyright (c) 2002, Michael C. Toren <mct@toren.net>
" Distributed under the GNU General Public License.
"
" Version: 1.01
" Last Change: 2005 Jul 26
" Version: 2
" Date: Sep 14, 2005
" Modified By: Charles E. Campbell, Jr.
"
" Updates are available from <http://michael.toren.net/code/>. If you
" find this script useful, or have suggestions for improvements, please
@ -13,14 +13,15 @@
" Also look there for further comments and documentation.
"
" This part defines the functions. The autocommands are in plugin/tar.vim.
if exists("g:loaded_tar") || &cp
finish
endif
let g:loaded_tar= "v2"
let s:version = "1.01"
function! tar#Write(argument)
echo "ERROR: Sorry, no write support for tarfiles yet"
endfunction
function! tar#Read(argument, cleanup)
" ---------------------------------------------------------------------
" tar#Read: {{{1
fun! tar#Read(argument, cleanup)
" call Dfunc("tar#Read(argument<".a:argument."> cleanup=".a:cleanup.")")
let l:argument = a:argument
let l:argument = substitute(l:argument, '^tarfile:', '', '')
let l:argument = substitute(l:argument, '^\~', $HOME, '')
@ -28,7 +29,8 @@ function! tar#Read(argument, cleanup)
let l:tarfile = l:argument
while 1
if (l:tarfile == "" || l:tarfile == "/")
echo "ERROR: Could not find a readable tarfile in path:" l:argument
echo "***error*** (tar#Read) Could not find a readable tarfile in path:" l:argument
" call Dret("tar#Read")
return
endif
@ -42,6 +44,7 @@ function! tar#Read(argument, cleanup)
let l:toextract = strpart(l:argument, strlen(l:tarfile) + 1)
if (l:toextract == "")
" call Dret("tar#Read")
return
endif
@ -52,12 +55,90 @@ function! tar#Read(argument, cleanup)
if (a:cleanup)
0d "blank line
execute "doautocmd BufReadPost " . expand("%")
setlocal readonly
setlocal nomod
silent preserve
endif
endfunction
" call Dret("tar#Read")
endfun
function! tar#Browse(tarfile)
" ---------------------------------------------------------------------
" tar#Write: {{{1
fun! tar#Write(argument)
" call Dfunc("tar#Write(argument<".a:argument.">)")
"
" sanity checks
if !executable("tar")
echo "***error*** (TarWrite) sorry, your system doesn't appear to have the tar pgm"
" call Dret("tar#Write")
return
endif
if !exists("*mkdir")
echo "***error*** (TarWrite) sorry, mkdir() doesn't work on your system"
" call Dret("tar#Write")
return
endif
let curdir= getcwd()
let tmpdir= tempname()
" call Decho("orig tempname<".tmpdir.">")
if tmpdir =~ '\.'
let tmpdir= substitute(tmpdir,'\.[^.]*$','','e')
endif
" call Decho("tmpdir<".tmpdir.">")
call mkdir(tmpdir,"p")
" attempt to change to the indicated directory
try
exe "cd ".escape(tmpdir,' \')
catch /^Vim\%((\a\+)\)\=:E344/
echo "***error*** (TarWrite) cannot cd to temporary directory"
" call Dret("tar#Write")
return
endtry
" call Decho("current directory now: ".getcwd())
" place temporary files under .../_TARVIM_/
if isdirectory("_TARVIM_")
call s:Rmdir("_TARVIM_")
endif
call mkdir("_TARVIM_")
cd _TARVIM_
" call Decho("current directory now: ".getcwd())
let tarfile = curdir."/".substitute(a:argument,'tarfile:\([^/]\{-}\)/.*$','\1','')
let path = substitute(a:argument,'^.\{-}/','','')
let dirpath = substitute(path,'/\=[^/]\+$','','')
" call Decho("path <".path.">")
" call Decho("dirpath<".dirpath.">")
call mkdir(dirpath,"p")
exe "w! ".path
if executable("cygpath")
let path = substitute(system("cygpath ".path),'\n','','e')
let tarfile = substitute(system("cygpath ".tarfile),'\n','','e')
endif
" call Decho("tar --delete -f ".tarfile." ".path)
call system("tar --delete -f ".tarfile." ".path)
if v:shell_error != 0
echo "***error*** (TarWrite) sorry, your tar pgm doesn't support deletion of ".path
else
" call Decho("tar -rf ".tarfile." ".path)
call system("tar -rf ".tarfile." ".path)
endif
" cleanup and restore current directory
cd ..
call s:Rmdir("_TARVIM_")
exe "cd ".escape(curdir,' \')
setlocal nomod
" call Dret("tar#Write")
endfun
" ---------------------------------------------------------------------
" tar#Browse: {{{1
fun! tar#Browse(tarfile)
" call Dfunc("tar#Browse(tarfile<".a:tarfile.">)")
setlocal noswapfile
setlocal buftype=nofile
setlocal bufhidden=hide
@ -76,11 +157,12 @@ function! tar#Browse(tarfile)
endif
if ! filereadable(l:tarfile)
echo "ERROR: File not readable:" l:tarfile
echo "***error*** (tar#Browse) File not readable:" l:tarfile
" call Dret("tar#Browse")
return
endif
call s:Say("\" tar.vim version " . s:version)
call s:Say("\" tar.vim version " . g:loaded_tar)
call s:Say("\" Browsing tarfile " . l:tarfile)
call s:Say("\" Hit ENTER to view a file in a new window")
call s:Say("")
@ -89,12 +171,15 @@ function! tar#Browse(tarfile)
0d "blank line
/^$/1
setlocal readonly
setlocal nomodifiable
noremap <silent> <buffer> <cr> :call <SID>TarBrowseSelect()<cr>
endfunction
setlocal noma nomod ro
function! s:TarBrowseSelect()
noremap <silent> <buffer> <cr> :call <SID>TarBrowseSelect()<cr>
" call Dret("tar#Browse")
endfun
" ---------------------------------------------------------------------
" TarBrowseSelect: {{{1
fun! s:TarBrowseSelect()
let l:line = getline(".")
if (l:line =~ '^" ')
@ -110,10 +195,12 @@ function! s:TarBrowseSelect()
new
wincmd _
execute "e " . l:selection
endfunction
endfun
" kludge to deal with compressed archives
function! s:TarCatCommand(tarfile)
" ---------------------------------------------------------------------
" TarCatCommand: kludge to deal with compressed archives {{{1
fun! s:TarCatCommand(tarfile)
" call Dfunc("s:TarCatCommand(tarfile<".a:tarfile.">)")
if a:tarfile =~# '\.\(gz\|tgz\|Z\)$'
let l:cat = "gzip -d -c"
elseif a:tarfile =~# '\.bz2$'
@ -121,10 +208,33 @@ function! s:TarCatCommand(tarfile)
else
let l:cat = "cat"
endif
" call Dret("s:TarCatCommand ".l:cat)
return l:cat
endfunction
endfun
function! s:Say(string)
" ---------------------------------------------------------------------
" Say: {{{1
fun! s:Say(string)
let @" = a:string
$ put
endfunction
endfun
" ---------------------------------------------------------------------
" Rmdir: {{{1
fun! s:Rmdir(fname)
" call Dfunc("Rmdir(fname<".a:fname.">)")
if has("unix")
call system("/bin/rm -rf ".a:fname)
elseif has("win32") || has("win95") || has("win64") || has("win16")
if &shell =~? "sh$"
call system("/bin/rm -rf ".a:fname)
else
call system("del /S ".a:fname)
endif
endif
" call Dret("Rmdir")
endfun
" ---------------------------------------------------------------------
" Modelines: {{{1
" vim:set ts=8 sts=4 sw=4 fdm=marker: