1
0
forked from aniani/vim

updated for version 7.0117

This commit is contained in:
Bram Moolenaar
2005-07-27 21:13:01 +00:00
parent 231334e6ef
commit 87e25fdf80
43 changed files with 2300 additions and 880 deletions

View File

@@ -1,13 +1,13 @@
" NetrwFileHandlers: contains various extension-based file handlers for
" netrw's browsers' x command ("eXecute launcher")
" Author: Charles E. Campbell, Jr.
" Date: Aug 31, 2004
" Version: 3
" Author: Charles E. Campbell, Jr.
" Date: Aug 31, 2004
" Version: 3
" ---------------------------------------------------------------------
" Prevent Reloading: {{{1
if exists("g:loaded_netrwfilehandlers") || &cp
finish
finish
endif
let g:loaded_netrwfilehandlers= "v3"
@@ -15,22 +15,16 @@ let g:loaded_netrwfilehandlers= "v3"
" NetrwFileHandler_html: handles html when the user hits "x" when the {{{1
" cursor is atop a *.html file
fun! NetrwFileHandler_html(pagefile)
" call Dfunc("NetrwFileHandler_html(".a:pagefile.")")
let page= substitute(a:pagefile,'^','file://','')
let page = substitute(a:pagefile, '^', 'file://', '')
if executable("mozilla")
" call Decho("executing !mozilla ".page)
exe "!mozilla \"".page.'"'
exe "!mozilla \"" . page . '"'
elseif executable("netscape")
" call Decho("executing !netscape ".page)
exe "!netscape \"".page.'"'
exe "!netscape \"" . page . '"'
else
" call Dret("NetrwFileHandler_html 0")
return 0
return 0
endif
" call Dret("NetrwFileHandler_html 1")
return 1
endfun
@@ -38,240 +32,192 @@ endfun
" NetrwFileHandler_htm: handles html when the user hits "x" when the {{{1
" cursor is atop a *.htm file
fun! NetrwFileHandler_htm(pagefile)
" call Dfunc("NetrwFileHandler_htm(".a:pagefile.")")
let page= substitute(a:pagefile,'^','file://','')
let page = substitute(a:pagefile, '^', 'file://', '')
if executable("mozilla")
" call Decho("executing !mozilla ".page)
exe "!mozilla \"".page.'"'
exe "!mozilla \"" . page . '"'
elseif executable("netscape")
" call Decho("executing !netscape ".page)
exe "!netscape \"".page.'"'
exe "!netscape \"" . page . '"'
else
" call Dret("NetrwFileHandler_htm 0")
return 0
return 0
endif
" call Dret("NetrwFileHandler_htm 1")
return 1
endfun
" ---------------------------------------------------------------------
" NetrwFileHandler_jpg: {{{1
fun! NetrwFileHandler_jpg(jpgfile)
" call Dfunc("NetrwFileHandler_jpg(jpgfile<".a:jpgfile.">)")
if executable("gimp")
exe "silent! !gimp -s ".a:jpgfile
exe "silent! !gimp -s " . a:jpgfile
elseif executable(expand("$SystemRoot")."/SYSTEM32/MSPAINT.EXE")
" call Decho("silent! !".expand("$SystemRoot")."/SYSTEM32/MSPAINT ".escape(a:jpgfile," []|'"))
exe "!".expand("$SystemRoot")."/SYSTEM32/MSPAINT \"".a:jpgfile.'"'
exe "!" . expand("$SystemRoot") . "/SYSTEM32/MSPAINT \"" . a:jpgfile . '"'
else
" call Dret("NetrwFileHandler_jpg 0")
return 0
return 0
endif
" call Dret("NetrwFileHandler_jpg 1")
return 1
endfun
" ---------------------------------------------------------------------
" NetrwFileHandler_gif: {{{1
fun! NetrwFileHandler_gif(giffile)
" call Dfunc("NetrwFileHandler_gif(giffile<".a:giffile.">)")
if executable("gimp")
exe "silent! !gimp -s ".a:giffile
elseif executable(expand("$SystemRoot")."/SYSTEM32/MSPAINT.EXE")
exe "silent! !".expand("$SystemRoot")."/SYSTEM32/MSPAINT \"".a:giffile.'"'
exe "silent! !gimp -s " . a:giffile
elseif executable(expand("$SystemRoot") . "/SYSTEM32/MSPAINT.EXE")
exe "silent! !" . expand("$SystemRoot") . "/SYSTEM32/MSPAINT \"" . a:giffile . '"'
else
" call Dret("NetrwFileHandler_gif 0")
return 0
endif
" call Dret("NetrwFileHandler_gif 1")
return 1
endfun
" ---------------------------------------------------------------------
" NetrwFileHandler_png: {{{1
fun! NetrwFileHandler_png(pngfile)
" call Dfunc("NetrwFileHandler_png(pngfile<".a:pngfile.">)")
if executable("gimp")
exe "silent! !gimp -s ".a:pngfile
elseif executable(expand("$SystemRoot")."/SYSTEM32/MSPAINT.EXE")
exe "silent! !".expand("$SystemRoot")."/SYSTEM32/MSPAINT \"".a:pngfile.'"'
exe "silent! !gimp -s " . a:pngfile
elseif executable(expand("$SystemRoot") . "/SYSTEM32/MSPAINT.EXE")
exe "silent! !" . expand("$SystemRoot") . "/SYSTEM32/MSPAINT \"" . a:pngfile . '"'
else
" call Dret("NetrwFileHandler_png 0")
return 0
endif
" call Dret("NetrwFileHandler_png 1")
return 1
endfun
" ---------------------------------------------------------------------
" NetrwFileHandler_pnm: {{{1
fun! NetrwFileHandler_pnm(pnmfile)
" call Dfunc("NetrwFileHandler_pnm(pnmfile<".a:pnmfile.">)")
if executable("gimp")
exe "silent! !gimp -s ".a:pnmfile
elseif executable(expand("$SystemRoot")."/SYSTEM32/MSPAINT.EXE")
exe "silent! !".expand("$SystemRoot")."/SYSTEM32/MSPAINT \"".a:pnmfile.'"'
exe "silent! !gimp -s " . a:pnmfile
elseif executable(expand("$SystemRoot") . "/SYSTEM32/MSPAINT.EXE")
exe "silent! !" . expand("$SystemRoot") . "/SYSTEM32/MSPAINT \"" . a:pnmfile . '"'
else
" call Dret("NetrwFileHandler_pnm 0")
return 0
endif
" call Dret("NetrwFileHandler_pnm 1")
return 1
endfun
" ---------------------------------------------------------------------
" NetrwFileHandler_bmp: visualize bmp files {{{1
fun! NetrwFileHandler_bmp(bmpfile)
" call Dfunc("NetrwFileHandler_bmp(bmpfile<".a:bmpfile.">)")
if executable("gimp")
exe "silent! !gimp -s ".a:bmpfile
exe "silent! !gimp -s " . a:bmpfile
elseif executable(expand("$SystemRoot")."/SYSTEM32/MSPAINT.EXE")
exe "silent! !".expand("$SystemRoot")."/SYSTEM32/MSPAINT \"".a:bmpfile.'"'
exe "silent! !" . expand("$SystemRoot") . "/SYSTEM32/MSPAINT \"" . a:bmpfile . '"'
else
" call Dret("NetrwFileHandler_bmp 0")
return 0
endif
" call Dret("NetrwFileHandler_bmp 1")
return 1
endfun
" ---------------------------------------------------------------------
" NetrwFileHandler_pdf: visualize pdf files {{{1
fun! NetrwFileHandler_pdf(pdf)
" " call Dfunc("NetrwFileHandler_pdf(pdf<".a:pdf.">)")
if executable("gs")
exe 'silent! !gs "'.a:pdf.'"'
if executable("acroread")
exe 'silent! !acroread "' . a:pdf . '"'
elseif executable("gs")
exe 'silent! !gs "' . a:pdf . '"'
else
" " call Dret("NetrwFileHandler_pdf 0")
return 0
endif
" " call Dret("NetrwFileHandler_pdf 1")
return 1
endfun
" ---------------------------------------------------------------------
" NetrwFileHandler_sxw: visualize sxw files {{{1
fun! NetrwFileHandler_sxw(sxw)
" " call Dfunc("NetrwFileHandler_sxw(sxw<".a:sxw.">)")
if executable("gs")
exe 'silent! !gs "'.a:sxw.'"'
exe 'silent! !gs "' . a:sxw . '"'
else
" " call Dret("NetrwFileHandler_sxw 0")
return 0
endif
" " call Dret("NetrwFileHandler_sxw 1")
return 1
endfun
" ---------------------------------------------------------------------
" NetrwFileHandler_doc: visualize doc files {{{1
fun! NetrwFileHandler_doc(doc)
" " call Dfunc("NetrwFileHandler_doc(doc<".a:doc.">)")
if executable("oowriter")
exe 'silent! !oowriter "'.a:doc.'"'
exe 'silent! !oowriter "' . a:doc . '"'
redraw!
else
" " call Dret("NetrwFileHandler_doc 0")
return 0
endif
" " call Dret("NetrwFileHandler_doc 1")
return 1
endfun
" ---------------------------------------------------------------------
" NetrwFileHandler_sxw: visualize sxw files {{{1
fun! NetrwFileHandler_sxw(sxw)
" " call Dfunc("NetrwFileHandler_sxw(sxw<".a:sxw.">)")
if executable("oowriter")
exe 'silent! !oowriter "'.a:sxw.'"'
exe 'silent! !oowriter "' . a:sxw . '"'
redraw!
else
" " call Dret("NetrwFileHandler_sxw 0")
return 0
endif
" " call Dret("NetrwFileHandler_sxw 1")
return 1
endfun
" ---------------------------------------------------------------------
" NetrwFileHandler_xls: visualize xls files {{{1
fun! NetrwFileHandler_xls(xls)
" " call Dfunc("NetrwFileHandler_xls(xls<".a:xls.">)")
if executable("oocalc")
exe 'silent! !oocalc "'.a:xls.'"'
exe 'silent! !oocalc "' . a:xls . '"'
redraw!
else
" " call Dret("NetrwFileHandler_xls 0")
return 0
endif
" " call Dret("NetrwFileHandler_xls 1")
return 1
endfun
" ---------------------------------------------------------------------
" NetrwFileHandler_ps: handles PostScript files {{{1
fun! NetrwFileHandler_ps(ps)
" call Dfunc("NetrwFileHandler_ps()")
if executable("gs")
exe "silent! !gs ".a:ps
exe "silent! !gs " . a:ps
redraw!
elseif executable("ghostscript")
exe "silent! !ghostscript ".a:ps
exe "silent! !ghostscript " . a:ps
redraw!
elseif executable("ghostscript")
exe "silent! !ghostscript ".a:ps
exe "silent! !ghostscript " . a:ps
redraw!
elseif executable("gswin32")
exe "silent! !gswin32 \"".a:ps.'"'
exe "silent! !gswin32 \"" . a:ps . '"'
redraw!
else
" call Dret("NetrwFileHandler_ps 0")
return 0
endif
" call Dret("NetrwFileHandler_ps 1")
return 1
endfun
" ---------------------------------------------------------------------
" NetrwFileHandler_eps: handles encapsulated PostScript files {{{1
fun! NetrwFileHandler_eps(eps)
" call Dfunc("NetrwFileHandler_ps()")
if executable("gs")
exe "silent! !gs ".a:eps
exe "silent! !gs " . a:eps
redraw!
elseif executable("ghostscript")
exe "silent! !ghostscript ".a:eps
exe "silent! !ghostscript " . a:eps
redraw!
elseif executable("ghostscript")
exe "silent! !ghostscript ".a:eps
exe "silent! !ghostscript " . a:eps
redraw!
elseif executable("gswin32")
exe "silent! !gswin32 \"".a:eps.'"'
exe "silent! !gswin32 \"" . a:eps . '"'
redraw!
else
" call Dret("NetrwFileHandler_ps 0")
return 0
endif
endfun
@@ -279,35 +225,29 @@ endfun
" ---------------------------------------------------------------------
" NetrwFileHandler_fig: handles xfig files {{{1
fun! NetrwFileHandler_fig(fig)
" call Dfunc("NetrwFileHandler_fig()")
if executable("xfig")
exe "silent! !xfig ".a:fig
exe "silent! !xfig " . a:fig
redraw!
else
" call Dret("NetrwFileHandler_fig 0")
return 0
endif
" call Dret("NetrwFileHandler_fig 1")
return 1
endfun
" ---------------------------------------------------------------------
" NetrwFileHandler_obj: handles tgif's obj files {{{1
fun! NetrwFileHandler_obj(obj)
" call Dfunc("NetrwFileHandler_obj()")
if has("unix") && executable("tgif")
exe "silent! !tgif ".a:obj
exe "silent! !tgif " . a:obj
redraw!
else
" call Dret("NetrwFileHandler_obj 0")
return 0
endif
" call Dret("NetrwFileHandler_obj 1")
return 1
endfun
" ---------------------------------------------------------------------
" vim: ts=4 fdm=marker
" vim: fdm=marker

View File

@@ -1,6 +1,6 @@
" Vim plugin for editing compressed files.
" Maintainer: Bram Moolenaar <Bram@vim.org>
" Last Change: 2005 May 18
" Last Change: 2005 Jul 26
" Exit quickly when:
" - this plugin was already loaded
@@ -15,188 +15,22 @@ augroup gzip
" Remove all gzip autocommands
au!
" Enable editing of gzipped files
" set binary mode before reading the file
" use "gzip -d", gunzip isn't always available
" Enable editing of gzipped files.
" The functions are defined in autoload/gzip.vim.
"
" Set binary mode before reading the file.
" Use "gzip -d", gunzip isn't always available.
autocmd BufReadPre,FileReadPre *.gz,*.bz2,*.Z setlocal bin
autocmd BufReadPost,FileReadPost *.gz call s:read("gzip -dn")
autocmd BufReadPost,FileReadPost *.bz2 call s:read("bzip2 -d")
autocmd BufReadPost,FileReadPost *.Z call s:read("uncompress")
autocmd BufWritePost,FileWritePost *.gz call s:write("gzip")
autocmd BufWritePost,FileWritePost *.bz2 call s:write("bzip2")
autocmd BufWritePost,FileWritePost *.Z call s:write("compress -f")
autocmd FileAppendPre *.gz call s:appre("gzip -dn")
autocmd FileAppendPre *.bz2 call s:appre("bzip2 -d")
autocmd FileAppendPre *.Z call s:appre("uncompress")
autocmd FileAppendPost *.gz call s:write("gzip")
autocmd FileAppendPost *.bz2 call s:write("bzip2")
autocmd FileAppendPost *.Z call s:write("compress -f")
autocmd BufReadPost,FileReadPost *.gz call gzip#read("gzip -dn")
autocmd BufReadPost,FileReadPost *.bz2 call gzip#read("bzip2 -d")
autocmd BufReadPost,FileReadPost *.Z call gzip#read("uncompress")
autocmd BufWritePost,FileWritePost *.gz call gzip#write("gzip")
autocmd BufWritePost,FileWritePost *.bz2 call gzip#write("bzip2")
autocmd BufWritePost,FileWritePost *.Z call gzip#write("compress -f")
autocmd FileAppendPre *.gz call gzip#appre("gzip -dn")
autocmd FileAppendPre *.bz2 call gzip#appre("bzip2 -d")
autocmd FileAppendPre *.Z call gzip#appre("uncompress")
autocmd FileAppendPost *.gz call gzip#write("gzip")
autocmd FileAppendPost *.bz2 call gzip#write("bzip2")
autocmd FileAppendPost *.Z call gzip#write("compress -f")
augroup END
" Function to check that executing "cmd [-f]" works.
" The result is cached in s:have_"cmd" for speed.
fun s:check(cmd)
let name = substitute(a:cmd, '\(\S*\).*', '\1', '')
if !exists("s:have_" . name)
let e = executable(name)
if e < 0
let r = system(name . " --version")
let e = (r !~ "not found" && r != "")
endif
exe "let s:have_" . name . "=" . e
endif
exe "return s:have_" . name
endfun
" Set b:gzip_comp_arg to the gzip argument to be used for compression, based on
" the flags in the compressed file.
" The only compression methods that can be detected are max speed (-1) and max
" compression (-9).
fun s:set_compression(line)
" get the Compression Method
let l:cm = char2nr(a:line[2])
" if it's 8 (DEFLATE), we can check for the compression level
if l:cm == 8
" get the eXtra FLags
let l:xfl = char2nr(a:line[8])
" max compression
if l:xfl == 2
let b:gzip_comp_arg = "-9"
" min compression
elseif l:xfl == 4
let b:gzip_comp_arg = "-1"
endif
endif
endfun
" After reading compressed file: Uncompress text in buffer with "cmd"
fun s:read(cmd)
" don't do anything if the cmd is not supported
if !s:check(a:cmd)
return
endif
" for gzip check current compression level and set b:gzip_comp_arg.
silent! unlet b:gzip_comp_arg
if a:cmd[0] == 'g'
call s:set_compression(getline(1))
endif
" make 'patchmode' empty, we don't want a copy of the written file
let pm_save = &pm
set pm=
" remove 'a' and 'A' from 'cpo' to avoid the alternate file changes
let cpo_save = &cpo
set cpo-=a cpo-=A
" set 'modifiable'
let ma_save = &ma
setlocal ma
" when filtering the whole buffer, it will become empty
let empty = line("'[") == 1 && line("']") == line("$")
let tmp = tempname()
let tmpe = tmp . "." . expand("<afile>:e")
" write the just read lines to a temp file "'[,']w tmp.gz"
execute "silent '[,']w " . tmpe
" uncompress the temp file: call system("gzip -dn tmp.gz")
call system(a:cmd . " " . tmpe)
if !filereadable(tmp)
" uncompress didn't work! Keep the compressed file then.
echoerr "Error: Could not read uncompressed file"
return
endif
" delete the compressed lines; remember the line number
let l = line("'[") - 1
if exists(":lockmarks")
lockmarks '[,']d _
else
'[,']d _
endif
" read in the uncompressed lines "'[-1r tmp"
setlocal nobin
if exists(":lockmarks")
execute "silent lockmarks " . l . "r " . tmp
else
execute "silent " . l . "r " . tmp
endif
" if buffer became empty, delete trailing blank line
if empty
silent $delete _
1
endif
" delete the temp file and the used buffers
call delete(tmp)
silent! exe "bwipe " . tmp
silent! exe "bwipe " . tmpe
let &pm = pm_save
let &cpo = cpo_save
let &l:ma = ma_save
" When uncompressed the whole buffer, do autocommands
if empty
if &verbose >= 8
execute "doau BufReadPost " . expand("%:r")
else
execute "silent! doau BufReadPost " . expand("%:r")
endif
endif
endfun
" After writing compressed file: Compress written file with "cmd"
fun s:write(cmd)
" don't do anything if the cmd is not supported
if s:check(a:cmd)
" Rename the file before compressing it.
let nm = resolve(expand("<afile>"))
let nmt = s:tempname(nm)
if rename(nm, nmt) == 0
if exists("b:gzip_comp_arg")
call system(a:cmd . " " . b:gzip_comp_arg . " " . nmt)
else
call system(a:cmd . " " . nmt)
endif
call rename(nmt . "." . expand("<afile>:e"), nm)
endif
endif
endfun
" Before appending to compressed file: Uncompress file with "cmd"
fun s:appre(cmd)
" don't do anything if the cmd is not supported
if s:check(a:cmd)
let nm = expand("<afile>")
" for gzip check current compression level and set b:gzip_comp_arg.
silent! unlet b:gzip_comp_arg
if a:cmd[0] == 'g'
call s:set_compression(readfile(nm, "b", 1)[0])
endif
" Rename to a weird name to avoid the risk of overwriting another file
let nmt = expand("<afile>:p:h") . "/X~=@l9q5"
let nmte = nmt . "." . expand("<afile>:e")
if rename(nm, nmte) == 0
if &patchmode != "" && getfsize(nm . &patchmode) == -1
" Create patchmode file by creating the decompressed file new
call system(a:cmd . " -c " . nmte . " > " . nmt)
call rename(nmte, nm . &patchmode)
else
call system(a:cmd . " " . nmte)
endif
call rename(nmt, nm)
endif
endif
endfun
" find a file name for the file to be compressed. Use "name" without an
" extension if possible. Otherwise use a weird name to avoid overwriting an
" existing file.
fun s:tempname(name)
let fn = fnamemodify(a:name, ":r")
if !filereadable(fn) && !isdirectory(fn)
return fn
endif
return fnamemodify(a:name, ":p:h") . "/X~=@l9q5"
endfun
" vim: set sw=2 :

View File

@@ -1,185 +1,34 @@
" vim:set ts=4 sw=4 ai nobackup:
" tar.vim -- a vim plugin for browsing tarfiles
" 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
"
" Updates are available from <http://michael.toren.net/code/>. If you
" find this script useful, or have suggestions for improvements, please
" let me know.
" Also look there for further comments and documentation.
"
" Usage:
" Once this script is installed, attempting to edit a tarfile will present
" the user with a list of files contained in the tar archive. By moving the
" cursor over a filename and pressing ENTER, the contents of a file can be
" viewed in read-only mode, in a new window. Unfortunately, write support
" for tarfile components is not currently possible.
"
" Requirements:
" GNU tar, or a tar implementation that supports the "P" (don't strip
" out leading /'s from filenames), and "O" (extract files to standard
" output) options. Additionally, gzip is required for handling *.tar.Z,
" *.tar.gz, and *.tgz compressed tarfiles, and bzip2 is required for
" handling *.tar.bz2 compressed tarfiles. A unix-like operating system
" is probably also required.
"
" Installation:
" Place this file, tar.vim, in your $HOME/.vim/plugin directory, and
" either restart vim, or execute ":source $HOME/.vim/plugin/tar.vim"
"
" Todo:
" - Handle zipfiles?
" - Implement write support, somehow.
"
" License:
" This program is free software; you can redistribute it and/or modify it
" under the terms of the GNU General Public License, version 2, as published
" by the Free Software Foundation.
"
" This program is distributed in the hope that it will be useful, but
" WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
" or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
" for more details.
"
" A copy of the GNU GPL is available as /usr/doc/copyright/GPL on Debian
" systems, or on the World Wide Web at http://www.gnu.org/copyleft/gpl.html
" You can also obtain it by writing to the Free Software Foundation, Inc.,
" 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
"
" Changelog:
" Tue Dec 31 13:38:08 EST 2002 First release to beta testers
" Sat Jan 4 14:06:19 EST 2003 Version 1.00 released
let s:version = "1.00"
" This part only sets the autocommands. The functions are in autoload/tar.vim.
if has("autocmd")
augroup tar
au!
au BufReadCmd tarfile:* call s:TarRead(expand("<afile>"), 1)
au BufReadCmd tarfile:*/* call s:TarRead(expand("<afile>"), 1)
au FileReadCmd tarfile:* call s:TarRead(expand("<afile>"), 0)
au FileReadCmd tarfile:*/* call s:TarRead(expand("<afile>"), 0)
augroup tar
au!
au BufReadCmd tarfile:* call tar#Read(expand("<afile>"), 1)
au BufReadCmd tarfile:*/* call tar#Read(expand("<afile>"), 1)
au FileReadCmd tarfile:* call tar#Read(expand("<afile>"), 0)
au FileReadCmd tarfile:*/* call tar#Read(expand("<afile>"), 0)
au BufWriteCmd tarfile:* call s:TarWrite(expand("<afile>"))
au BufWriteCmd tarfile:*/* call s:TarWrite(expand("<afile>"))
au FileWriteCmd tarfile:* call s:TarWrite(expand("<afile>"))
au FileWriteCmd tarfile:*/* call s:TarWrite(expand("<afile>"))
au BufWriteCmd tarfile:* call tar#Write(expand("<afile>"))
au BufWriteCmd tarfile:*/* call tar#Write(expand("<afile>"))
au FileWriteCmd tarfile:* call tar#Write(expand("<afile>"))
au FileWriteCmd tarfile:*/* call tar#Write(expand("<afile>"))
au BufReadCmd *.tar call s:TarBrowse(expand("<afile>"))
au BufReadCmd *.tar.gz call s:TarBrowse(expand("<afile>"))
au BufReadCmd *.tar.bz2 call s:TarBrowse(expand("<afile>"))
au BufReadCmd *.tar.Z call s:TarBrowse(expand("<afile>"))
au BufReadCmd *.tgz call s:TarBrowse(expand("<afile>"))
augroup END
au BufReadCmd *.tar call tar#Browse(expand("<afile>"))
au BufReadCmd *.tar.gz call tar#Browse(expand("<afile>"))
au BufReadCmd *.tar.bz2 call tar#Browse(expand("<afile>"))
au BufReadCmd *.tar.Z call tar#Browse(expand("<afile>"))
au BufReadCmd *.tgz call tar#Browse(expand("<afile>"))
augroup END
endif
function! s:TarWrite(argument)
echo "ERROR: Sorry, no write support for tarfiles yet"
endfunction
function! s:TarRead(argument, cleanup)
let l:argument = a:argument
let l:argument = substitute(l:argument, '^tarfile:', '', '')
let l:argument = substitute(l:argument, '^\~', $HOME, '')
let l:tarfile = l:argument
while 1
if (l:tarfile == "" || l:tarfile == "/")
echo "ERROR: Could not find a readable tarfile in path:" l:argument
return
endif
if filereadable(l:tarfile) " found it!
break
endif
let l:tarfile = fnamemodify(l:tarfile, ":h")
endwhile
let l:toextract = strpart(l:argument, strlen(l:tarfile) + 1)
if (l:toextract == "")
return
endif
let l:cat = s:TarCatCommand(l:tarfile)
execute "r !" . l:cat . " < '" . l:tarfile . "'"
\ " | tar OPxf - '" . l:toextract . "'"
if (a:cleanup)
0d "blank line
execute "doautocmd BufReadPost " . expand("%")
setlocal readonly
silent preserve
endif
endfunction
function! s:TarBrowse(tarfile)
setlocal noswapfile
setlocal buftype=nofile
setlocal bufhidden=hide
setlocal filetype=
setlocal nobuflisted
setlocal buftype=nofile
setlocal wrap
let l:tarfile = a:tarfile
let b:tarfile = l:tarfile
let l:cat = s:TarCatCommand(l:tarfile)
if ! filereadable(l:tarfile)
let l:tarfile = substitute(l:tarfile, '^tarfile:', '', '')
endif
if ! filereadable(l:tarfile)
echo "ERROR: File not readable:" l:tarfile
return
endif
call s:Say("\" tar.vim version " . s:version)
call s:Say("\" Browsing tarfile " . l:tarfile)
call s:Say("\" Hit ENTER to view contents in new window")
call s:Say("")
silent execute "r!" . l:cat . "<'" . l:tarfile . "'| tar Ptf - "
0d "blank line
/^$/1
setlocal readonly
setlocal nomodifiable
noremap <silent> <buffer> <cr> :call <SID>TarBrowseSelect()<cr>
endfunction
function! s:TarBrowseSelect()
let l:line = getline(".")
if (l:line =~ '^" ')
return
endif
if (l:line =~ '/$')
echo "Please specify a file, not a directory"
return
endif
let l:selection = "tarfile:" . b:tarfile . "/" . l:line
new
wincmd _
execute "e " . l:selection
endfunction
" kludge to deal with compressed archives
function! s:TarCatCommand(tarfile)
if a:tarfile =~# '\.\(gz\|tgz\|Z\)$'
let l:cat = "gzip -d -c"
elseif a:tarfile =~# '\.bz2$'
let l:cat = "bzip2 -d -c"
else
let l:cat = "cat"
endif
return l:cat
endfunction
function! s:Say(string)
let @" = a:string
$ put
endfunction