diff --git a/runtime/plugin/NetrwFileHandlers.vim b/runtime/plugin/NetrwFileHandlers.vim
index 35df6dd..9c579e8 100644
--- a/runtime/plugin/NetrwFileHandlers.vim
+++ b/runtime/plugin/NetrwFileHandlers.vim
@@ -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 @@
 " 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 @@
 " 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 @@
 " ---------------------------------------------------------------------
 " 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
diff --git a/runtime/plugin/gzip.vim b/runtime/plugin/gzip.vim
index 0eebc5c..6560238 100644
--- a/runtime/plugin/gzip.vim
+++ b/runtime/plugin/gzip.vim
@@ -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 @@
   " 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 :
diff --git a/runtime/plugin/tar.vim b/runtime/plugin/tar.vim
index 26fade4..cc97f44 100644
--- a/runtime/plugin/tar.vim
+++ b/runtime/plugin/tar.vim
@@ -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
