*pi_tar.txt*	For Vim version 9.0.  Last change: 2020 Jan 07

		       +====================+
		       | Tar File Interface |
		       +====================+

Author:  Charles E. Campbell  <NcampObell@SdrPchip.AorgM-NOSPAM>
	  (remove NOSPAM from Campbell's email first)
Copyright 2005-2017:					*tar-copyright*
	The VIM LICENSE (see |copyright|) applies to the files in this
	package, including tarPlugin.vim, tar.vim, and pi_tar.txt.  Like
	anything else that's except use "tar.vim" instead of "VIM".  Like
	anything else that's free, tar.vim and its associated files are
	provided *as is* and comes with no warranty of any kind, either
	expressed or implied.  No guarantees of merchantability.  No
	guarantees of suitability for any purpose.  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. Use at your own risk!

==============================================================================
1. Contents					*tar* *tar-contents*
   1. Contents..................................................|tar-contents|
   2. Usage.....................................................|tar-usage|
   3. Options...................................................|tar-options|
   4. History...................................................|tar-history|

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

   When one edits a *.tar 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
   tar archives via the plugin.

						*:Vimuntar*
   VIMUNTAR~

   :Vimuntar [vimhome]

	This command copies, if necessary, the tarball to the .vim or vimfiles
	directory using the first writable directory in the |'runtimepath'|
	when no [vimhome] is specified.  Otherwise, the [vimhome] argument
	allows the user to specify that directory, instead.

	The copy is done using the command in *g:tar_copycmd* , which is >
		cp   for cygwin, unix, macunix
		copy for windows (32, 95, 64, 16)
<	The extraction is done with the command specified with
	*g:tar_extractcmd* , which by default is >
		"tar -xf"
<
						*:TarDiff*
   DIFFERENCING SUPPORT~

   :TarDiff [filename]

	This command will attempt to show the differences between the tarball
	version of a file and the associated file on the system.  In order to
	find that file on the system, the script uses the path associated with
	the file mentioned in the tarball.  If the current directory is not
	correct for that path, :TarDiff will fail to find the associated file.

	If the [filename] is given, that that filename (and path) will be used
	to specify the associated file.


   PREVENTING LOADING~

   If for some reason you do not wish to use vim to examine tar'd files,
   you may put the following two variables into your <.vimrc> to prevent
   the tar plugin from loading: >

	let g:loaded_tarPlugin= 1
	let g:loaded_tar      = 1
<

==============================================================================
3. Options						*tar-options*

   These options are variables that one may change, typically in one's
   <.vimrc> file.
                         Default
   Variable               Value   Explanation
   *g:tar_browseoptions*  "Ptf"   used to get a list of contents
   *g:tar_readoptions*    "OPxf"  used to extract a file from a tarball
   *g:tar_cmd*            "tar"   the name of the tar program
   *g:tar_nomax*            0     if true, file window will not be maximized
   *g:tar_secure*         undef   if exists:
					"--"s will be used to prevent unwanted
					option expansion in tar commands.
					Please be sure that your tar command
					accepts "--"; Posix compliant tar
					utilities do accept them.
				  if not exists:
				  	The tar plugin will reject any tar
					files or member files that begin with
					"-"
				  Not all tar's support the "--" which is why
				  it isn't default.
   *g:tar_writeoptions*   "uf"    used to update/replace a file


==============================================================================
4. History						*tar-history*

	v31	Apr 02, 2017	* (klartext) reported that browsing encrypted
				  files in a zip archive created unencrypted
				  swap files.  I am applying a similar fix
				  used on zip.vim to tar.vim: new buffers
				  are opened with |:noswapfile|.
		May 16, 2017	* When the mouse option isn't empty, the
				  leftmouse can be used to select a file
				  in the tar-file listing.
	v30	Apr 22, 2014	* .tgz files are ambiguous: they may have been
				  compressed with either gzip or bzip2.  Tar.vim
				  disambiguates by using unix's "file" command.
		Feb 18, 2016	* Changed =~ to =~# where appropriate
		Feb 18, 2017	* Now also permits xz decompression
	v28	Jun 23, 2011	* a few more decompression options (tbz tb2 txz)
	v27	May 31, 2011	* moved cygwin detection before g:tar_copycmd
				  handling
				* inserted additional |:keepj| modifiers
				* changed silent  to  sil!  (|:silent|)
	v26	Aug 09, 2010	* uses buffer-local instead of window variables
				  to hold tarfile name
				* inserted keepj before 0d to protect jump list
	v25	Jun 19, 2010	* (Jan Steffens) added support for xz
				  compression
	v24	Apr 07, 2009	* :Untarvim command implemented
		Sep 28, 2009	* Added lzma support
	v22	Aug 08, 2008	* security fixes
	v16	Jun 06, 2008	* tarfile:: used instead of tarfile: when
				  editing files inside tarballs.  Fixes a
				  problem with tarballs called things like
				  c:\abc.tar. (tnx to Bill McCarthy)
	v14	May 09, 2008	* arno caught a security bug
		May 28, 2008	* various security improvements.  Now requires
				  patch 299 which provides the fnameescape()
				  function
		May 30, 2008	* allows one to view *.gz and *.bz2 files that
				  are in *.tar files.
	v12	Sep 07, 2007	* &shq now used if not the empty string for
				  g:tar_shq
	v10	May 02, 2006	* now using "redraw then echo" to show messages,
				  instead of "echo and prompt user"
	v9	May 02, 2006	* improved detection of masquerading as tar file
	v8	May 02, 2006	* allows editing of files that merely masquerade
				  as tar files
	v7	Mar 22, 2006	* work on making tar plugin work across network
		Mar 27, 2006	* g:tar_cmd now available for users to change
				  the name of the tar program to be used.  By
				  default, of course, it's "tar".
	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	Sep 16, 2005	* handles writing files in an archive back to
				  the archive
		Oct 18, 2005	* <amatch> used instead of <afile> in autocmds
		Oct 18, 2005	* handles writing to compressed archives
		Nov 03, 2005	* handles writing tarfiles across a network
				  using netrw#NetWrite()
	v2			* converted to use Vim7's new autoload feature
				  by Bram Moolenaar
	v1	(original)	* Michael Toren
				  (see http://michael.toren.net/code/)

==============================================================================
vim:tw=78:ts=8:noet:ft=help
