*pi_zip.txt*	For Vim version 7.2.  Last change: 2008 Jul 30

				+====================+
				| Zip File Interface |
				+====================+

Author:  Charles E. Campbell, Jr.  <NdrOchip@ScampbellPfamily.AbizM>
	  (remove NOSPAM from Campbell's email first)
Copyright: Copyright (C) 2005-2008 Charles E Campbell, Jr *zip-copyright*
           Permission is hereby granted to use and distribute this code,
	   with or without modifications, provided that this copyright
	   notice is copied with it. Like anything else that's free,
	   zip.vim, zipPlugin.vim, and pi_zip.txt are provided *as is*
	   and it comes with no warranty of any kind, either expressed or
	   implied. By using this plugin, you agree that in no event will
	   the copyright holder be liable for any damages resulting from
	   the use of this software.

==============================================================================
1. Contents					*zip* *zip-contents*
   1. Contents................................................|zip-contents|
   2. Usage...................................................|zip-usage|
   3. Additional Extensions...................................|zip-extension|
   4. History.................................................|zip-history|

==============================================================================
2. Usage					*zip-usage* *zip-manual*

   When one edits a *.zip file, this plugin will handle displaying a
   contents page.  Select a file to edit by moving the cursor atop
   the desired file, then hit the <return> key.  After editing, one may
   also write to the file.  Currently, one may not make a new file in
   zip archives via the plugin.

   OPTIONS

   							*g:zip_nomax*

   If this variable exists and is true, the file window will not be
   automatically maximized when opened.

							*g:zip_shq*
   Different operating systems may use one or more shells to execute
   commands.  Zip will try to guess the correct quoting mechanism to
   allow spaces and whatnot in filenames; however, if it is incorrectly
   guessing the quote to use for your setup, you may use >
	g:zip_shq
<  which by default is a single quote under Unix (') and a double quote
   under Windows (").  If you'd rather have no quotes, simply set
   g:zip_shq to the empty string (let g:zip_shq= "") in your <.vimrc>.

   							*g:zip_unzipcmd*
   Use this option to specify the program which does the duty of "unzip".
   It's used during browsing. By default: >
   	let g:zip_unzipcmd= "unzip"
<
							*g:zip_zipcmd*
   Use this option to specify the program which does the duty of "zip".
   It's used during the writing (updating) of a file already in a zip
   file; by default: >
   	let g:zip_zipcmd= "zip"
<

==============================================================================
3. Additional Extensions					*zip-extension*

   Apparently there are a number of archivers who generate zip files that
   don't use the .zip extension (.jar, .xpi, etc).  To handle such files,
   place a line in your <.vimrc> file: >

	au BufReadCmd *.jar,*.xpi call zip#Browse(expand("<amatch>"))
<
   One can simply extend this line to accommodate additional extensions that
   should be treated as zip files.

==============================================================================
4. History					*zip-history* {{{1
   v17 May 09, 2008 * arno caught a security bug
   v15 Sep 07, 2007 * &shq now used if not the empty string for g:zip_shq
   v14 May 07, 2007 * using b:zipfile instead of w:zipfile to avoid problem
                      when editing alternate file to bring up a zipfile
   v10 May 02, 2006 * now using "redraw then echo" to show messages, instead
                      of "echo and prompt user"
		    * g:zip_shq provided to allow for quoting control for the
		      command being passed via :r! ... commands.
   v8 Apr 10, 2006 * Bram Moolenaar reported that he received an error message
                     due to "Pattern not found: ^.*\%0c"; this was caused by
		     stridx finding a Name... at the beginning of the line;
		     zip.vim tried 4,$s/^.*\%0c//, but that doesn't work.
		     Fixed.
   v7 Mar 22, 2006 * escaped some characters that can cause filename handling
                     problems.
   v6 Dec 21, 2005 * writing to files not in directories caused problems -
                     fixed (pointed out by Christian Robinson)
   v5 Nov 22, 2005 * report option workaround installed
   v3 Oct 18, 2005 * <amatch> used instead of <afile> in autocmds
   v2 Sep 16, 2005 * silenced some commands (avoiding hit-enter prompt)
                   * began testing under Windows; works thus far
		   * filetype detection fixed
      Nov 03, 2005 * handles writing zipfiles across a network using
                     netrw#NetWrite()
   v1 Sep 15, 2005 * Initial release, had browsing, reading, and writing

==============================================================================
vim:tw=78:ts=8:ft=help:fdm=marker
