Use apt-get instead of dpkg to install Debian package, which is more
[privoxy.git] / doc / source / user-manual.sgml
index 465a82e..582af7f 100644 (file)
@@ -9,16 +9,21 @@
 <!entity history SYSTEM "history.sgml">
 <!entity copyright SYSTEM "copyright.sgml">
 <!entity license SYSTEM "license.sgml">
-<!entity p-version "2.9.15">
-<!entity p-status "beta">
-<!entity % p-not-stable "INCLUDE">
+<!entity p-authors SYSTEM "p-authors.sgml">
+<!entity config SYSTEM "p-config.sgml">
+<!entity p-version SYSTEM "doc_version.tmp">
+<!entity p-status SYSTEM "doc_status.tmp">
+<!entity % p-authors-formal "INCLUDE"> <!-- include additional text, etc  -->
+<!entity % p-not-stable "IGNORE">
 <!entity % p-stable "IGNORE">
 <!entity % p-text "IGNORE">        <!-- define we are not a text only doc -->
 <!entity % p-doc "INCLUDE">        <!-- and we are a formal doc           -->
 <!entity % p-readme "IGNORE">
-<!entity % p-config "IGNORE">
+<!entity % user-man "IGNORE">
+<!entity % config-file "IGNORE">
 <!entity % p-supp-userman "IGNORE"> <!-- Omit some from supported.sgml    -->
 <!entity  my-copy "&copy;">         <!-- kludge for docbook2man           -->
+<!entity % draft "IGNORE">          <!-- WIP stuff    -->
 ]>
 <!--
  File        :  $Source: /cvsroot/ijbswa/current/doc/source/user-manual.sgml,v $
@@ -27,7 +32,7 @@
                 This file belongs into
                 ijbswa.sourceforge.net:/home/groups/i/ij/ijbswa/htdocs/
 
- $Id: user-manual.sgml,v 1.112 2002/05/15 03:57:14 hal9 Exp $
+ $Id: user-manual.sgml,v 2.9 2003/04/11 03:14:53 hal9 Exp $
 
  Copyright (C) 2001, 2002 Privoxy Developers <developers@privoxy.org>
  See LICENSE.
 <article id="index">
 <artheader>
 
-<title>Privoxy User Manual</title>
+<title>Privoxy &p-version; User Manual</title>
 
 <pubdate>
  <subscript>
 <!-- Completely the wrong markup, but very little is allowed  -->
 <!-- in this part of an article. FIXME -->
  <link linkend="copyright">Copyright</link> &my-copy; 2001, 2002 by 
- <ulink url="http://www.privoxy.org">Privoxy Developers</ulink>
+ <ulink url="http://www.privoxy.org/">Privoxy Developers</ulink>
  </subscript>
 </pubdate>
 
-<pubdate>$Id: user-manual.sgml,v 1.112 2002/05/15 03:57:14 hal9 Exp $</pubdate>
+<pubdate>$Id: user-manual.sgml,v 2.9 2003/04/11 03:14:53 hal9 Exp $</pubdate>
 
 <!--
 
@@ -92,8 +97,8 @@ Hal.
 ]]>
 
  <para>
-  The user manual gives users information on how to install, configure and use
-  <ulink
+  The <citetitle>User Manual</citetitle> gives users information on how to
+  install, configure and use <ulink
   url="http://www.privoxy.org/"><application>Privoxy</application></ulink>.
  </para>
 
@@ -102,9 +107,9 @@ Hal.
 <!-- end privoxy.sgml -->
 
  <para>
-  You can find the latest version of the user manual at  <ulink
+  You can find the latest version of the <citetitle>User Manual</citetitle> at  <ulink
   url="http://www.privoxy.org/user-manual/">http://www.privoxy.org/user-manual/</ulink>.
-  Please see the <ulink url="contact.html">Contact section</ulink> on how to
+  Please see the <link linkend="contact">Contact section</link> on how to
   contact the developers.
  </para>
 
@@ -120,12 +125,10 @@ Hal.
 <para>
  This documentation is included with the current &p-status; version of
  <application>Privoxy</application>, v.&p-version;<![%p-not-stable;[, 
- and is mostly complete at this point. The most up to date reference for the
- time being is still the comments in the source files and in the individual
- configuration files. Development of version 3.0 is currently nearing
- completion, and includes many significant changes and enhancements over
- earlier versions. The target release date for
- stable v3.0 is <quote>soon</quote> ;-)]]>.
+ and is mostly complete at this point. 
+ Development of version 3.2 is just beginning,
+ and will include many significant changes and enhancements over
+ earlier versions]]>.
 </para>
 
 <!-- include only in non-stable versions -->
@@ -134,7 +137,7 @@ Hal.
  Since this is a &p-status; version, not all new features are well tested. This
  documentation may be slightly out of sync as a result (especially with 
  CVS sources). And there <emphasis>may be</emphasis> bugs, though hopefully
- not many! 
+ not many! Please find them!
 </para>
 ]]>
 
@@ -184,7 +187,7 @@ How to install the binary packages depends on your operating system:
 </para>
 
 <!--   ~~~~~       New section      ~~~~~     -->
-<sect3 id="installation-pack-rpm"><title>Red Hat, SuSE RPMs and Conectiva</title>
+<sect3 id="installation-pack-rpm"><title>Red Hat, SuSE and Conectiva RPMs</title>
 
 <para>
  RPMs can be installed with <literal>rpm -Uvh privoxy-&p-version;-1.rpm</literal>,
@@ -202,7 +205,7 @@ automatically start Privoxy in the boot process.
 
 <para>
  If you have problems with failed dependencies, try rebuilding the SRC RPM: 
- <literal>rpm --rebuild privoxy-&p-version;-1.src.rpm;</literal>. This 
+ <literal>rpm --rebuild privoxy-&p-version;-1.src.rpm</literal>. This 
  will use your locally installed libraries and RPM version. 
 </para>
 
@@ -217,7 +220,9 @@ automatically start Privoxy in the boot process.
 <!--   ~~~~~       New section      ~~~~~     -->
 <sect3 id="installation-deb"><title>Debian</title>
 <para>
- FIXME.
+ DEBs can be installed with <literal>apt-get install privoxy</literal>,
+ and will use <filename>/etc/privoxy</filename> for the location of 
+ configuration files.
 </para>
 </sect3>
 
@@ -238,7 +243,7 @@ automatically start Privoxy in the boot process.
 <para>
  Create a new directory, <literal>cd</literal> to it, then unzip and
  untar the archive. For the most part, you'll have to figure out where
- things go. FIXME.
+ things go. <!-- FIXME, more info needed? -->
 </para>
 </sect3>
 
@@ -249,7 +254,10 @@ automatically start Privoxy in the boot process.
  First, make sure that no previous installations of
  <application>Junkbuster</application> and / or 
  <application>Privoxy</application> are left on your
- system. You can do this by 
+ system. Check that no <application>Junkbuster</application>
+ or <application>Privoxy</application> objects are in
+ your startup folder.
+
 </para>
 
 <para>
@@ -266,17 +274,32 @@ automatically start Privoxy in the boot process.
 </sect3>
 
 <!--   ~~~~~       New section      ~~~~~     -->
-<sect3 id="installation-mac"><title>Max OSX</title>
-<para>
- Unzip the downloaded package (you can either double-click on the file
- in the finder, or on the desktop if you downloaded it there).  Then,
- double-click on the package installer icon and follow the installation
- process.
- <application>Privoxy</application> will be installed in the subdirectory
- <literal>/Applications/Privoxy.app</literal>.
- <application>Privoxy</application> will set itself up to start 
- automatically on system bring-up via
- <literal>/System/Library/StartupItems/Privoxy</literal>.
+<sect3 id="installation-mac"><title>Mac OSX</title>
+<para>
+ Unzip the downloaded file (you can either double-click on the file
+ from the finder, or from the desktop if you downloaded it there).
+ Then, double-click on the package installer icon named
+ <literal>Privoxy.pkg</literal>
+ and follow the installation process.
+ <application>Privoxy</application> will be installed in the folder
+ <literal>/Library/Privoxy</literal>.
+ It will start automatically whenever you start up.  To prevent it from
+ starting automatically, remove or rename the folder
+ <literal>/Library/StartupItems/Privoxy</literal>. 
+</para>
+<para>
+ To start Privoxy by hand, double-click on 
+ <literal>StartPrivoxy.command</literal> in the
+ <literal>/Library/Privoxy</literal> folder.
+ Or, type this command in the Terminal:
+</para>
+<para>
+  <screen>
+  /Library/Privoxy/StartPrivoxy.command
+  </screen>
+</para>
+<para>
+ You will be prompted for the administrator password.
 </para>
 </sect3>
 
@@ -288,16 +311,29 @@ automatically start Privoxy in the boot process.
  directory, including all configuration and log files. To uninstall, just 
  remove this directory.
 </para>
+</sect3>
+
+<!--   ~~~~~       New section      ~~~~~     -->
+<sect3 id="installattion-gentoo"><title>Gentoo</title>
 <para>
- Start <application>Privoxy</application> (with RUN &lt;&gt;NIL:) in your
- <filename>startnet</filename> script (AmiTCP), in
- <filename>s:user-startup</filename> (RoadShow), as startup program in your
- startup script (Genesis), or as startup action (Miami and MiamiDx). 
- <application>Privoxy</application> will automatically quit when you quit your
- TCP/IP stack (just ignore the harmless warning your TCP/IP stack may display that
- <application>Privoxy</application> is still running).
+ Gentoo source packages (Ebuilds) for <application>Privoxy</application> are 
+ contained in the Gentoo  Portage Tree (they are not on the download page, 
+ but there is a Gentoo section, where you can see when a new 
+ <application>Privoxy</application> Version is added to the  Portage Tree).
+</para>
+<para>
+ Before installing <application>Privoxy</application> under Gentoo just do 
+ first <literal>emerge rsync</literal> to get the latest changes from the 
+ Portage tree. With <literal>emerge privoxy</literal> you install the latest 
+ version.
+</para>
+<para>
+ Configuration files are in <filename>/etc/privoxy</filename>, the 
+ documentation is in <filename>/usr/share/doc/privoxy-&p-version;</filename>
+ and the Log directory is in <filename>/var/log/privoxy</filename>.
 </para>
 </sect3>
+
 </sect2>
 
 <!--   ~~~~~       New section      ~~~~~     -->
@@ -322,8 +358,35 @@ automatically start Privoxy in the boot process.
 &buildsource;
 <!-- end boilerplate -->
 
+</sect2>
+<!--   ~~~~~       New section      ~~~~~     --> 
+<sect2 id="installation-keepupdated"><title>Keeping your Installation Up-to-Date</title>
+<para>
+ As user feedback comes in and development continues, we will make updated versions
+ of both the main <link linkend="actions-file">actions file</link> (as a <ulink
+ url="http://sourceforge.net/project/showfiles.php?group_id=11118&amp;release_id=103670">separate
+ package</ulink>) and the software itself (including the actions file) available for
+ download.
+</para>
+
+<para>
+ If you wish to receive an email notification whenever we release updates of
+ <application>Privoxy</application> or the actions file, <ulink
+ url="http://lists.sourceforge.net/lists/listinfo/ijbswa-announce/">subscribe
+ to our announce  mailing list</ulink>, ijbswa-announce@lists.sourceforge.net.
+</para>
+
+<para>
+ In order not to loose your personal changes and adjustments when updating
+ to the latest <literal>default.action</literal> file we <emphasis>strongly
+ recommend</emphasis> that you use <literal>user.action</literal> for your
+ customization of <application>Privoxy</application>. See the <link
+ linkend="actions-file">Chapter on actions files</link> for details.
+</para>
+
 </sect2>
 
+
 </sect1>
 
 <!--  ~  End section  ~  -->
@@ -341,13 +404,13 @@ automatically start Privoxy in the boot process.
  and <application>Privoxy</application> configurations will need to be
  ported. The functionalities of the old <filename>blockfile</filename>,
  <filename>cookiefile</filename> and <filename>imagelist</filename> 
- are now combined into the <ulink url="actions-file.html"><quote>actions
- files</quote></ulink>.  
+ are now combined into the <link linkend="actions-file"><quote>actions
+ files</quote></link>.  
  <filename>default.action</filename>, is the main actions file. Local
  exceptions should best be put into <filename>user.action</filename>.
 </para>
 <para>
- A <ulink url="filter-file.html"><quote>filter file</quote></ulink> (typically
+ A <link linkend="filter-file"><quote>filter file</quote></link> (typically
  <filename>default.filter</filename>) is new as of <application>Privoxy
  2.9.x</application>, and provides some of the new sophistication (explained
  below). <filename>config</filename> is much the same as before.
@@ -391,10 +454,10 @@ automatically start Privoxy in the boot process.
  </listitem> 
  <listitem>
   <para>
-   The primary configuration file for cookie management, ad and banner 
+   The primary configuration files for cookie management, ad and banner 
    blocking, and many other aspects of <application>Privoxy</application>
-   configuration is in the <ulink url="actions-file.html">actions
-   files</ulink>. It is strongly recommended to become familiar with the new
+   configuration are the <link linkend="actions-file">actions
+   files</link>. It is strongly recommended to become familiar with the new
    actions concept below, before modifying these files. Locally defined rules 
    should go into <filename>user.action</filename>.
   </para>
@@ -419,61 +482,89 @@ automatically start Privoxy in the boot process.
 
  <listitem>
   <para>
-   If upgrading, please back up any configuration files. See 
-   the <link linkend="upgradersnote">Note to Upgraders</link> Section.
 </para>
+   If upgrading, from versions before 2.9.16, please back up any configuration
+   files. See the <link linkend="upgradersnote">Note to Upgraders</link> Section.
+ </para>
 </listitem> 
+
  <listitem>
   <para>
   Install <application>Privoxy</application>. See the <link
-  linkend="installation">Installation Section</link> for platform specific
+  linkend="installation">Installation Section</link> below for platform specific
   information. 
  </para>
  </listitem>  
 
  <listitem>
   <para>
-  Start <application>Privoxy</application>, if the installation program has
-  not done this already. See the section <link linkend="startup">Starting
-  <application>Privoxy</application></link>.
+   Advanced users and those who want to offer <application>Privoxy</application>
+   service to more than just their local machine should check the <link
+   linkend="config">main config file</link>, especially the <link
+   linkend="access-control">security-relevant</link> options. These are 
+   off by default.
   </para>
  </listitem>  
 
  <listitem>
   <para>
-  Set your browser to use <application>Privoxy</application> as HTTP and HTTPS
-  proxy by setting the proxy configuration for address of
-  <literal>127.0.0.1</literal> and port <literal>8118</literal>.
-  (<application>Junkbuster</application> and earlier versions of
-  <application>Privoxy</application> used port 8000.) See the section <link
-  linkend="startup">Starting <application>Privoxy</application></link>.
+  Start <application>Privoxy</application>, if the installation program has
+  not done this already (may vary according to platform). See the section
+  <link linkend="startup">Starting <application>Privoxy</application></link>.
+  </para>
+ </listitem>
+
+ <listitem>
+  <para>
+   Set your browser to use <application>Privoxy</application> as HTTP and
+   HTTPS (SSL) proxy by setting the proxy configuration for address of
+   <literal>127.0.0.1</literal> and port <literal>8118</literal>.
+   (<application>Junkbuster</application> and earlier versions of
+   <application>Privoxy</application> used port 8000.) See the section <link
+   linkend="startup">Starting <application>Privoxy</application></link> below
+   for more details on this.
   </para>
  </listitem>  
 
  <listitem>
   <para>
-    Flush your browser's caches, to remove any cached ad images.
+    Flush your browser's disk and memory caches, to remove any cached ad images.
+    If using <application>Privoxy</application> to manage cookies, you should 
+    remove any currently stored cookies too.
   </para>
-</listitem> 
+ </listitem> 
 
  <listitem>
   <para>
-  Enjoy surfing with enhanced comfort and privacy.  You may want to customize the
-  <link linkend="actions-file"><filename>user.action</filename></link> file to
-  personalize your new browsing experience. See the <link
-  linkend="configuration">Configuration section</link> for more configuration
-  options, and how to further customize your installation.
+   A default installation should provide a reasonable starting point for 
+   most. There will undoubtedly be occasions where you will want to adjust the
+   configuration, but that can be dealt with as the need arises. Little 
+   to no initial configuration is required in most cases.
+  </para>
+  <para>
+   See the <link linkend="configuration">Configuration section</link> for more
+   configuration options, and how to customize your installation.
+ <![%draft;[  You might also want to look at the <link
+   linkend="quickstart-ad-blocking">next section</link> for a quick
+   introduction to how <application>Privoxy</application> blocks ads and
+   banners.]]>
   </para>
  </listitem> 
+
  <listitem>
   <para>
-   If you experience problems with sites that <quote>misbehave</quote>, see
-   the <link linkend="actionsanat">Anatomy of an Action</link> section in the
-   Appendix.
+    If you experience ads that slipped through, innocent images that are
+    blocked, or otherwise feel the need to fine-tune
+    <application>Privoxy's</application> behaviour, take a look at the <link
+    linkend="actions-file">actions files</link>. As a quick start, you might
+    find the <link linkend="act-examples">richly commented examples</link>
+    helpful. You can also view and edit the actions files through the <ulink
+    url="http://config.privoxy.org">web-based user interface</ulink>. The
+    Appendix <quote><link linkend="actionsanat">Anatomy of an
+    Action</link></quote> has hints how to debug actions that
+    <quote>misbehave</quote>.
   </para>
  </listitem> 
+
  <listitem>
   <para>
    Please see the section <link linkend="contact">Contacting the
@@ -482,11 +573,263 @@ automatically start Privoxy in the boot process.
   </para>
  </listitem> 
 
+ <listitem>
+  <para>
+   Now enjoy surfing with enhanced comfort and privacy!
+  </para>
+ </listitem> 
+ </itemizedlist>
+</para>
+
+
+<!--   ~~~~~       New section      ~~~~~     -->
+
+<sect2 id="quickstart-ad-blocking">
+<title>Quickstart to Ad Blocking</title>
+<!--
+ NOTE:  This section is deliberately redundant for those that don't 
+ want to read the whole thing (which is getting lengthy).
+-->
+<para>
+ Ad blocking is but one of <application>Privoxy's</application>
+ array of features. Many of these features are for the technically minded advanced 
+ user. But, ad and banner blocking is surely common ground for everybody.
+</para>
+<para> 
+ This section will provide a quick summary of ad blocking so 
+ you can get up to speed quickly without having to read the more extensive
+ information provided below, though this is highly recommended.
+</para>
+<para>
+ First a bit of a warning ... blocking ads is much like blocking SPAM: the
+ more aggressive you are about it, the more likely you are to block 
+ things that were not intended. So there is a trade off here. If you want
+ extreme ad free browsing, be prepared to deal with more
+ <quote>problem</quote> sites, and to spend more time adjusting the
+ configuration to solve these unintended consequences. In short, there is 
+ not an easy way to eliminate <emphasis>all</emphasis> ads. Either take 
+ the easy way and settle for <emphasis>most</emphasis> ads blocked with the
+ default configuration, or jump in and tweak it for your personal surfing
+ habits and preferences.
+</para>
+<para>
+ Secondly, a brief explanation of <application>Privoxy's </application>
+ <quote>actions</quote>. <quote>Actions</quote> in this context, are 
+ the directives we use to tell <application>Privoxy</application> to perform
+ some task relating to HTTP transactions (i.e. web browsing). We tell
+ <application>Privoxy</application> to take some <quote>action</quote>. Each
+ action has a unique name and function. While there are many potential
+ <application>actions</application> in <application>Privoxy's</application>
+ arsenal, only a few are used for ad blocking. <link
+ linkend="actions">Actions</link>, and <link linkend="actions-file">action
+ configuration files</link>, are explained in depth below.
+</para>
+<para>
+ Actions are specified in <application>Privoxy's</application> configuration,
+ followed by one or more URLs to which the action should apply. URLs 
+ can actually be URL type <link linkend="af-patterns">patterns</link> that use
+ wildcards so they can apply potentially to a range of similar URLs. The
+ actions, together with the URL patterns are called a section.
+</para>
+<para>
+ When you connect to a website, the full URL will either match one or more
+ of the sections as defined in <application>Privoxy's</application> configuration,
+ or not. If so, then <application>Privoxy</application> will perform the
+ respective actions. If not, then nothing special happens. Furthermore, web
+ pages may contain embedded, secondary URLs that your web browser will
+ use to load additional components of the page, as it parses the
+ original page's HTML content. An ad image for instance, is just an URL
+ embedded in the page somewhere. The image itself may be on the same server,
+ or a server somewhere else on the Internet. Complex web pages will have many
+ such embedded URLs.
+</para>
+
+<para>
+ The actions we need to know about for ad blocking are:  <literal><link
+ linkend="block">block</link></literal>, <literal><link
+ linkend="handle-as-image">handle-as-image</link></literal>, and
+ <literal><link linkend="set-image-blocker">set-image-blocker</link></literal>:
+</para>
+
+<para>
+ <itemizedlist>
+  
+ <listitem>
+  <para>
+   <literal><link linkend="block">block</link></literal> - this action stops
+   any contact between your browser and any URL patterns that match this
+   action's configuration. It can be used for blocking ads, but also anything
+   that is determined to be unwanted. By itself, it simply stops any
+   communication with the remote server and sends <application>Privoxy</application>'s
+   own built-in BLOCKED page instead to let you now what has happened.
+  </para>
+ </listitem> 
+
+ <listitem>
+  <para>
+   <literal><link linkend="handle-as-image">handle-as-image</link></literal> - 
+   tells <application>Privoxy</application> to treat this URL as an image.
+   <application>Privoxy</application>'s default configuration already does this
+   for all common image types (e.g. GIF), but there are many situations where this
+   is not so easy to determine. So we'll force it in these cases. This is particularly
+   important for ad blocking, since  only if we know that it's an image of
+   some kind, can we replace it with an image of our choosing, instead of the 
+   <application>Privoxy</application> BLOCKED page (which would only result in
+   a <quote>broken image</quote> icon). There are some limitations to this
+   though. For instance, you can't just brute-force an image substitution for
+   an entire HTML page in most situations.
+  </para>
+ </listitem> 
+
+ <listitem>
+  <para>
+   <literal><link
+   linkend="set-image-blocker">set-image-blocker</link></literal> - tells
+   <application>Privoxy</application> what to display in place of an ad image that
+   has hit a block rule. For this to come into play, the URL must match a
+   <literal><link linkend="block">block</link></literal> action somewhere in the
+   configuration, <emphasis>and</emphasis>, it must also match an
+   <literal><link linkend="handle-as-image">handle-as-image</link></literal> action.
+  </para>
+  <para>
+   The configuration options on what to display instead of the ad are:
+  </para>
+  <simplelist>
+   <member>
+    &nbsp;&nbsp;&nbsp;<emphasis>pattern</emphasis> - a checkerboard pattern, so that an ad 
+    replacement is obvious. This is the default.
+   </member>
+  </simplelist>
+  <simplelist>
+   <member>
+    &nbsp;&nbsp;&nbsp;<emphasis>blank</emphasis> - A very small empty GIF image is displayed.
+    This is the so-called <quote>invisible</quote> configuration option.
+   </member>
+  </simplelist>
+  <simplelist>
+   <member>
+    &nbsp;&nbsp;&nbsp;<emphasis>http://&lt;URL&gt;</emphasis> - A redirect to any image anywhere
+    of the user's choosing (advanced usage).
+   </member>
+  </simplelist>
+  </listitem> 
+
+</itemizedlist>
+</para>
+
+<para>
+ The quickest way to adjust any of these settings is with your browser through
+ the special <application>Privoxy</application> editor at <ulink
+ url="http://config.privoxy.org/show-status">http://config.privoxy.org/show-status</ulink>
+ (shortcut: <ulink url="http://p.p/">http://p.p/show-status</ulink>). This 
+ is an internal page, and does not require Internet access. Select the
+ appropriate <quote>actions</quote> file, and click
+ <quote><guibutton>Edit</guibutton></quote>. It is best to put personal or
+ local preferences in <filename>user.action</filename> since this is not
+ meant to be overwritten during upgrades, and will over-ride the settings in
+ other files. Here you can insert new <quote>actions</quote>, and URLs for ad
+ blocking or other purposes, and make other adjustments to the configuration.
+ <application>Privoxy</application> will detect these changes automatically.
+</para>
+
+<para>
+ A quick and simple step by step example:
+</para>
+
+<para>
+ <itemizedlist>
+
+  <listitem>
+   <para>
+     Right click on the ad image to be blocked, then select 
+     <quote><guimenuitem>Copy Link Location</guimenuitem></quote> from the
+     pop-up menu. 
+   </para>
+  </listitem> 
+  <listitem>
+   <para>
+    Set your browser to 
+    <ulink
+ url="http://config.privoxy.org/show-status">http://config.privoxy.org/show-status</ulink>
+   </para>
+  </listitem> 
+  <listitem>
+   <para>
+    Find <filename>user.action</filename> in the top section, and click 
+    on <quote><guibutton>Edit</guibutton></quote>:
+   </para>
+
+ <!-- image of editor and actions files selections -->
+ <para>
+  <figure pgwide="0" float="0"><title>Actions Files in Use</title>
+   <mediaobject>
+     <imageobject>
+      <imagedata  fileref="../images/files-in-use.jpg" format="jpg">
+       </imageobject> 
+       <textobject>
+        <phrase>[ Screenshot of Actions Files in Use ]</phrase>
+      </textobject>
+   </mediaobject>
+  </figure>
+ </para>
+ </listitem> 
+ <listitem>
+  <para>
+   You should have a section with only
+   <literal><link linkend="block">block</link></literal> listed under 
+   <quote>Actions:</quote>.
+   If not, click a <quote><guibutton>Insert new section below</guibutton></quote>
+   button, and in the new section that just appeared, click the 
+   <guibutton>Edit</guibutton> button right under the word <quote>Actions:</quote>.
+   This will bring up a list of all actions. Find
+   <literal><link linkend="block">block</link></literal> near the top, and click
+   in the <quote>Enabled</quote> column, then <quote><guibutton>Submit</guibutton></quote>
+   just below the list.
+  </para>
+ </listitem> 
+ <listitem>
+  <para>
+   Now, in the <literal><link linkend="block">block</link></literal> actions section,
+   click the <quote><guibutton>Add</guibutton></quote> button, and paste the URL the
+   browser got from <quote><guimenuitem>Copy Link Location</guimenuitem></quote>.
+   Remove the <literal>http://</literal> at the beginning of the URL. Then, click
+   <quote><guibutton>Submit</guibutton></quote> (or
+   <quote><guibutton>OK</guibutton></quote> if in a pop-up window).
+  </para>
+ </listitem> 
+ <listitem>
+  <para>
+   Now go back to the original page, and press <keycap>SHIFT-Reload</keycap>
+   (or flush all browser caches). The image should be gone now.
+  </para>
+ </listitem> 
  </itemizedlist>
 </para>
 
+<para>
+ This is a very crude and simple example. There might be good reasons to use a 
+ wildcard pattern match to include potentially similar images from the same
+ site. For a more extensive explanation of <quote>patterns</quote>, and 
+ the entire actions concept, see <link linkend="actions-file">the Actions
+ section</link>.
+</para>
+
+<para>
+ For advanced users who want to hand edit their config files, you might want
+ to now go to the <link linkend="act-examples">Actions Files Tutorial</link>.
+ The ideas explained therein also apply to the web-based editor.
+</para>
+
+</sect2>
+
 </sect1>
 
+<!--  ~  End section  ~  -->
+
+
 <!--   ~~~~~       New section      ~~~~~     -->
 <sect1 id="startup">
 <title>Starting <application>Privoxy</application></title>
@@ -497,15 +840,64 @@ automatically start Privoxy in the boot process.
  127.0.0.1 (or localhost) for the proxy address, and port 8118 (earlier versions
  used port 8000). This is the one configuration step that must be done!
 </para>
+<para>
+ Please note that <application>Privoxy</application> can only proxy HTTP and 
+ HTTPS traffic. It will not work with FTP or other protocols.
+</para>
+
+ <!-- image of Mozilla Proxy configuration -->
+ <para>
+  <figure pgwide="0" float="0"><title>Proxy Configuration (Mozilla)</title>
+   <mediaobject>
+     <imageobject>
+      <imagedata  fileref="../images/proxy_setup.jpg" format="jpg">
+       </imageobject> 
+       <textobject>
+        <phrase>[ Screenshot of Mozilla Proxy Configuration ]</phrase>
+      </textobject>
+   </mediaobject>
+  </figure>
+ </para>
  
 <para> 
  With <application>Netscape</application> (and
- <application>Mozilla</application>), this can be set under <literal>Edit
- -&gt; Preferences -&gt; Advanced -&gt; Proxies -&gt; HTTP Proxy</literal>.
- For <application>Internet Explorer</application>: <literal>Tools -&gt;
- Internet Properties -&gt; Connections -&gt; LAN Setting</literal>. Then,
- check <quote>Use Proxy</quote> and fill in the appropriate info (Address:
- 127.0.0.1, Port: 8118). Include if HTTPS proxy support too.
+ <application>Mozilla</application>), this can be set under:
+</para>
+<literallayout>
+<!-- Mix ascii and gui art, something for everybody -->
+<!-- spacing on this is tricky -->
+ <guibutton>Edit</guibutton>
+   |_   
+         <guibutton>Preferences</guibutton>
+                |_       
+                        <guibutton>Advanced</guibutton>
+                              |_     
+                                    <guibutton>Proxies</guibutton>
+                                         |_       
+                                                <guibutton>HTTP Proxy</guibutton>
+</literallayout>
+
+<para>
+ For <application>Internet Explorer</application>: 
+</para>
+
+<literallayout>
+<!-- Mix ascii and gui art, something for everybody -->
+<!-- spacing on this is tricky -->
+ <guibutton>Tools</guibutton>
+     |_   
+         <guibutton>Internet Properties</guibutton>
+                            |_       
+                                      <guibutton>Connections</guibutton>
+                                               |_     
+                                                            <guibutton>LAN Settings</guibutton>
+</literallayout>
+
+<para>
+ Then, check <quote>Use Proxy</quote> and fill in the appropriate info
+ (Address: 127.0.0.1, Port: 8118). Include HTTPS (SSL), if you want HTTPS
+ proxy support too. 
 </para>
 
 <para>
@@ -523,12 +915,12 @@ automatically start Privoxy in the boot process.
  directory. Except on Win32 where it will try <filename>config.txt</filename>.
 </para>
 
-<sect2 id="start-redhatdebian">
-<title>RedHat, Conectiva and Debian</title>
+<sect2 id="start-redhat">
+<title>Red Hat and Conectiva</title>
 <para>
-We use a script. Note that RedHat does not start Privoxy upon booting per
-default. It will use the file <filename>/etc/privoxy/config</filename> as its
-main configuration file. FIXME: Debian??
+ We use a script. Note that Red Hat does not start Privoxy upon booting per
+ default. It will use the file <filename>/etc/privoxy/config</filename> as
+ its main configuration file.
 </para>
 <para>
  <screen>
@@ -537,6 +929,21 @@ main configuration file. FIXME: Debian??
 </para>
 </sect2>
 
+<sect2 id="start-debian">
+<title>Debian</title>
+<para>
+ We use a script. Note that Debian starts Privoxy upon booting per
+ default.  It will use the file
+ <filename>/etc/privoxy/config</filename> as its main configuration
+ file.
+</para>
+<para>
+ <screen>
+ # /etc/init.d/privoxy start
+</screen>
+</para>
+</sect2>
+
 <sect2 id="start-suse">
 <title>SuSE</title>
 <para>
@@ -576,14 +983,29 @@ Example Unix startup command:
 <sect2 id="start-os2">
 <title>OS/2</title>
 <para>
-FIXME.
+ During installation, <application>Privoxy</application> is configured to
+ start automatically when the system restarts. You can start it manually by
+ double-clicking on the <application>Privoxy</application> icon in the
+ <application>Privoxy</application> folder.
 </para>
 </sect2>
 
 <sect2 id="start-macosx">
-<title>MAX OSX</title>
+<title>Mac OSX</title>
+<para>
+ During installation, <application>Privoxy</application> is configured to
+ start automatically when the system restarts.  To start Privoxy by hand,
+ double-click on the <literal>StartPrivoxy.command</literal> icon in the
+ <literal>/Library/Privoxy</literal> folder.  Or, type this command
+ in the Terminal:
+</para>
+<para>
+  <screen>
+  /Library/Privoxy/StartPrivoxy.command
+  </screen>
+</para>
 <para>
-FIXME.
+ You will be prompted for the administrator password.
 </para>
 </sect2>
 
@@ -591,7 +1013,36 @@ FIXME.
 <sect2 id="start-amigaos">
 <title>AmigaOS</title>
 <para>
-FIXME.
+ Start <application>Privoxy</application> (with RUN &lt;&gt;NIL:) in your
+ <filename>startnet</filename> script (AmiTCP), in
+ <filename>s:user-startup</filename> (RoadShow), as startup program in your
+ startup script (Genesis), or as startup action (Miami and MiamiDx). 
+ <application>Privoxy</application> will automatically quit when you quit your
+ TCP/IP stack (just ignore the harmless warning your TCP/IP stack may display that
+ <application>Privoxy</application> is still running).
+</para>
+</sect2>
+
+<sect2 id="start-gentoo">
+<title>Gentoo</title>
+<para>
+ A script is again used. It will use the file <filename>/etc/privoxy/config 
+ </filename> as its main configuration file.
+</para>
+<para>
+ <screen>
+ /etc/init.d/privoxy start
+ </screen>
+</para>
+<para>
+ Note that <application>Privoxy</application> is not automatically started at 
+ boot time by default. You can change this with the <literal>rc-update</literal> 
+ command.
+</para>
+<para> 
+ <screen>
+ rc-update add privoxy default
+ </screen>
 </para>
 </sect2>
 
@@ -680,17 +1131,17 @@ must find a better place for this paragraph
 </para>
 
 <para>
- If the above paragraph sounds gibberish to you, you might want to <ulink
url="actions-file.html#ACTIONSFILE">read more about the actions concept</ulink>
- or even dive deep into the <ulink url="appendix.html#ACTIONSANAT">Appendix
- on actions</ulink>.
+ If the above paragraph sounds gibberish to you, you might want to <link
linkend="actions-file">read more about the actions concept</link>
+ or even dive deep into the <link linkend="actionsanat">Appendix
+ on actions</link>.
 </para>
 
 <para>
  If you can't get rid of the problem at all, think you've found a bug in
  Privoxy, want to propose a new feature or smarter rules, please see the 
- section <ulink url="contact.html"><quote>Contacting the
- Developers</quote></ulink> below. 
+ section <link linkend="contact"><quote>Contacting the
+ Developers</quote></link> below. 
 </para>
 
 -->
@@ -804,7 +1255,7 @@ must find a better place for this paragraph
 <!-- Needs to be put in a table and colorized  -->
 <screen>
  <msgtext>
- <bridgehead renderas="sect2">Privoxy Menu</bridgehead>
+ <bridgehead renderas="sect2">&nbsp;&nbsp;&nbsp;&nbsp;Privoxy Menu</bridgehead>
 
  <simplelist>
  <member>
@@ -822,6 +1273,9 @@ must find a better place for this paragraph
  <member>
   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&squf;&nbsp;&nbsp;<ulink url="http://config.privoxy.org/toggle">Toggle Privoxy on or off</ulink>
  </member>
+ <member>
+  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&squf;&nbsp;&nbsp;<ulink url="http://www.privoxy.org/&p-version;/user-manual/">Documentation</ulink>
+ </member>
  </simplelist>
  </msgtext>
 </screen>
@@ -920,7 +1374,8 @@ must find a better place for this paragraph
     file</link>) can be used to re-write the raw page content, including
     viewable text as well as embedded HTML and JavaScript, and whatever else
     lurks on any given web page. The filtering jobs are only pre-defined here;
-    whether to apply them or not is up to the actions files.
+    whether to apply them or not is up to the actions files. Only one filter 
+    file may be defined.
    </para>
   </listitem> 
 
@@ -960,1694 +1415,21 @@ must find a better place for this paragraph
  Also, what constitutes a <quote>default</quote> setting, may change, so 
  please check all your configuration files on important issues.
 </para>
-]]>
-
-</sect2>
-</sect1>
-<!--  ~  End section  ~  -->
-
-
-<!--   ~~~~~~~~       New section Header    ~~~~~~~~~     -->
-
-<sect1 id="config">
-<title>The Main Configuration File</title>
-
-<para>
- Again, the main configuration file is named <filename>config</filename> on
- Linux/Unix/BSD and OS/2, and <filename>config.txt</filename> on Windows.
- Configuration lines consist of an initial keyword followed by a list of
- values, all separated by whitespace (any number of spaces or tabs). For
- example:
-</para>
-
-<para>
- <literal>
-  <msgtext> 
-   <literallayout>
-  <emphasis>confdir /etc/privoxy</emphasis></literallayout>
-  </msgtext>
- </literal> 
-</para>
-
-<para>
- Assigns the value <literal>/etc/privoxy</literal> to the option
- <literal>confdir</literal> and thus indicates that the configuration
- directory is named <quote>/etc/privoxy/</quote>.
-</para>
-
-<para>
- All options in the config file except for <literal>confdir</literal> and
- <literal>logdir</literal> are optional. Watch out in the below description
- for what happens if you leave them unset.
-</para>
-
-<para>
- The main config file controls all aspects of <application>Privoxy</application>'s
- operation that are not location dependent (i.e. they apply universally, no matter
- where you may be surfing).
-</para>
-
-
-<!--   ~~~~~       New section      ~~~~~     -->
-
-<sect2 id="conf-log-loc">
-<title>Configuration and Log File Locations</title>
-
-<para>
- <application>Privoxy</application> can (and normally does) use a number of
- other files for additional configuration, help and logging.
- This section of the configuration file tells <application>Privoxy</application>
- where to find those other files. 
-</para>
-
-<para>
- The user running Privoxy, must have read permission for all 
- configuration files, and write permission to any files that would 
- be modified, such as log files.
-</para>
-
-<sect3 renderas="sect4" id="confdir"><title>confdir</title>
-
-<variablelist>
- <varlistentry>
-  <term>Specifies:</term>
-  <listitem>
-   <para>The directory where the other configuration files are located</para>
-  </listitem>
- </varlistentry>
- <varlistentry>
-  <term>Type of value:</term>
-  <listitem>
-   <para>Path name</para>
-  </listitem>
- </varlistentry>
- <varlistentry>
-  <term>Default value:</term>
-  <listitem>
-   <para>/etc/privoxy (Unix) <emphasis>or</emphasis> <application>Privoxy</application> installation dir (Windows) </para>
-  </listitem>
- </varlistentry>
- <varlistentry>
-  <term>Effect if unset:</term>
-  <listitem>
-   <para><emphasis>Mandatory</emphasis></para>
-  </listitem>
- </varlistentry>
- <varlistentry>
-  <term>Notes:</term>
-  <listitem>
-   <para>
-    No trailing <quote><literal>/</literal></quote>, please
-   </para>
-   <para>
-    When development goes modular and multi-user, the blocker, filter, and
-    per-user config will be stored in subdirectories of <quote>confdir</quote>.
-    For now, the configuration directory structure is flat, except for 
-    <filename>confdir/templates</filename>, where the HTML templates for CGI 
-    output reside (e.g. <application>Privoxy's</application> 404 error page). 
-   </para>
-  </listitem>
- </varlistentry>
-</variablelist>
-</sect3>
-
-
-<sect3 renderas="sect4" id="logdir"><title>logdir</title>
-
-<variablelist>
- <varlistentry>
-  <term>Specifies:</term>
-  <listitem>
-   <para>
-    The directory where all logging takes place (i.e. where <filename>logfile</filename> and 
-    <filename>jarfile</filename> are located) 
-   </para>
-  </listitem>
- </varlistentry>
- <varlistentry>
-  <term>Type of value:</term>
-  <listitem>
-   <para>Path name</para>
-  </listitem>
- </varlistentry>
- <varlistentry>
-  <term>Default value:</term>
-  <listitem>
-   <para>/var/log/privoxy (Unix) <emphasis>or</emphasis> <application>Privoxy</application> installation dir (Windows) </para>
-  </listitem>
- </varlistentry>
- <varlistentry>
-  <term>Effect if unset:</term>
-  <listitem>
-   <para><emphasis>Mandatory</emphasis></para>
-  </listitem>
- </varlistentry>
- <varlistentry>
-  <term>Notes:</term>
-  <listitem>
-   <para>
-    No trailing <quote><literal>/</literal></quote>, please
-   </para>
-  </listitem>
- </varlistentry>
-</variablelist>
-</sect3>
-
-<sect3 renderas="sect4" id="actionsfile"><title>
-actionsfile
-</title>
-<anchor id="default.action">
-<anchor id="standard.action">
-<anchor id="user.action">
-<!-- Note: slightly modified this section 04/28/02, hal. See NOTE. -->
-<variablelist>
- <varlistentry>
-  <term>Specifies:</term>
-  <listitem>
-   <para>
-    The <link linkend="actions-file">actions file(s)</link> to use
-   </para>
-  </listitem>
- </varlistentry>
- <varlistentry>
-  <term>Type of value:</term>
-  <listitem>
-   <para>File name, relative to <literal>confdir</literal>, without the <literal>.action</literal> suffix</para>
-  </listitem>
- </varlistentry>
- <varlistentry>
-  <term>Default value:</term>
-  <listitem>
-   <simplelist>
-    <member>
-     <msgtext><literallayout>  standard     # Internal purposes, no editing recommended</literallayout></msgtext>
-    </member>
-    <member>
-     <msgtext><literallayout>  default      # Main actions file</literallayout></msgtext>
-    </member>
-    <member>
-     <msgtext><literallayout>  user         # User customizations</literallayout></msgtext>
-    </member>
-   </simplelist>
-  </listitem>
- </varlistentry>
- <varlistentry>
-  <term>Effect if unset:</term>
-  <listitem>
-   <para>
-    No actions are taken at all. Simple neutral proxying. 
-   </para>
-  </listitem>
- </varlistentry>
- <varlistentry>
-  <term>Notes:</term>
-  <listitem>
-   <para>
-    Multiple <literal>actionsfile</literal> lines are permitted, and are in fact recommended!
-   </para>
-   <para> 
-    The default values include standard.action, which is used for internal
-    purposes and should be loaded, default.action, which is the
-    <quote>main</quote> actions file maintained by the developers, and
-    <filename>user.action</filename>, where you can make your personal additions.
-   </para>
-   <para> 
-    Actions files are where all the per site and per URL configuration is done for 
-    ad blocking, cookie management, privacy considerations, etc.
-    There is no point in using <application>Privoxy</application> without at 
-    least one actions file.
-   </para>
-  </listitem>
- </varlistentry>
-</variablelist>
-</sect3>
-
-<sect3 renderas="sect4" id="filterfile"><title>filterfile</title>
-<anchor id="default.filter">
-<variablelist>
- <varlistentry>
-  <term>Specifies:</term>
-  <listitem>
-   <para>
-    The <link linkend="filter">filter</link> file to use
-   </para>
-  </listitem>
- </varlistentry>
- <varlistentry>
-  <term>Type of value:</term>
-  <listitem>
-   <para>File name, relative to <literal>confdir</literal></para>
-  </listitem>
- </varlistentry>
- <varlistentry>
-  <term>Default value:</term>
-  <listitem>
-   <para>default.filter (Unix) <emphasis>or</emphasis> default.filter.txt (Windows)</para>
-  </listitem>
- </varlistentry>
- <varlistentry>
-  <term>Effect if unset:</term>
-  <listitem>
-   <para>
-    No textual content filtering takes place, i.e. all
-    <literal>+filter{<replaceable class="parameter">name</replaceable>}</literal>
-    actions in the actions files are turned neutral.
-   </para>
-  </listitem>
- </varlistentry>
- <varlistentry>
-  <term>Notes:</term>
-  <listitem>
-   <para>
-    The <quote>default.filter</quote> file contains content modification rules 
-    that use <quote>regular expressions</quote>. These rules permit powerful
-    changes on the content of Web pages, e.g., you could disable your favorite
-    JavaScript annoyances, re-write the actual displayed text, or just have some
-    fun replacing <quote>Microsoft</quote> with <quote>MicroSuck</quote> wherever
-    it appears on a Web page.
-   </para>
-  </listitem>
- </varlistentry>
-</variablelist>
-</sect3>
-
-<sect3 renderas="sect4" id="logfile"><title>logfile</title>
-
-<variablelist>
- <varlistentry>
-  <term>Specifies:</term>
-  <listitem>
-   <para>
-    The log file to use
-   </para>
-  </listitem>
- </varlistentry>
- <varlistentry>
-  <term>Type of value:</term>
-  <listitem>
-   <para>File name, relative to <literal>logdir</literal></para>
-  </listitem>
- </varlistentry>
- <varlistentry>
-  <term>Default value:</term>
-  <listitem>
-   <para>logfile (Unix) <emphasis>or</emphasis> privoxy.log (Windows)</para>
-  </listitem>
- </varlistentry>
- <varlistentry>
-  <term>Effect if unset:</term>
-  <listitem>
-   <para>
-    No log file is used, all log messages go to the console (<literal>stderr</literal>).
-   </para>
-  </listitem>
- </varlistentry>
- <varlistentry>
-  <term>Notes:</term>
-  <listitem>
-   <para>
-    The windows version will additionally log to the console.
-   </para>
-   <para>
-    The logfile is where all logging and error messages are written. The level
-    of detail and number of messages are set with the <literal>debug</literal>
-    option (see below). The logfile can be useful for tracking down a problem with
-    <application>Privoxy</application> (e.g., it's not blocking an ad you
-    think it should block) but in most cases you probably will never look at it.
-   </para>
-   <para>
-    Your logfile will grow indefinitely, and you will probably want to
-    periodically remove it.  On Unix systems, you can do this with a cron job
-    (see <quote>man cron</quote>). For Red Hat, a <command>logrotate</command> 
-    script has been included.
-   </para> 
-   <para>
-    On SuSE Linux systems, you can place a line like <quote>/var/log/privoxy.*
-    +1024k 644 nobody.nogroup</quote> in <filename>/etc/logfiles</filename>, with
-    the effect that cron.daily will automatically archive, gzip, and empty the
-    log, when it exceeds 1M size.
-   </para>
-   <para>
-    Any log files must be writable by whatever user <application>Privoxy</application>
-    is being run as (default on UNIX, user id is <quote>privoxy</quote>).
-   </para>
-  </listitem>
- </varlistentry>
-</variablelist>
-</sect3>
-
-<sect3 renderas="sect4" id="jarfile"><title>jarfile</title>
-
-<variablelist>
- <varlistentry>
-  <term>Specifies:</term>
-  <listitem>
-   <para>
-    The file to store intercepted cookies in
-   </para>
-  </listitem>
- </varlistentry>
- <varlistentry>
-  <term>Type of value:</term>
-  <listitem>
-   <para>File name, relative to <literal>logdir</literal></para>
-  </listitem>
- </varlistentry>
- <varlistentry>
-  <term>Default value:</term>
-  <listitem>
-   <para>jarfile (Unix) <emphasis>or</emphasis> privoxy.jar (Windows)</para>
-  </listitem>
- </varlistentry>
- <varlistentry>
-  <term>Effect if unset:</term>
-  <listitem>
-   <para>
-    Intercepted cookies are not stored at all.
-   </para>
-  </listitem>
- </varlistentry>
- <varlistentry>
-  <term>Notes:</term>
-  <listitem>
-   <para>
-    The jarfile may grow to ridiculous sizes over time.
-   </para>
-  </listitem>
- </varlistentry>
-</variablelist>
-</sect3>
-
-<sect3 renderas="sect4" id="trustfile"><title>trustfile</title>
-<variablelist>
- <varlistentry>
-  <term>Specifies:</term>
-  <listitem>
-   <para>
-    The trust file to use
-   </para>
-  </listitem>
- </varlistentry>
- <varlistentry>
-  <term>Type of value:</term>
-  <listitem>
-   <para>File name, relative to <literal>confdir</literal></para>
-  </listitem>
- </varlistentry>
- <varlistentry>
-  <term>Default value:</term>
-  <listitem>
-   <para><emphasis>Unset (commented out)</emphasis>. When activated: trust (Unix) <emphasis>or</emphasis> trust.txt (Windows)</para>
-  </listitem>
- </varlistentry>
- <varlistentry>
-  <term>Effect if unset:</term>
-  <listitem>
-   <para>
-    The whole trust mechanism is turned off.
-   </para>
-  </listitem>
- </varlistentry>
- <varlistentry>
-  <term>Notes:</term>
-  <listitem>
-   <para>
-    The trust mechanism is an experimental feature for building white-lists and should
-    be used with care. It is <emphasis>NOT</emphasis> recommended for the casual user.
-   </para>
-   <para>
-    If you specify a trust file, <application>Privoxy</application> will only allow
-    access to sites that are named in the trustfile. 
-    You can also mark sites as trusted referrers (with <literal>+</literal>), with
-    the effect that access to untrusted sites will be granted, if a link from a
-    trusted referrer was used.
-    The link target will then be added to the <quote>trustfile</quote>.
-    Possible applications include limiting Internet access for children.
-   </para>
-   <para>
-    If you use <literal>+</literal> operator in the trust file, it may grow considerably over time.
-   </para>
-  </listitem>
- </varlistentry>
-</variablelist>
-</sect3>
-</sect2>
-
-<!--  ~  End section  ~  -->
-
-
-
-<!--   ~~~~~       New section      ~~~~~     -->
-
-<sect2 id="local-set-up">
-<title>Local Set-up Documentation</title>
-
-  <para>
-    If you intend to operate <application>Privoxy</application> for more users
-    than just yourself, it might be a good idea to let them know how to reach
-    you, what you block and why you do that, your policies, etc.
-   </para>
-
-<sect3 renderas="sect4" id="user-manual"><title>user-manual</title>
-<variablelist>
- <varlistentry>
-  <term>Specifies:</term>
-  <listitem>
-   <para>
-    Location of the <application>Privoxy</application> User Manual.
-   </para>
-  </listitem>
- </varlistentry>
- <varlistentry>
-  <term>Type of value:</term>
-  <listitem>
-   <para>A fully qualified URI</para>
-  </listitem>
- </varlistentry>
- <varlistentry>
-  <term>Default value:</term>
-  <listitem>
-   <para><emphasis>Unset</emphasis></para>
-  </listitem>
- </varlistentry>
- <varlistentry>
-  <term>Effect if unset:</term>
-  <listitem>
-   <para>
-    <ulink url="http://www.privoxy.org/user-manual/">http://www.privoxy.org/<replaceable class="parameter">version</replaceable>/user-manual/</ulink>
-    will be used, where <replaceable class="parameter">version</replaceable> is the <application>Privoxy</application> version.
-   </para>
-  </listitem>
- </varlistentry>
- <varlistentry>
-  <term>Notes:</term>
-  <listitem>
-    <para>
-    The User Manual URI is used for help links from some of the internal CGI pages. 
-    The manual itself is normally packaged with the binary distributions, so you probably want
-    to set this to a locally installed copy. For multi-user setups, you could provide a copy on
-    a local webserver for all your users and use the corresponding URL here.
-   </para>
-   <para>
-    Examples:
-   </para>
-  <para>
-   Unix, in local filesystem:
-  </para>
-  <para>
-   <screen>user-manual&nbsp;&nbsp;file:///usr/share/doc/privoxy-&p-version;/user-manual/</screen>
-  </para>
-  <para>
-   Any platform, on local webserver (called <quote>local-webserver</quote>):
-  </para>
-  <para>
-   <screen>user-manual&nbsp;&nbsp;http://local-webserver/privoxy-user-manual/</screen>
-  </para>
-  <warning>
-   <para>
-     If set, this option should be <emphasis>the first option in the config file</emphasis>, because
-     it is used while the config file is being read.
-   </para>
-  </warning>     
- </listitem>
- </varlistentry>
-</variablelist>
-</sect3>
-
-<sect3 renderas="sect4" id="trust-info-url"><title>trust-info-url</title>
-
-<variablelist>
- <varlistentry>
-  <term>Specifies:</term>
-  <listitem>
-   <para>
-    A URL to be displayed in the error page that users will see if access to an untrusted page is denied.    
-   </para>
-  </listitem>
- </varlistentry>
- <varlistentry>
-  <term>Type of value:</term>
-  <listitem>
-   <para>URL</para>
-  </listitem>
- </varlistentry>
- <varlistentry>
-  <term>Default value:</term>
-  <listitem>
-   <para>Two example URL are provided</para>
-  </listitem>
- </varlistentry>
- <varlistentry>
-  <term>Effect if unset:</term>
-  <listitem>
-   <para>
-    No links are displayed on the "untrusted" error page.
-   </para>
-  </listitem>
- </varlistentry>
- <varlistentry>
-  <term>Notes:</term>
-  <listitem>
-   <para>
-    The value of this option only matters if the experimental trust mechanism has been
-    activated. (See <link linkend="trustfile"><emphasis>trustfile</emphasis></link> above.)
-   </para>
-   <para>
-    If you use the trust mechanism, it is a good idea to write up some on-line
-    documentation about your trust policy and to specify the URL(s) here.
-    Use multiple times for multiple URLs.
-   </para>
-   <para>
-    The URL(s) should be added to the trustfile as well, so users don't end up
-    locked out from the information on why they were locked out in the first place!
-   </para>
-  </listitem>
- </varlistentry>
-</variablelist>
-</sect3>
-
-<sect3 renderas="sect4" id="admin-address"><title>admin-address</title>
-
-<variablelist>
- <varlistentry>
-  <term>Specifies:</term>
-  <listitem>
-   <para>
-    An email address to reach the proxy administrator.
-   </para>
-  </listitem>
- </varlistentry>
- <varlistentry>
-  <term>Type of value:</term>
-  <listitem>
-   <para>Email address</para>
-  </listitem>
- </varlistentry>
- <varlistentry>
-  <term>Default value:</term>
-  <listitem>
-   <para><emphasis>Unset</emphasis></para>
-  </listitem>
- </varlistentry>
- <varlistentry>
-  <term>Effect if unset:</term>
-  <listitem>
-   <para>
-    No email address is displayed on error pages and the CGI user interface.
-   </para>
-  </listitem>
- </varlistentry>
- <varlistentry>
-  <term>Notes:</term>
-  <listitem>
-    <para>
-    If both <literal>admin-address</literal> and <literal>proxy-info-url</literal>
-    are unset, the whole "Local Privoxy Support" box on all generated pages will
-    not be shown.
-   </para>  
-  </listitem>
- </varlistentry>
-</variablelist>
-</sect3>
-
-<sect3 renderas="sect4" id="proxy-info-url"><title>proxy-info-url</title>
-
-<variablelist>
- <varlistentry>
-  <term>Specifies:</term>
-  <listitem>
-   <para>
-    A URL to documentation about the local <application>Privoxy</application> setup,
-    configuration or policies.
-   </para>
-  </listitem>
- </varlistentry>
- <varlistentry>
-  <term>Type of value:</term>
-  <listitem>
-   <para>URL</para>
-  </listitem>
- </varlistentry>
- <varlistentry>
-  <term>Default value:</term>
-  <listitem>
-   <para><emphasis>Unset</emphasis></para>
-  </listitem>
- </varlistentry>
- <varlistentry>
-  <term>Effect if unset:</term>
-  <listitem>
-   <para>
-    No link to local documentation is displayed on error pages and the CGI user interface.
-   </para>
-  </listitem>
- </varlistentry>
- <varlistentry>
-  <term>Notes:</term>
-  <listitem>
-   <para>
-    If both <literal>admin-address</literal> and <literal>proxy-info-url</literal>
-    are unset, the whole "Local Privoxy Support" box on all generated pages will
-    not be shown.
-   </para>  
-   <para>
-    This URL shouldn't be blocked ;-)
-   </para> 
-  </listitem>
- </varlistentry>
-</variablelist>
-</sect3>
-
-</sect2>
-<!--  ~  End section  ~  -->
-
-<!--   ~~~~~       New section      ~~~~~     -->
-
-<sect2 id="debugging">
-<title>Debugging</title>
-
- <para>
-  These options are mainly useful when tracing a problem.
-  Note that you might also want to invoke
-  <application>Privoxy</application> with the <literal>--no-daemon</literal>
-  command line option when debugging.
- </para>
-
-<sect3 renderas="sect4" id="debug"><title>debug</title>
-
-<variablelist>
- <varlistentry>
-  <term>Specifies:</term>
-  <listitem>
-   <para>
-    Key values that determine what information gets logged to the 
-    <link linkend="logfile"><emphasis>logfile</emphasis></link>.
-   </para>
-  </listitem>
- </varlistentry>
- <varlistentry>
-  <term>Type of value:</term>
-  <listitem>
-   <para>Integer values</para>
-  </listitem>
- </varlistentry>
- <varlistentry>
-  <term>Default value:</term>
-  <listitem>
-   <para>12289 (i.e.: URLs plus informational and warning messages)</para>
-  </listitem>
- </varlistentry>
- <varlistentry>
-  <term>Effect if unset:</term>
-  <listitem>
-   <para>
-    Nothing gets logged.
-   </para>
-  </listitem>
- </varlistentry>
- <varlistentry>
-  <term>Notes:</term>
-  <listitem>
-   <para>
-    The available debug levels are:
-   </para>
-   <para>
-    <programlisting>
-  debug         1 # show each GET/POST/CONNECT request
-  debug         2 # show each connection status
-  debug         4 # show I/O status
-  debug         8 # show header parsing
-  debug        16 # log all data into the logfile
-  debug        32 # debug force feature
-  debug        64 # debug regular expression filter 
-  debug       128 # debug fast redirects
-  debug       256 # debug GIF de-animation
-  debug       512 # Common Log Format
-  debug      1024 # debug kill pop-ups
-  debug      4096 # Startup banner and warnings.
-  debug      8192 # Non-fatal errors
-</programlisting>
-   </para>
-   <para>
-    To select multiple debug levels, you can either add them or use
-    multiple <literal>debug</literal> lines.
-   </para>
-   <para>
-    A debug level of 1 is informative because it will show you each request
-    as it happens. <emphasis>1, 4096 and 8192 are highly recommended</emphasis>
-    so that you will notice when things go wrong. The other levels are probably
-    only of interest if you are hunting down a specific problem. They can produce
-    a hell of an output (especially 16).
-    <!-- LOL -->
-   </para>
-   <para>
-    The reporting of <emphasis>fatal</emphasis> errors (i.e. ones which crash 
-    <application>Privoxy</application>) is always on and cannot be disabled.
-   </para>
-   <para>
-    If you want to use CLF (Common Log Format), you should set <quote>debug
-    512</quote> <emphasis>ONLY</emphasis> and not enable anything else.
-   </para>
-  </listitem>
- </varlistentry>
-</variablelist>
-</sect3>
-
-<sect3 renderas="sect4" id="single-threaded"><title>single-threaded</title>
-
-<variablelist>
- <varlistentry>
-  <term>Specifies:</term>
-  <listitem>
-   <para>
-    Whether to run only one server thread
-   </para>
-  </listitem>
- </varlistentry>
- <varlistentry>
-  <term>Type of value:</term>
-  <listitem>
-   <para><emphasis>None</emphasis></para>
-  </listitem>
- </varlistentry>
- <varlistentry>
-  <term>Default value:</term>
-  <listitem>
-   <para><emphasis>Unset</emphasis></para>
-  </listitem>
- </varlistentry>
- <varlistentry>
-  <term>Effect if unset:</term>
-  <listitem>
-   <para>
-    Multi-threaded (or, where unavailable: forked) operation, i.e. the ability to
-    serve multiple requests simultaneously.
-   </para>
-  </listitem>
- </varlistentry>
- <varlistentry>
-  <term>Notes:</term>
-  <listitem>
-   <para>
-    This option is only there for debug purposes and you should never
-    need to use it. <emphasis>It will drastically reduce performance.</emphasis>
-   </para>
-  </listitem>
- </varlistentry>
-</variablelist>
-</sect3>
-
-</sect2>
-
-<!--   ~~~~~       New section      ~~~~~     -->
-
-<sect2 id="access-control">
-<title>Access Control and Security</title>
-
- <para>
-  This section of the config file controls the security-relevant aspects
-  of <application>Privoxy</application>'s configuration.
- </para>
-
-<sect3 renderas="sect4" id="listen-address"><title>listen-address</title>
-
-<variablelist>
- <varlistentry>
-  <term>Specifies:</term>
-  <listitem>
-   <para>
-    The IP address and TCP port on which <application>Privoxy</application> will
-    listen for client requests.
-   </para>
-  </listitem>
- </varlistentry>
- <varlistentry>
-  <term>Type of value:</term>
-  <listitem>
-   <para>[<replaceable class="parameter">IP-Address</replaceable>]:<replaceable class="parameter">Port</replaceable></para>
-  </listitem>
- </varlistentry>
-
- <varlistentry>
-  <term>Default value:</term>
-  <listitem>
-   <para>127.0.0.1:8118</para>
-  </listitem>
- </varlistentry>
- <varlistentry>
-  <term>Effect if unset:</term>
-  <listitem>
-   <para>
-    Bind to 127.0.0.1 (localhost), port 8118. This is suitable and recommended for
-    home users who run <application>Privoxy</application> on the same machine as
-    their browser.
-   </para>
-  </listitem>
- </varlistentry>
- <varlistentry>
-  <term>Notes:</term>
-  <listitem>
-   <para>
-    You will need to configure your browser(s) to this proxy address and port.
-   </para>
-   <para>
-    If you already have another service running on port 8118, or if you want to
-    serve requests from other machines (e.g. on your local network) as well, you
-    will need to override the default.
-   </para>
-   <para>
-    If you leave out the IP address, <application>Privoxy</application> will
-    bind to all interfaces (addresses) on your machine and may become reachable
-    from the Internet. In that case, consider using access control lists (ACL's)
-    (see <quote>ACLs</quote> below), or a firewall.
-   </para>
-  </listitem>
- </varlistentry>
- <varlistentry>
-  <term>Example:</term>
-  <listitem>
-   <para>
-     Suppose you are running <application>Privoxy</application> on
-     a machine which has the address 192.168.0.1 on your local private network
-     (192.168.0.0) and has another outside connection with a different address.
-     You want it to serve requests from inside only:
-   </para>
-   <para>
-    <programlisting>
-  listen-address  192.168.0.1:8118
-</programlisting>
-   </para>
-  </listitem>
- </varlistentry>
-</variablelist>
-</sect3>
-
-<sect3 renderas="sect4" id="toggle"><title>toggle</title>
-
-<variablelist>
- <varlistentry>
-  <term>Specifies:</term>
-  <listitem>
-   <para>
-    Initial state of "toggle" status
-   </para>
-  </listitem>
- </varlistentry>
- <varlistentry>
-  <term>Type of value:</term>
-  <listitem>
-   <para>1 or 0</para>
-  </listitem>
- </varlistentry>
- <varlistentry>
-  <term>Default value:</term>
-  <listitem>
-   <para>1</para>
-  </listitem>
- </varlistentry>
- <varlistentry>
-  <term>Effect if unset:</term>
-  <listitem>
-   <para>
-    Act as if toggled on
-   </para>
-  </listitem>
- </varlistentry>
- <varlistentry>
-  <term>Notes:</term>
-  <listitem>
-   <para>
-    If set to 0, <application>Privoxy</application> will start in
-    <quote>toggled off</quote> mode, i.e. behave like a normal, content-neutral
-    proxy where all ad blocking, filtering, etc are disabled. See
-    <literal>enable-remote-toggle</literal> below. This is not really useful
-    anymore, since toggling is much easier via <ulink
-    url="http://config.privoxy.org/toggle">the web interface</ulink> than via
-    editing the <filename>conf</filename> file.
-   </para>
-   <para>
-    The windows version will only display the toggle icon in the system tray
-    if this option is present.
-   </para>
-  </listitem>
- </varlistentry>
-</variablelist>
-</sect3>
-
-
-<sect3 renderas="sect4" id="enable-remote-toggle"><title>enable-remote-toggle</title>
-<variablelist>
- <varlistentry>
-  <term>Specifies:</term>
-  <listitem>
-   <para>
-    Whether or not the <ulink url="http://config.privoxy.org/toggle">web-based toggle
-    feature</ulink> may be used
-   </para>
-  </listitem>
- </varlistentry>
- <varlistentry>
-  <term>Type of value:</term>
-  <listitem>
-   <para>0 or 1</para>
-  </listitem>
- </varlistentry>
- <varlistentry>
-  <term>Default value:</term>
-  <listitem>
-   <para>1</para>
-  </listitem>
- </varlistentry>
- <varlistentry>
-  <term>Effect if unset:</term>
-  <listitem>
-   <para>
-    The web-based toggle feature is disabled.
-   </para>
-  </listitem>
- </varlistentry>
- <varlistentry>
-  <term>Notes:</term>
-  <listitem>
-   <para>
-    When toggled off, <application>Privoxy</application> acts like a normal,
-    content-neutral proxy, i.e. it acts as if none of the actions applied to
-    any URL.
-   </para>
-   <para>
-    For the time being, access to the toggle feature can <emphasis>not</emphasis> be
-    controlled separately by <quote>ACLs</quote> or HTTP authentication,
-    so that everybody who can access <application>Privoxy</application> (see
-    <quote>ACLs</quote> and <literal>listen-address</literal> above) can
-    toggle it for all users. So this option is <emphasis>not recommended</emphasis>
-    for multi-user environments with untrusted users.
-   </para>
-   <para>
-    Note that you must have compiled <application>Privoxy</application> with
-    support for this feature, otherwise this option has no effect. 
-   </para>
-  </listitem>
- </varlistentry>
-</variablelist>
-</sect3>
-
-
-<sect3 renderas="sect4" id="enable-edit-actions"><title>enable-edit-actions</title>
-<variablelist>
- <varlistentry>
-  <term>Specifies:</term>
-  <listitem>
-   <para>
-    Whether or not the <ulink url="http://config.privoxy.org/show-status">web-based actions
-    file editor</ulink> may be used
-   </para>
-  </listitem>
- </varlistentry>
- <varlistentry>
-  <term>Type of value:</term>
-  <listitem>
-   <para>0 or 1</para>
-  </listitem>
- </varlistentry>
- <varlistentry>
-  <term>Default value:</term>
-  <listitem>
-   <para>1</para>
-  </listitem>
- </varlistentry>
- <varlistentry>
-  <term>Effect if unset:</term>
-  <listitem>
-   <para>
-    The web-based actions file editor is disabled.
-   </para>
-  </listitem>
- </varlistentry>
- <varlistentry>
-  <term>Notes:</term>
-  <listitem>
-   <para>
-    For the time being, access to the editor can <emphasis>not</emphasis> be
-    controlled separately by <quote>ACLs</quote> or HTTP authentication,
-    so that everybody who can access <application>Privoxy</application> (see
-    <quote>ACLs</quote> and <literal>listen-address</literal> above) can
-    modify its configuration for all users. So this option is <emphasis>not
-    recommended</emphasis> for multi-user environments with untrusted users.
-   </para>
-   <para>
-    Note that you must have compiled <application>Privoxy</application> with
-    support for this feature, otherwise this option has no effect. 
-   </para>
-  </listitem>
- </varlistentry>
-</variablelist>
-</sect3>
-
-<sect3 renderas="sect4" id="acls"><title>
-ACLs: permit-access and deny-access</title>
-<anchor id="permit-acces">
-<anchor id="deny-acces">
-
-<variablelist>
- <varlistentry>
-  <term>Specifies:</term>
-  <listitem>
-   <para>
-    Who can access what.
-   </para>
-  </listitem>
- </varlistentry>
- <varlistentry>
-  <term>Type of value:</term>
-  <listitem>
-   <para>
-    <replaceable class="parameter">src_addr</replaceable>[/<replaceable class="parameter">src_masklen</replaceable>]
-    [<replaceable class="parameter">dst_addr</replaceable>[/<replaceable class="parameter">dst_masklen</replaceable>]]
-   </para>
-   <para>
-    Where <replaceable class="parameter">src_addr</replaceable> and 
-   <replaceable class="parameter">dst_addr</replaceable> are IP addresses in dotted decimal notation or valid
-    DNS names, and <replaceable class="parameter">src_masklen</replaceable> and
-    <replaceable class="parameter">dst_masklen</replaceable> are subnet masks in CIDR notation, i.e. integer
-    values from 2 to 30 representing the length (in bits) of the network address. The masks and the whole
-    destination part are optional.
-   </para>
-  </listitem>
- </varlistentry>
- <varlistentry>
-  <term>Default value:</term>
-  <listitem>
-   <para><emphasis>Unset</emphasis></para>
-  </listitem>
- </varlistentry>
- <varlistentry>
-  <term>Effect if unset:</term>
-  <listitem>
-   <para>
-    Don't restrict access further than implied by <literal>listen-address</literal>
-   </para>
-  </listitem>
- </varlistentry>
- <varlistentry>
-  <term>Notes:</term>
-  <listitem>
-   <para>
-    Access controls are included at the request of ISPs and systems
-    administrators, and <emphasis>are not usually needed by individual users</emphasis>.
-    For a typical home user, it will normally suffice to ensure that 
-    <application>Privoxy</application> only listens on the localhost
-    (127.0.0.1) or internal (home) network address by means of the
-    <link linkend="listen-address"><emphasis>listen-address</emphasis></link>
-    option. 
-   </para>
-   <para>
-    Please see the warnings in the FAQ that this proxy is not intended to be a substitute
-    for a firewall or to encourage anyone to defer addressing basic security
-    weaknesses.
-   </para>
-   <para>
-    Multiple ACL lines are OK.
-    If any ACLs are specified, then the <application>Privoxy</application>
-    talks only to IP addresses that match at least one <literal>permit-access</literal> line
-    and don't match any subsequent <literal>deny-access</literal> line. In other words, the
-    last match wins, with the default being <literal>deny-access</literal>.
-   </para>
-   <para>
-    If <application>Privoxy</application> is using a forwarder (see <literal>forward</literal> below)
-    for a particular destination URL, the <replaceable class="parameter">dst_addr</replaceable>
-    that is examined is the address of the forwarder and <emphasis>NOT</emphasis> the address
-    of the ultimate target. This is necessary because it may be impossible for the local
-    <application>Privoxy</application> to determine the IP address of the
-    ultimate target (that's often what gateways are used for).
-   </para>
-   <para>
-    You should prefer using IP addresses over DNS names, because the address lookups take
-    time. All DNS names must resolve! You can <emphasis>not</emphasis> use domain patterns
-    like <quote>*.org</quote> or partial domain names. If a DNS name resolves to multiple
-    IP addresses, only the first one is used.
-   </para>
-   <para>
-    Denying access to particular sites by ACL may have undesired side effects
-    if the site in question is hosted on a machine which also hosts other sites.
-   </para>
-  </listitem>
- </varlistentry>
- <varlistentry>
-  <term>Examples:</term>
-  <listitem>
-   <para>
-    Explicitly define the default behavior if no ACL and
-    <literal>listen-address</literal> are set: <quote>localhost</quote>
-    is OK. The absence of a <replaceable class="parameter">dst_addr</replaceable> implies that
-    <emphasis>all</emphasis> destination addresses are OK:
-   </para>
-   <para>
-    <screen>
-  permit-access  localhost
-</screen>
-   </para>
-   <para>
-    Allow any host on the same class C subnet as www.privoxy.org access to
-    nothing but www.example.com:
-   </para>
-   <para>
-    <screen>
-  permit-access  www.privoxy.org/24 www.example.com/32
-</screen>
-   </para>
-   <para>
-    Allow access from any host on the 26-bit subnet 192.168.45.64 to anywhere,
-    with the exception that 192.168.45.73 may not access www.dirty-stuff.example.com:
-   </para>
-   <para>
-    <screen>
-  permit-access  192.168.45.64/26
-  deny-access    192.168.45.73    www.dirty-stuff.example.com
-</screen>
-   </para>
-  </listitem>
- </varlistentry>
-</variablelist>
-</sect3>
-
-<sect3 renderas="sect4" id="buffer-limit"><title>buffer-limit</title>
-
-<variablelist>
- <varlistentry>
-  <term>Specifies:</term>
-  <listitem>
-   <para>
-    Maximum size of the buffer for content filtering.
-   </para>
-  </listitem>
- </varlistentry>
- <varlistentry>
-  <term>Type of value:</term>
-  <listitem>
-   <para>Size in Kbytes</para>
-  </listitem>
- </varlistentry>
- <varlistentry>
-  <term>Default value:</term>
-  <listitem>
-   <para>4096</para>
-  </listitem>
- </varlistentry>
- <varlistentry>
-  <term>Effect if unset:</term>
-  <listitem>
-   <para>
-    Use a 4MB (4096 KB) limit.
-   </para>
-  </listitem>
- </varlistentry>
- <varlistentry>
-  <term>Notes:</term>
-  <listitem>
-   <para>
-    For content filtering, i.e. the <literal>+filter</literal> and
-    <literal>+deanimate-gif</literal> actions, it is necessary that 
-    <application>Privoxy</application> buffers the entire document body.
-    This can be potentially dangerous, since a server could just keep sending
-    data indefinitely and wait for your RAM to exhaust -- with nasty consequences.
-    Hence this option.
-   </para>
-   <para>
-    When a document buffer size reaches the <literal>buffer-limit</literal>, it is
-    flushed to the client unfiltered and no further attempt to
-    filter the rest of the document is made. Remember that there may be multiple threads
-    running, which might require up to <literal>buffer-limit</literal> Kbytes
-    <emphasis>each</emphasis>, unless you have enabled <quote>single-threaded</quote>
-    above.
-   </para>
-  </listitem>
- </varlistentry>
-</variablelist>
-</sect3>
-
-</sect2>
-
-<!--  ~  End section  ~  -->
-
-
-<!--   ~~~~~       New section      ~~~~~     -->
-
-<sect2 id="forwarding">
-<title>Forwarding</title>
-
-<para>
- This feature allows routing of HTTP requests through a chain of
- multiple proxies.
- It can be used to better protect privacy and confidentiality when
- accessing specific domains by routing requests to those domains
- through an anonymous public proxy (see e.g. <ulink
- url="http://www.multiproxy.org/anon_list.htm">http://www.multiproxy.org/anon_list.htm</ulink>)
- Or to use a caching proxy to speed up browsing. Or chaining to a parent
- proxy may be necessary because the machine that <application>Privoxy</application>
- runs on has no direct Internet access.
-</para>
-
-<para>
- Also specified here are SOCKS proxies. <application>Privoxy</application>
- supports the SOCKS 4 and SOCKS 4A protocols.
-</para>
-
-<sect3 renderas="sect4" id="forward"><title>forward</title>
-<variablelist>
- <varlistentry>
-  <term>Specifies:</term>
-  <listitem>
-   <para>
-    To which parent HTTP proxy specific requests should be routed.
-   </para>
-  </listitem>
- </varlistentry>
- <varlistentry>
-  <term>Type of value:</term>
-  <listitem>
-   <para>
-    <replaceable class="parameter">target_domain</replaceable>[:<replaceable class="parameter">port</replaceable>]
-    <replaceable class="parameter">http_parent</replaceable>[/<replaceable class="parameter">port</replaceable>]
-   </para>
-   <para>
-    Where <replaceable class="parameter">target_domain</replaceable> is a domain name pattern (see the
-    chapter on domain matching in the <filename>default.action</filename> file),
-    <replaceable class="parameter">http_parent</replaceable> is the address of the parent HTTP proxy
-    as an IP addresses in dotted decimal notation or as a valid DNS name (or <quote>.</quote> to denote
-    <quote>no forwarding</quote>, and the optional 
-    <replaceable class="parameter">port</replaceable> parameters are TCP ports, i.e. integer
-    values from 1 to 64535
-   </para>
-  </listitem>
- </varlistentry>
- <varlistentry>
-  <term>Default value:</term>
-  <listitem>
-   <para><emphasis>Unset</emphasis></para>
-  </listitem>
- </varlistentry>
- <varlistentry>
-  <term>Effect if unset:</term>
-  <listitem>
-   <para>
-    Don't use parent HTTP proxies.
-   </para>
-  </listitem>
- </varlistentry>
- <varlistentry>
-  <term>Notes:</term>
-  <listitem>
-   <para>
-    If <replaceable class="parameter">http_parent</replaceable> is <quote>.</quote>, then requests are not
-    forwarded to another HTTP proxy but are made directly to the web servers.
-   </para>
-   <para>
-    Multiple lines are OK, they are checked in sequence, and the last match wins.
-   </para>
-  </listitem>
- </varlistentry>
- <varlistentry>
-  <term>Examples:</term>
-  <listitem>
-   <para>
-    Everything goes to an example anonymizing proxy, except SSL on port 443 (which it doesn't handle):
-   </para>
-   <para>
-    <screen>
-  forward   .*     anon-proxy.example.org:8080
-  forward   :443   .
-</screen>
-   </para>
-   <para>
-    Everything goes to our example ISP's caching proxy, except for requests
-    to that ISP's sites:
-   </para>
-   <para>
-    <screen>
-  forward   .*.                caching-proxy.example-isp.net:8000
-  forward   .example-isp.net   .
-</screen>
-   </para>
-  </listitem>
- </varlistentry>
-</variablelist>
-</sect3>
-
-<sect3 renderas="sect4" id="socks"><title>
-forward-socks4 and forward-socks4a</title>
-<anchor id="forward-socks4">
-<anchor id="forward-socks4a">
-
-<variablelist>
- <varlistentry>
-  <term>Specifies:</term>
-  <listitem>
-   <para>
-    Through which SOCKS proxy (and to which parent HTTP proxy) specific requests should be routed.
-   </para>
-  </listitem>
- </varlistentry>
- <varlistentry>
-  <term>Type of value:</term>
-  <listitem>
-   <para>
-    <replaceable class="parameter">target_domain</replaceable>[:<replaceable class="parameter">port</replaceable>]
-    <replaceable class="parameter">socks_proxy</replaceable>[/<replaceable class="parameter">port</replaceable>]
-    <replaceable class="parameter">http_parent</replaceable>[/<replaceable class="parameter">port</replaceable>]
-   </para>
-   <para>
-    Where <replaceable class="parameter">target_domain</replaceable> is a domain name pattern (see the
-    chapter on domain matching in the <filename>default.action</filename> file),
-    <replaceable class="parameter">http_parent</replaceable> and <replaceable class="parameter">socks_proxy</replaceable>
-    are IP addresses in dotted decimal notation or valid DNS names (<replaceable class="parameter">http_parent</replaceable>
-    may be <quote>.</quote> to denote <quote>no HTTP forwarding</quote>), and the optional 
-    <replaceable class="parameter">port</replaceable> parameters are TCP ports, i.e. integer values from 1 to 64535
-   </para>
-  </listitem>
- </varlistentry>
- <varlistentry>
-  <term>Default value:</term>
-  <listitem>
-   <para><emphasis>Unset</emphasis></para>
-  </listitem>
- </varlistentry>
- <varlistentry>
-  <term>Effect if unset:</term>
-  <listitem>
-   <para>
-    Don't use SOCKS proxies.
-   </para>
-  </listitem>
- </varlistentry>
- <varlistentry>
-  <term>Notes:</term>
-  <listitem>
-   <para>
-    Multiple lines are OK, they are checked in sequence, and the last match wins.
-   </para>
-   <para>
-    The difference between <literal>forward-socks4</literal> and <literal>forward-socks4a</literal>
-    is that in the SOCKS 4A protocol, the DNS resolution of the target hostname happens on the SOCKS
-    server, while in SOCKS 4 it happens locally.
-   </para>
-   <para>
-    If <replaceable class="parameter">http_parent</replaceable> is <quote>.</quote>, then requests are not
-    forwarded to another HTTP proxy but are made (HTTP-wise) directly to the web servers, albeit through
-    a SOCKS proxy.
-   </para>
-  </listitem>
- </varlistentry>
- <varlistentry>
-  <term>Examples:</term>
-  <listitem>
-   <para>
-     From the company example.com, direct connections are made to all
-     <quote>internal</quote> domains, but everything outbound goes through
-     their ISP's proxy by way of example.com's corporate SOCKS 4A gateway to
-     the Internet.
-   </para>
-   <para>
-    <screen>
-  forward-socks4a   .*.            socks-gw.example.com:1080  www-cache.example-isp.net:8080
-  forward           .example.com   .
-</screen>
-   </para>
-   <para>
-    A rule that uses a SOCKS 4 gateway for all destinations but no HTTP parent looks like this:
-   </para>
-   <para>
-    <screen>
-  forward-socks4   .*.            socks-gw.example.com:1080  .
-</screen>
-   </para>
-  </listitem>
- </varlistentry>
-</variablelist>
-</sect3>
-
-<sect3 renderas="sect4" id="advanced-forwarding-examples"><title>Advanced Forwarding Examples</title>
-
-<para>
- If you have links to multiple ISPs that provide various special content 
- only to their subscribers, you can configure multiple <application>Privoxies</application>
- which have connections to the respective ISPs to act as forwarders to each other, so that
- <emphasis>your</emphasis> users can see the internal content of all ISPs.
-</para>
-
-<para>
- Assume that host-a has a PPP connection to isp-a.net. And host-b has a PPP connection to
- isp-b.net. Both run <application>Privoxy</application>. Their forwarding
- configuration can look like this:
-</para>
-
-<para>
- host-a:
-</para>
-
-<para>
- <screen>
-  forward    .*.         .
-  forward    .isp-b.net  host-b:8118
-</screen>
-</para>
-
-<para>
- host-b:
-</para>
-
-<para>
- <screen>
-  forward    .*.         .
-  forward    .isp-a.net  host-a:8118
-</screen>
-</para>
-
-<para>
- Now, your users can set their browser's proxy to use either
- host-a or host-b and be able to browse the internal content
- of both isp-a and isp-b.
-</para>
-
-<para>
- If you intend to chain <application>Privoxy</application> and 
- <application>squid</application> locally, then chain as 
- <literal>browser -> squid -> privoxy</literal> is the recommended way. 
-</para>
-
-<para>
- Assuming that <application>Privoxy</application> and <application>squid</application>
- run on the same box, your squid configuration could then look like this:
-</para>
-
-<para>
- <screen>
-  # Define Privoxy as parent proxy (without ICP) 
-  cache_peer 127.0.0.1 parent 8118 7 no-query 
-
-  # Define ACL for protocol FTP 
-  acl ftp proto FTP 
-
-  # Do not forward FTP requests to Privoxy
-  always_direct allow ftp 
-
-  # Forward all the rest to Privoxy
-  never_direct allow all</screen>
-</para>
-
-<para>
- You would then need to change your browser's proxy settings to <application>squid</application>'s address and port.
- Squid normally uses port 3128. If unsure consult <literal>http_port</literal> in <filename>squid.conf</filename>.
-</para>
-
-</sect3>
-
-</sect2>
-
-<!--  ~  End section  ~  -->
-
-
-<!--   ~~~~~       New section      ~~~~~     -->
-
-<sect2 id="windows-gui">
-<title>Windows GUI Options</title>
-<para>
- <application>Privoxy</application> has a number of options specific to the
- Windows GUI interface:
-</para>
-
-<anchor id="activity-animation">
-<para>
- If <quote>activity-animation</quote> is set to 1, the
- <application>Privoxy</application> icon will animate when
- <quote>Privoxy</quote> is active. To turn off, set to 0.
-</para>
-
-<para>
- <literal>
-  <msgtext> 
-   <literallayout>
-  <emphasis>activity-animation   1</emphasis>
-   </literallayout>
-  </msgtext> 
- </literal>
-</para>
-
-<anchor id="log-messages">
-<para>
- If <quote>log-messages</quote> is set to 1,
- <application>Privoxy</application> will log messages to the console
- window:
-</para>
-
-<para>
- <literal>
-  <msgtext> 
-   <literallayout>
-  <emphasis>log-messages       1</emphasis>
-   </literallayout>
-  </msgtext> 
- </literal>
-</para>
-
-<anchor id="log-buffer-size">
-<para> 
- If <quote>log-buffer-size</quote> is set to 1, the size of the log buffer,
- i.e. the amount of memory used for the log messages displayed in the
- console window, will be limited to <quote>log-max-lines</quote> (see below).
-</para>
-
-<para>
- Warning: Setting this to 0 will result in the buffer to grow infinitely and
- eat up all your memory!
-</para>
-
-<para>
- <literal>
-  <msgtext> 
-   <literallayout>
-  <emphasis>log-buffer-size      1</emphasis>
-   </literallayout>
-  </msgtext> 
- </literal>
-</para>
-
-<anchor id="log-max-lines">
-<para>
- <application>log-max-lines</application> is the maximum number of lines held
- in the log buffer. See above.
-</para>
-
-<para>
- <literal>
-  <msgtext> 
-   <literallayout>
-  <emphasis>log-max-lines      200</emphasis>
-   </literallayout>
-  </msgtext> 
- </literal>
-</para>
-
-<anchor id="log-highlight-messages">
-<para>
- If <quote>log-highlight-messages</quote> is set to 1,
- <application>Privoxy</application> will highlight portions of the log
- messages with a bold-faced font:
-</para>
-
-<para>
- <literal>
-  <msgtext> 
-   <literallayout>
-  <emphasis>log-highlight-messages   1</emphasis>
-   </literallayout>
-  </msgtext> 
- </literal>
-</para>
-
-<anchor id="log-font-name">
-<para>
- The font used in the console window:
-</para>
-
-<para>
- <literal>
-  <msgtext> 
-   <literallayout>
-  <emphasis>log-font-name        Comic Sans MS</emphasis>
-   </literallayout>
-  </msgtext> 
- </literal>
-</para>
-
-<anchor id="log-font-size">
-<para>
- Font size used in the console window:
-</para>
-
-<para>
- <literal>
-  <msgtext> 
-   <literallayout>
-  <emphasis>log-font-size        8</emphasis>
-   </literallayout>
-  </msgtext> 
- </literal>
-</para>
-
-<anchor id="show-on-task-bar">
-<para>  
- <quote>show-on-task-bar</quote> controls whether or not
- <application>Privoxy</application> will appear as a button on the Task bar
- when minimized:
-</para>
-
-<para>
- <literal>
-  <msgtext> 
-   <literallayout>
-  <emphasis>show-on-task-bar     0</emphasis>
-   </literallayout>
-  </msgtext> 
- </literal>
-</para>
-
-<anchor id="close-button-minimizes">
-<para>
- If <quote>close-button-minimizes</quote> is set to 1, the Windows close
- button will minimize <application>Privoxy</application> instead of closing
- the program (close with the exit option on the File menu).
-</para>
-
-<para>
- <literal>
-  <msgtext> 
-   <literallayout>
-  <emphasis>close-button-minimizes  1</emphasis>
-   </literallayout>
-  </msgtext> 
- </literal>
-</para>
-
-<anchor id="hide-console">
-<para>
- The <quote>hide-console</quote> option is specific to the MS-Win console
- version of <application>Privoxy</application>. If this option is used,
- <application>Privoxy</application> will disconnect from and hide  the
- command console.
-</para>
-
-<para>
- <literal>
-  <msgtext> 
-   <literallayout>
-  #<emphasis>hide-console</emphasis>
-   </literallayout>
-  </msgtext> 
- </literal>
-</para>
+]]>
 
 </sect2>
 </sect1>
+<!--  ~  End section  ~  -->
+
+
+<!--   ~~~~~~~~       New section Header    ~~~~~~~~~     -->
+
+<!-- **************************************************** -->
+<!-- Include config.sgml here -->
+<!-- This is where the entire config file is detailed. -->
+ &config;
+<!-- end include  -->
+
 
 <!--  ~  End section  ~  -->
 
@@ -2662,9 +1444,9 @@ forward-socks4 and forward-socks4a</title>
  <application>Privoxy</application> takes for which URLs, and thus determine
  how ad images, cookies and various other aspects of HTTP content and
  transactions are handled, and on which sites (or even parts thereof). There 
- are three such files included with <application>Privoxy</application> (as of 
- version 2.9.15), with differing purposes:
- </para>
+ are three such files included with <application>Privoxy</application>, with
+ differing purposes: 
+</para>
  
  <para>
   <itemizedlist>
@@ -2675,8 +1457,8 @@ forward-socks4 and forward-socks4a</title>
      provide a base level of functionality for
      <application>Privoxy's</application> array of features. So it is 
      a set of broad rules that should work reasonably well for users everywhere.
-     This is the file that the developers are keeping updated, and making 
-     available to users.
+     This is the file that the developers are keeping updated, and <link
+     linkend="installation-keepupdated">making available to users</link>.
     </para>
    </listitem> 
    <listitem>
@@ -2764,7 +1546,10 @@ forward-socks4 and forward-socks4a</title>
  url="http://config.privoxy.org/show-status">http://config.privoxy.org/show-status</ulink>.
  The editor allows both fine-grained control over every single feature on a
  per-URL basis, and easy choosing from wholesale sets of defaults like
- <quote>Cautious</quote>, <quote>Medium</quote> or <quote>Advanced</quote>.
+ <quote>Cautious</quote>, <quote>Medium</quote> or <quote>Radical</quote>.
+ Warning: the <quote>Radical</quote> setting is not only more aggressive, 
+ but includes settings that are fun and subversive, and which some may find of 
+ dubious merit!
 </para>
 
 <para>
@@ -2779,11 +1564,11 @@ forward-socks4 and forward-socks4a</title>
 <title>How Actions are Applied to URLs</title>
 <para>
  Actions files are divided into sections. There are special sections,
- like the <quote><link linkend="aliases">alias</link></quote> sections which will be discussed later. For now
- let's concentrate on regular sections: They have a heading line (often split
- up to multiple lines for readability) which consist of a list of actions,
- separated by whitespace and enclosed in curly braces. Below that, there
- is a list of URL patterns, each on a separate line.
+ like the <quote><link linkend="aliases">alias</link></quote> sections which will
+ be discussed later. For now let's concentrate on regular sections: They have a
+ heading line (often split up to multiple lines for readability) which consist
+ of a list of actions, separated by whitespace and enclosed in curly braces.
Below that, there is a list of URL patterns, each on a separate line.
 </para>
 
 <para>
@@ -2792,10 +1577,12 @@ forward-socks4 and forward-socks4a</title>
  applicable actions for the URL is incrementally updated, using the heading
  of the section in which the pattern is located. If multiple matches for
  the same URL set the same action differently, the last match wins. If not, 
- the effects are aggregated (e.g. a URL might match both the 
- <ulink url="actions-file.html#HANDLE-AS-IMAGE"><quote>+handle-as-image</quote></ulink>
- and <ulink url="actions-file.html#BLOCK"><quote>+block</quote></ulink> actions).
+ the effects are aggregated. E.g. a URL might match a regular section with 
+ a heading line of <literal>{ 
+ +<link linkend="handle-as-image">handle-as-image</link> }</literal>,
+ then later another one with just <literal>{
+ +<link linkend="block">block</link> }</literal>, resulting
+ in <emphasis>both</emphasis> actions to apply.
 </para>
 
 <para>
@@ -2812,10 +1599,23 @@ forward-socks4 and forward-socks4a</title>
 <!--   ~~~~~       New section      ~~~~~     -->
 <sect2 id="af-patterns">
 <title>Patterns</title>
+<para> 
+ As mentioned, <application>Privoxy</application> uses <quote>patterns</quote>
+ to determine what actions might apply to which sites and pages your browser 
+ attempts to access. These <quote>patterns</quote> use wild card type 
+ <emphasis>pattern</emphasis> matching to achieve a high degree of 
+ flexibility. This allows one expression to be expanded and potentially match
+ against many similar patterns.
+</para>
 <para>
- Generally, a pattern has the form <literal>&lt;domain&gt;/&lt;path&gt;</literal>,
- where both the <literal>&lt;domain&gt;</literal> and <literal>&lt;path&gt;</literal>
- are optional. (This is why the pattern <literal>/</literal> matches all URLs).
+ Generally, a <application>Privoxy</application> pattern has the form
+ <literal>&lt;domain&gt;/&lt;path&gt;</literal>, where both the
+ <literal>&lt;domain&gt;</literal> and <literal>&lt;path&gt;</literal> are
+ optional. (This is why the special <literal>/</literal> pattern matches all
+ URLs). Note that the protocol portion of the URL pattern (e.g.
+ <literal>http://</literal>) should <emphasis>not</emphasis> be included in
+ the pattern. This is assumed already!
 </para>
 
 <variablelist>
@@ -2882,7 +1682,7 @@ forward-socks4 and forward-socks4a</title>
   <listitem>
    <para>
     matches any domain that <emphasis>ENDS</emphasis> in
-    <literal>.example.com</literal>
+    <literal>.example.com</literal> (e.g. <literal>www.example.com</literal>)
    </para>
   </listitem>
  </varlistentry>
@@ -2984,12 +1784,10 @@ forward-socks4 and forward-socks4a</title>
 </para>
 
 <para>
- Please also note that matching in the path is case
- <emphasis>INSENSITIVE</emphasis> by default, but you can switch to case
- sensitive at any point in the pattern by using the 
- <quote>(?-i)</quote> switch:
- <literal>www.example.com/(?-i)PaTtErN.*</literal> will match only
- documents whose path starts with <literal>PaTtErN</literal> in
+ Please also note that matching in the path is <emphasis>CASE INSENSITIVE</emphasis>
+ by default, but you can switch to case sensitive at any point in the pattern by using the 
+ <quote>(?-i)</quote> switch: <literal>www.example.com/(?-i)PaTtErN.*</literal> will match
+ only documents whose path starts with <literal>PaTtErN</literal> in
  <emphasis>exactly</emphasis> this capitalization.
 </para>
 </sect3>
@@ -3126,7 +1924,7 @@ forward-socks4 and forward-socks4a</title>
 <!--   ~~~~~       New section      ~~~~~     -->
 
 <sect3 renderas="sect4" id="add-header">
-<title><emphasis>add-header</emphasis></title>
+<title>add-header</title>
 
 <variablelist>
  <varlistentry>
@@ -3190,7 +1988,7 @@ forward-socks4 and forward-socks4a</title>
 
 <!--   ~~~~~       New section      ~~~~~     -->
 <sect3 renderas="sect4" id="block">
-<title><emphasis>block</emphasis></title>
+<title>block</title>
 
 <variablelist>
  <varlistentry>
@@ -3284,7 +2082,7 @@ forward-socks4 and forward-socks4a</title>
 
 <!--   ~~~~~       New section      ~~~~~     -->
 <sect3 renderas="sect4" id="crunch-incoming-cookies">
-<title><emphasis>crunch-incoming-cookies</emphasis></title>
+<title>crunch-incoming-cookies</title>
 
 <variablelist>
  <varlistentry>
@@ -3334,7 +2132,8 @@ forward-socks4 and forward-socks4a</title>
    <para>
     It makes <emphasis>no sense at all</emphasis> to use this action in conjunction
     with the <literal><link linkend="session-cookies-only">session-cookies-only</link></literal> action,
-    since it would prevent the session cookies from being set.
+    since it would prevent the session cookies from being set. See also 
+    <literal><link linkend="filter-content-cookies">filter-content-cookies</link></literal>.
    </para>
   </listitem>
  </varlistentry>
@@ -3353,7 +2152,7 @@ forward-socks4 and forward-socks4a</title>
 
 <!--   ~~~~~       New section      ~~~~~     -->
 <sect3 renderas="sect4" id="crunch-outgoing-cookies">
-<title><emphasis>crunch-outgoing-cookies</emphasis></title>
+<title>crunch-outgoing-cookies</title>
 
 <variablelist>
  <varlistentry>
@@ -3423,7 +2222,7 @@ forward-socks4 and forward-socks4a</title>
 
 <!--   ~~~~~       New section      ~~~~~     -->
 <sect3 renderas="sect4" id="deanimate-gifs">
-<title><emphasis>deanimate-gifs</emphasis></title>
+<title>deanimate-gifs</title>
 
 <variablelist>
  <varlistentry>
@@ -3491,7 +2290,7 @@ forward-socks4 and forward-socks4a</title>
 
 <!--   ~~~~~       New section      ~~~~~     -->
 <sect3 renderas="sect4" id="downgrade-http-version">
-<title><emphasis>downgrade-http-version</emphasis></title>
+<title>downgrade-http-version</title>
 
 <variablelist>
  <varlistentry>
@@ -3555,7 +2354,7 @@ problem-host.example.com</screen>
 
 <!--   ~~~~~       New section      ~~~~~     -->
 <sect3 renderas="sect4" id="fast-redirects">
-<title><emphasis>fast-redirects</emphasis></title>
+<title>fast-redirects</title>
 
 <variablelist>
  <varlistentry>
@@ -3634,7 +2433,7 @@ problem-host.example.com</screen>
 
 <!--   ~~~~~       New section      ~~~~~     -->
 <sect3 renderas="sect4" id="filter">
-<title><emphasis>filter</emphasis></title>
+<title>filter</title>
 
 <variablelist>
  <varlistentry>
@@ -3648,8 +2447,9 @@ problem-host.example.com</screen>
   <term>Effect:</term>
   <listitem>
    <para>
-    Text documents, including HTML and JavaScript, to which this action applies, are filtered on-the-fly
-    through the specified regular expression based substitutions.    
+    Text documents, including HTML and JavaScript, to which this action
+    applies, are filtered on-the-fly through the specified regular expression
+    based substitutions.
    </para>
   </listitem>
  </varlistentry>
@@ -3669,7 +2469,8 @@ problem-host.example.com</screen>
     The name of a filter, as defined in the <link linkend="filter-file">filter file</link>
     (typically <filename>default.filter</filename>, set by the
     <literal><link linkend="filterfile">filterfile</link></literal>
-    option in the <link linkend="config">config file</link>)
+    option in the <link linkend="config">config file</link>). Filtering 
+    can be completely disabled without the use of parameters.
    </para>
   </listitem>
  </varlistentry>
@@ -3678,8 +2479,8 @@ problem-host.example.com</screen>
   <term>Notes:</term>
   <listitem>
    <para>
-    For your convenience, there are a bunch of pre-defined filters available 
-    in the distribution filter file that you can use. See the example below for
+    For your convenience, there are a number of pre-defined filters available 
+    in the distribution filter file that you can use. See the examples below for
     a list.
    </para>
    <para>
@@ -3693,6 +2494,18 @@ problem-host.example.com</screen>
     since the page is not incrementally displayed.) This effect will be more
     noticeable on slower connections.
    </para>
+   <para>
+    The amount of data that can be filtered is limited to the 
+    <literal><link linkend="buffer-limit">buffer-limit</link></literal>
+    option in the main <link linkend="config">config file</link>. The 
+    default is 4096 KB (4 Megs). Once this limit is exceeded, the buffered
+    data, and all pending data, is passed through unfiltered. 
+   </para>
+   <para>
+    Inappropriate MIME types, such as zipped files, are not filtered at all.
+    Encrypted SSL data (from HTTPS servers) cannot be filtered either since
+    this would violate the integrity of the secure transaction.
+   </para>
    <para>
     At this time, <application>Privoxy</application> cannot (yet!) uncompress compressed
     documents. If you want filtering to work on all documents, even those that
@@ -3701,13 +2514,16 @@ problem-host.example.com</screen>
     action in conjunction with <literal>filter</literal>.
    </para>
    <para>
-    Filtering can achieve some of the effects as the 
+    Filtering can achieve some of the same effects as the 
     <literal><link linkend="block">block</link></literal>
-    action, i.e. it can be used to block ads and banners. 
+    action, i.e. it can be used to block ads and banners. But the mechanism 
+    works quite differently. One effective use, is to block ad banners 
+    based on their size (see below), since many of these seem to be somewhat 
+    standardized.
    </para>
    <para>
-    <link linkend="contact">Feedback</link> with suggestions for new or improved filters is particularly
-    welcome!
+    <link linkend="contact">Feedback</link> with suggestions for new or
+    improved filters is particularly welcome!
    </para>
   </listitem>
  </varlistentry>
@@ -3725,7 +2541,15 @@ problem-host.example.com</screen>
    </para>
    <para>
     <anchor id="filter-banners-by-size">
-    <screen>+filter{banners-by-size}     # Kill banners by size (<emphasis>very</emphasis> efficient!)</screen>
+    <screen>+filter{banners-by-size}     # Kill banners based on their size for this page (<emphasis>very</emphasis> efficient!)</screen>
+   </para>
+   <para>
+    <anchor id="filter-banners-by-link">
+    <screen>+filter{banners-by-link}     # Kill banners based on the link they are contained in (experimental)</screen>
+   </para>
+   <para>
+    <anchor id="filter-img-reorder">
+    <screen>+filter{img-reorder}         # Reorder attributes in &lt;img&gt; tags to make the banners-by-* filters more effective</screen>
    </para>
    <para>
     <anchor id="filter-content-cookies">
@@ -3763,6 +2587,14 @@ problem-host.example.com</screen>
     <anchor id="filter-crude-parental">
     <screen>+filter{crude-parental}      # Kill all web pages that contain the words "sex" or "warez"</screen>
    </para>
+   <para>
+    <anchor id="filter-js-events">
+    <screen>+filter{js-events}           # Kill all JS event bindings (<emphasis>Radically destructive!</emphasis> Only for extra nasty sites) </screen>
+   </para>
+   <para>
+    <anchor id="filter-demoronizer">
+    <screen>+filter{demoronizer}         # Fix non-standard MS font extensions for non-MS browsers</screen>
+   </para>
   </listitem>
  </varlistentry>
 </variablelist>
@@ -3771,7 +2603,7 @@ problem-host.example.com</screen>
 
 <!--   ~~~~~       New section      ~~~~~     -->
 <sect3 renderas="sect4" id="handle-as-image">
-<title><emphasis>handle-as-image</emphasis></title>
+<title>handle-as-image</title>
 
 <variablelist>
  <varlistentry>
@@ -3826,7 +2658,7 @@ problem-host.example.com</screen>
     reflect the file type, like in the second example section.
    </para>
    <para>
-    Note that you cannot treat HTML pages as images in most cases. For instance, (inline) ad
+    Note that you cannot treat HTML pages as images in most cases. For instance, (in-line) ad
     frames require an HTML page to be sent, or they won't display properly.
     Forcing <literal>handle-as-image</literal> in this situation will not replace the
     ad frame with an image, but lead to error messages.
@@ -3861,7 +2693,7 @@ ad.doubleclick.net
 
 <!--   ~~~~~       New section      ~~~~~     -->
 <sect3 renderas="sect4" id="hide-forwarded-for-headers">
-<title><emphasis>hide-forwarded-for-headers</emphasis></title>
+<title>hide-forwarded-for-headers</title>
 
 <variablelist>
  <varlistentry>
@@ -3927,7 +2759,7 @@ ad.doubleclick.net
 
 <!--   ~~~~~       New section      ~~~~~     -->
 <sect3 renderas="sect4" id="hide-from-header">
-<title><emphasis>hide-from-header</emphasis></title>
+<title>hide-from-header</title>
 
 <variablelist>
  <varlistentry>
@@ -3999,7 +2831,7 @@ ad.doubleclick.net
 
 <!--   ~~~~~       New section      ~~~~~     -->
 <sect3 renderas="sect4" id="hide-referrer">
-<title><emphasis>hide-referrer</emphasis></title>
+<title>hide-referrer</title>
 <anchor id="hide-referer">
 <variablelist>
  <varlistentry>
@@ -4078,7 +2910,7 @@ ad.doubleclick.net
 
 <!--   ~~~~~       New section      ~~~~~     -->
 <sect3 renderas="sect4" id="hide-user-agent">
-<title><emphasis>hide-user-agent</emphasis></title>
+<title>hide-user-agent</title>
 
 <variablelist>
  <varlistentry>
@@ -4160,7 +2992,7 @@ ad.doubleclick.net
 
 <!--   ~~~~~       New section      ~~~~~     -->
 <sect3 renderas="sect4" id="kill-popups">
-<title><emphasis>kill-popups<anchor id="kill-popup"></emphasis></title>
+<title>kill-popups<anchor id="kill-popup"></title>
 
 <variablelist>
  <varlistentry>
@@ -4215,7 +3047,7 @@ ad.doubleclick.net
     sense to combine it with any <literal><link linkend="filter">filter</link></literal> action,
     since as soon as one <literal><link linkend="filter">filter</link></literal> applies,
     the whole document needs to be buffered anyway, which destroys the advantage of
-    the <literal>kill-popups</literal> action over it's filter equivalent.
+    the <literal>kill-popups</literal> action over its filter equivalent.
    </para>
    <para>
     Killing all pop-ups is a dangerous business. Many shops and banks rely on
@@ -4250,7 +3082,7 @@ ad.doubleclick.net
 
 <!--   ~~~~~       New section      ~~~~~     -->
 <sect3 renderas="sect4" id="limit-connect">
-<title><emphasis>limit-connect</emphasis></title>
+<title>limit-connect</title>
 
 <variablelist>
  <varlistentry>
@@ -4331,7 +3163,7 @@ ad.doubleclick.net
 
 <!--   ~~~~~       New section      ~~~~~     -->
 <sect3 renderas="sect4" id="prevent-compression">
-<title><emphasis>prevent-compression</emphasis></title>
+<title>prevent-compression</title>
 
 <variablelist>
  <varlistentry>
@@ -4420,7 +3252,7 @@ www.pclinuxonline.com</screen>
 
 <!--   ~~~~~       New section      ~~~~~     -->
 <sect3 renderas="sect4" id="send-vanilla-wafer">
-<title><emphasis>send-vanilla-wafer</emphasis></title>
+<title>send-vanilla-wafer</title>
 
 <variablelist>
  <varlistentry>
@@ -4486,7 +3318,7 @@ www.pclinuxonline.com</screen>
 
 <!--   ~~~~~       New section      ~~~~~     -->
 <sect3 renderas="sect4" id="send-wafer">
-<title><emphasis>send-wafer</emphasis></title>
+<title>send-wafer</title>
 
 <variablelist>
  <varlistentry>
@@ -4552,7 +3384,7 @@ my-internal-testing-server.void</screen>
 
 <!--   ~~~~~       New section      ~~~~~     -->
 <sect3 renderas="sect4" id="session-cookies-only">
-<title><emphasis>session-cookies-only</emphasis></title>
+<title>session-cookies-only</title>
 
 <variablelist>
  <varlistentry>
@@ -4616,6 +3448,17 @@ my-internal-testing-server.void</screen>
     Note that it is up to the browser how it handles such cookies without an <quote>expires</quote>
     field. If you use an exotic browser, you might want to try it out to be sure.
    </para>
+   <para>
+    This setting also has no effect on cookies that may have been stored
+    previously by the browser before starting <application>Privoxy</application>.
+    These would have to be removed manually.
+   </para>
+   <para>
+     <application>Privoxy</application> also uses  
+     the <link linkend="filter-content-cookies">content-cookies filter</link> 
+     to block some types of cookies. Content cookies are not effected by 
+     <literal>session-cookies-only</literal>.
+   </para>
   </listitem>
  </varlistentry>
 
@@ -4633,7 +3476,7 @@ my-internal-testing-server.void</screen>
 
 <!--   ~~~~~       New section      ~~~~~     -->
 <sect3 renderas="sect4" id="set-image-blocker">
-<title><emphasis>set-image-blocker</emphasis></title>
+<title>set-image-blocker</title>
 
 <variablelist>
  <varlistentry>
@@ -4874,7 +3717,7 @@ my-internal-testing-server.void</screen>
 
 <!--   ~~~~~       New section      ~~~~~     -->
 <sect2 id="act-examples">
-<title>Sample Actions Files</title>
+<title>Actions Files Tutorial</title>
 <para>
  The above chapters have shown <link linkend="actions-file">which actions files
  there are and how they are organized</link>, how actions are <link
@@ -4888,7 +3731,7 @@ my-internal-testing-server.void</screen>
 <sect3><title>default.action</title>
 
 <para>
-Every config file should start with a short comment stating it's purpose:
+Every config file should start with a short comment stating its purpose:
 </para>
 
 <para>
@@ -4949,7 +3792,7 @@ shop        = mercy-for-cookies -filter{popups} -kill-popups</screen>
 <para>
  The first regular section is probably the most important. It has only
  one pattern, <quote><literal>/</literal></quote>, but this pattern
- <link linkend="af-patterns">matches all URLs.</link>. Therefore, the
+ <link linkend="af-patterns">matches all URLs</link>. Therefore, the
  set of actions used in this <quote>default</quote> section <emphasis>will
  be applied to all requests as a start</emphasis>. It can  be partly or
  wholly overridden by later matches further down this file, or in user.action,
@@ -4960,7 +3803,7 @@ shop        = mercy-for-cookies -filter{popups} -kill-popups</screen>
 <para>
  Again, at the start of matching, all actions are disabled, so there is
  no real need to disable any actions here, but we will do that nonetheless,
- to have a complete listing for your reference. (Remember: A <quote>+</quote>
+ to have a complete listing for your reference. (Remember: a <quote>+</quote>
  preceding the action name enables the action, a <quote>-</quote> disables!).
  Also note how this long line has been made more readable by splitting it into
  multiple lines with line continuation.
@@ -4988,8 +3831,11 @@ shop        = mercy-for-cookies -filter{popups} -kill-popups</screen>
  -<link linkend="FILTER-FUN">filter{fun}</link> \
  +<link linkend="FILTER-NIMDA">filter{nimda}</link> \
  +<link linkend="FILTER-BANNERS-BY-SIZE">filter{banners-by-size}</link> \
+ -<link linkend="FILTER-BANNERS-BY-LINK">filter{banners-by-link}</link> \
+ -<link linkend="FILTER-IMG-REORDER">filter{img-reorder}</link> \
  -<link linkend="FILTER-SHOCKWAVE-FLASH">filter{shockwave-flash}</link> \
  -<link linkend="FILTER-CRUDE-PARENTAL">filter{crude-parental}</link> \
+ -<link linkend="FILTER-JS-EVENTS">filter{js-events}</link> \
  -<link linkend="HANDLE-AS-IMAGE">handle-as-image</link> \
  +<link linkend="HIDE-FORWARDED-FOR-HEADERS">hide-forwarded-for-headers</link> \
  +<link linkend="HIDE-FROM-HEADER">hide-from-header{block}</link> \
@@ -5229,9 +4075,9 @@ count*.
 # 
 { -<link linkend="BLOCK">block</link> }
 adv[io]*.  # (for advogato.org and advice.*)
-adsl.  
+adsl.      # (has nothing to do with ads)
 ad[ud]*.   # (adult.* and add.*)
-.edu       # Universities
+.edu       # (universities don't host banners (yet!))
 .*loads.   # (downloads, uploads etc)
 
 # By path:
@@ -5269,11 +4115,10 @@ www.ugu.com/sui/ugu/adv</screen>
 </sect3>
 
 <sect3><title>user.action</title>
-
 <para>
  So far we are painting with a broad brush by setting general policies,
  which would be a reasonable starting point for many people. Now, 
- you'd maybe want to be more specific and have customized rules that
+ you might want to be more specific and have customized rules that
  are more suitable to your personal habits and preferences. These would
  be for narrowly defined situations like your ISP or your bank, and should
  be placed in <filename>user.action</filename>, which is parsed after all other 
@@ -5306,27 +4151,46 @@ www.ugu.com/sui/ugu/adv</screen>
 
 <para>
  <screen>
+# Aliases are local to the file they are defined in.
 # (Re-)define aliases for this file:
 #
 {{alias}}
+# 
+# These aliases just save typing later, and the alias names should 
+# be self explanatory.
+#
++crunch-all-cookies = +crunch-incoming-cookies +crunch-outgoing-cookies
 -crunch-all-cookies = -crunch-incoming-cookies -crunch-outgoing-cookies
-mercy-for-cookies   = -crunch-all-cookies -session-cookies-only
+ allow-all-cookies  = -crunch-all-cookies -session-cookies-only
+ allow-popups       = -filter{popups} -kill-popups
++block-as-image     = +block +handle-as-image
+-block-as-image     = -block
+
+# These aliases define combinations of actions that are useful for
+# certain types of sites:
+#
 fragile     = -block -crunch-all-cookies -filter -fast-redirects -hide-referer -kill-popups
-shop        = mercy-for-cookies -filter{popups} -kill-popups</screen>
+shop        = -crunch-all-cookies allow-popups
+
+# Allow ads for selected useful free sites:
+#
+allow-ads   = -block -filter{banners-by-size} -filter{banners-by-link}</screen>
+
 </para>
 
 <para>
  Say you have accounts on some sites that you visit regularly, and
  you don't want to have to log in manually each time. So you'd like
  to allow persistent cookies for these sites. The
- <literal>mercy-for-cookies</literal> alias defined above does exactly
- that, i.e. it disables crunching of cookies in any direction, and
- processing of cookies to make them temporary.
+ <literal>allow-all-cookies</literal> alias defined above does exactly
+ that, i.e. it disables crunching of cookies in any direction, and the 
+ processing of cookies to make them only temporary.
 </para>
 
 <para>
  <screen>
-{ mercy-for-cookies }
+{ allow-all-cookies }
 sunsolve.sun.com
 slashdot.org
 .yahoo.com
@@ -5346,34 +4210,76 @@ slashdot.org
 </para>
 
 <para>
- While browsing the web with <application>Privoxy</application> you
- noticed some ads that sneaked through, but you were too lazy to
- report them through our fine and easy <link linkend="contact">feedback</link>
- system, so you have added them here:
+ Some hosts and some file types you may not want to filter.
+ <application>Privoxy</application> makes no distinctions between regular web
+ pages and downloads done via your web browser if it is an html or text type
+ document.
+</para>
+
+<para>
+ <screen>
+{ -<link linkend="FILTER">filter</link> }
+localhost
+apache_server.mylan
+
+# A list of common file extensions that are likely to indicate raw text, and best
+# if unfiltered.
+/(.*/)?.*\.(pl|(s|p)?h|c(c|xx|pp)?|tcl|am|init?|cfg?|conf(ig)?|txt|rc|bat)$
+
+# Documentation should not need filtering (at least on some sites).
+.tldp.org</screen>
+</para>
+
+<para>
+ Example of a simple <link linkend="BLOCK">block</link> action. Say you've
+ seen an ad on your favourite page on example.com that you want to get rid of.
+ You have right-clicked the image, selected <quote>copy image location</quote>
+ and pasted the URL below while removing the leading http://, into a 
+ <literal>{ +block }</literal> section. Note that <literal>{ +handle-as-image
+ }</literal> need not be specified, since all URLs ending in
+ <literal>.gif</literal> will be tagged as images by the general rules as set
+ in default.action anyway:
 </para>
 
 <para>
  <screen>
 { +<link linkend="BLOCK">block</link> }
-www.a-popular-site.com/some/unobvious/path
-another.popular.site.net/more/junk/here/</screen>
+www.example.com/nasty-ads/sponsor.gif
+another.popular.site.net/more/junk/here/
+
+#  Here we found one that is not in <application>Privoxy's</application> default blocked list:
+.adfactory.net</screen>
 </para>
 
 <para>
- Note that, assuming the banners in the above example have regular image
- extensions (most do),
- <literal>+<link linkend="HANDLE-AS-IMAGE">handle-as-image</link></literal>
- need not be specified, since all URLs ending in these extensions will
- already have been tagged as images in the relevant section of 
- <filename>default.action</filename> by now.
+ To force URLs that tend to have ad images, but it is difficult for
+ <application>Privoxy</application> to know this since the ultimate returned
+ object is obscured for one reason or another, we can try to force these to be
+ treated as images (and thus avoid <application>Privoxy's</application>
+ <quote>BLOCKED</quote> banner page). Note that if what is returned by the
+ server turns out NOT to be an image, then your browser typically will display
+ a broken icon image. Use cautiously.
+</para>
+
+<para>
+ <screen>
+{ +block-as-image }
+# A shockwave ad, very annoying.
+.trip.com/.*\.swf
+.doubleclick.net
+/Realmedia/ads/
+adremote.</screen>
 </para>
 
 <para>
Then you noticed that the default configuration breaks Forbes Magazine,
Now you noticed that the default configuration breaks Forbes Magazine,
  but you were too lazy to find out which action is the culprit, and you
  were again too lazy to give <link linkend="contact">feedback</link>, so
  you just used the <literal>fragile</literal> alias on the site, and
- -- whoa! -- it worked:
+ -- <emphasis>whoa!</emphasis> -- it worked. The <literal>fragile</literal>
+ aliases disables those actions that are most likely to break a site. Also,
+ good for testing purposes to see if it is <application>Privoxy</application>
+ that is causing the problem or not.
 </para>
 
 <para>
@@ -5401,7 +4307,44 @@ another.popular.site.net/more/junk/here/</screen>
  really shouldn't be filtered, like code on CVS->Web interfaces. Since
  <filename>user.action</filename> has the last word, these exceptions
  won't be valid for the <quote>fun</quote> filtering specified here.
- But you're the boss.
+</para>
+
+<para>
+ You might also worry about how your favourite free websites are
+ funded, and find that they rely on displaying banner advertisements
+ to survive. So you might want to specifically allow banners for those
+ sites that you feel provide value to you:
+</para>
+
+<para>
+<screen>
+{ allow-ads }
+.sourceforge.net
+.slashdot.org
+.osdn.net</screen>   
+</para>
+
+<para>
+ Note that <literal>allow-ads</literal> has been aliased to 
+ <literal>-<link linkend="block">block</link></literal>, 
+ <literal>-<link linkend="filter-banners-by-size">filter{banners-by-size}</link></literal>, and 
+ <literal>-<link linkend="filter-banners-by-link">filter{banners-by-link}</link></literal> above.
+</para>
+
+<para>
+ <filename>user.action</filename> is generally the best place to define
+ exceptions and additions to the default policies of
+ <filename>default.action</filename>. Some actions are safe to have their
+ default policies set here though. So let's set a default policy to have a
+ <quote>blank</quote> image as opposed to the checkerboard pattern for
+ <emphasis>ALL</emphasis> sites. <quote>/</quote> of course matches all URL
+ paths and patterns:
+</para>
+
+<para>
+<screen>
+{ +<link linkend="set-image-blocker">set-image-blocker{blank}</link> }
+/ # ALL sites</screen>
 </para>
 
 </sect3>
@@ -5417,129 +4360,315 @@ another.popular.site.net/more/junk/here/</screen>
 
 <sect1 id="filter-file">
 <title>The Filter File</title>
+
 <para>
- Any web page can be dynamically modified with the filter file. This
- modification can be removal, or re-writing, of any web page content,
- including tags and non-visible content. The default filter file is
- oddly enough <filename>default.filter</filename>, located in the config
- directory. 
+ All text substitutions that can be invoked through the
+ <literal><link linkend="filter">filter</link></literal> action
+ must first be defined in the filter file, which is typically
+ called <filename>default.filter</filename> and which can be
+ selected through the <literal>
+ <link linkend="filterfile">filterfile</link></literal> config
+ option.
 </para>
 
 <para>
- This is potentially a very powerful feature, and requires knowledge of both 
- <quote>regular expression</quote> and HTML in order create custom 
- filters. But, there are a number of useful filters included with 
- <application>Privoxy</application> for many common situations.
+ Typical reasons for doing such substitutions are to eliminate
+ common annoyances in HTML and JavaScript, such as pop-up windows,
+ exit consoles, crippled windows without navigation tools, the
+ infamous &lt;BLINK&gt; tag etc, to suppress images with certain
+ width and height attributes (standard banner sizes or web-bugs),
+ or just to have fun. The possibilities are endless.
 </para>
 
 <para>
- The included example file is divided into sections. Each section begins 
- with the <literal>FILTER</literal> keyword, followed by the identifier 
- for that section, e.g. <quote>FILTER: webbugs</quote>. Each section performs
- a similar type of filtering, such as <quote>html-annoyances</quote>.
+ Filtering works on any text-based document type, including plain
+ text, HTML, JavaScript, CSS etc. (all <literal>text/*</literal>
+ MIME types). Substitutions are made at the source level, so if
+ you want to <quote>roll your own</quote> filters, you should be
+ familiar with HTML syntax.
 </para>
 
 <para>
- This file uses regular expressions to alter or remove any string in the
- target page. The expressions can only operate on one line at a time. Some
- examples from the included default <filename>default.filter</filename>:
+ Just like the <link linkend="actions-file">actions files</link>, the
+ filter file is organized in sections, which are called <emphasis>filters</emphasis>
+ here. Each filter consists of a heading line, that starts with the
+ <emphasis>keyword</emphasis> <literal>FILTER:</literal>, followed by
+ the filter's <emphasis>name</emphasis>, and a short (one line) 
+ <emphasis>description</emphasis> of what it does. Below that line
+ come the <emphasis>jobs</emphasis>, i.e. lines that define the actual
+ text substitutions. By convention, the name of a filter
+ should describe what the filter <emphasis>eliminates</emphasis>. The
+ comment is used in the <ulink url="http://config.privoxy.org/">web-based
+ user interface</ulink>.
 </para>
 
 <para>
- Stop web pages from displaying annoying messages in the status bar by
- deleting such references:
+ Once a filter called <replaceable>name</replaceable> has been defined
+ in the filter file, it can be invoked by using an action of the form
+ +<literal><link linkend="filter">filter</link>{<replaceable>name</replaceable>}</literal>
+ in any <link linkend="actions-file">actions file</link>.
+</para>
+<para>
+ A filter header line for a filter called <quote>foo</quote> could look
+ like this:
 </para>
 
 <para>
- <literal>
-  <msgtext> 
-   <literallayout>
- FILTER: html-annoyances
+ <screen>FILTER: foo Replace all "foo" with "bar"</screen>
+</para>
 
- # New browser windows should be resizeable and have a location and status
- # bar. Make it so.
- #
- s/resizable="?(no|0)"?/resizable=1/ig s/noresize/yesresize/ig
- s/location="?(no|0)"?/location=1/ig s/status="?(no|0)"?/status=1/ig
- s/scrolling="?(no|0|Auto)"?/scrolling=1/ig
- s/menubar="?(no|0)"?/menubar=1/ig 
+<para>
+ Below that line, and up to the next header line, come the jobs that
+ define what text replacements the filter executes. They are specified
+ in a syntax that imitates <ulink url="http://www.perl.org/">Perl</ulink>'s
+ <literal>s///</literal> operator. If you are familiar with Perl, you
+ will find this to be quite intuitive, and may want to look at the
+ <ulink url="http://www.oesterhelt.org/pcrs/pcrs.3.html">PCRS man page</ulink>
+ for the subtle differences to Perl behaviour. Most notably, the non-standard
+ option letter <literal>U</literal> is supported, which turns the default
+ to ungreedy matching.
+</para>
 
- # The &lt;BLINK&gt; tag was a crime!
- #
- s*&lt;blink&gt;|&lt;/blink&gt;**ig
+<para>
+ If you are new to regular expressions, you might want to take a look at
+ the <link linkend="regex">Appendix on regular expressions</link>, and
+ see the <ulink url="http://perldoc.com/perl5.6.1/pod/perl.html">Perl
+ manual</ulink> for
+ <ulink url="http://perldoc.com/perl5.6.1/pod/perlop.html#s-PATTERN-REPLACEMENT-egimosx">the 
+ <literal>s///</literal> operator's syntax</ulink> and <ulink
+ url="http://perldoc.com/perl5.6.1/pod/perlre.html">Perl-style regular
+ expressions</ulink> in general.
+ The below examples might also help to get you started.
+</para>
 
- # Is this evil? 
- #
- #s/framespacing="?(no|0)"?//ig
- #s/margin(height|width)=[0-9]*//gi
-   </literallayout>
-  </msgtext> 
- </literal>
+<!--   ~~~~~~~~       New section Header    ~~~~~~~~~     -->
+
+<sect2><title>Filter File Tutorial</title>
+<para>
+ Now, let's complete our <quote>foo</quote> filter. We have already defined
+ the heading, but the jobs are still missing. Since all it does is to replace
+ <quote>foo</quote> with <quote>bar</quote>, there is only one (trivial) job
+ needed:
 </para>
 
 <para>
- Just for kicks, replace any occurrence of <quote>Microsoft</quote> with
- <quote>MicroSuck</quote>, and have a little fun with topical buzzwords: 
+ <screen>s/foo/bar/</screen>
 </para>
 
 <para>
- <literal>
-  <msgtext> 
-   <literallayout>
- FILTER: fun
+ But wait! Didn't the comment say that <emphasis>all</emphasis> occurrences
+ of <quote>foo</quote> should be replaced? Our current job will only take
+ care of the first <quote>foo</quote> on each page. For global substitution,
+ we'll need to add the <literal>g</literal> option:
+</para>
 
- s/microsoft(?!.com)/MicroSuck/ig
+<para>
+ <screen>s/foo/bar/g</screen>
+</para>
 
- # Buzzword Bingo:
- #
- s/industry-leading|cutting-edge|award-winning/&lt;font color=red&gt;&lt;b&gt;BINGO!&lt;/b&gt;&lt;/font&gt;/ig
-   </literallayout>
-  </msgtext> 
- </literal>
+<para>
+ Our complete filter now looks like this:
+</para>
+<para>
+ <screen>FILTER: foo Replace all "foo" with "bar"
+s/foo/bar/g</screen>
+</para>
+
+<para>
+ Let's look at some real filters for more interesting examples. Here you see
+ a filter that protects against some common annoyances that arise from JavaScript
+ abuse. Let's look at its jobs one after the other:
 </para>
 
+
 <para>
- Kill those pesky little web-bugs:
+ <screen>
+FILTER: js-annoyances Get rid of particularly annoying JavaScript abuse
+
+# Get rid of JavaScript referrer tracking. Test page: http://www.randomoddness.com/untitled.htm
+#
+s|(&lt;script.*)document\.referrer(.*&lt;/script&gt;)|$1"Not Your Business!"$2|Usg</screen>
 </para>
 
 <para>
- <literal>
-  <msgtext> 
-   <literallayout>
- # webbugs: Squish WebBugs (1x1 invisible GIFs used for user tracking)
- FILTER: webbugs
+ Following the header line and a comment, you see the job. Note that it uses
+ <literal>|</literal> as the delimiter instead of <literal>/</literal>, because
+ the pattern contains a forward slash, which would otherwise have to be escaped
+ by a backslash (<literal>\</literal>).
+</para>
 
- s/&lt;img\s+[^&gt;]*?(width|height)\s*=\s*['"]?1\D[^&gt;]*?(width|height)\s*=\s*['"]?1(\D[^&gt;]*?)?>/&lt;!-- Squished WebBug --&gt;/sig
-   </literallayout>
-  </msgtext> 
- </literal>
+<para>
+ Now, let's examine the pattern: it starts with the text <literal>&lt;script.*</literal>
+ enclosed in parentheses. Since the dot matches any character, and <literal>*</literal>
+ means: <quote>Match an arbitrary number of the element left of myself</quote>, this
+ matches <quote>&lt;script</quote>, followed by <emphasis>any</emphasis> text, i.e.
+ it matches the whole page, from the start of the first &lt;script&gt; tag.
 </para>
 
+<para>
+ That's more than we want, but the pattern continues: <literal>document\.referrer</literal>
+ matches only the exact string <quote>document.referrer</quote>. The dot needed to
+ be <emphasis>escaped</emphasis>, i.e. preceded by a backslash, to take away its
+ special meaning as a joker, and make it just a regular dot. So far, the meaning is:
+ Match from the start of the first &lt;script&gt; tag in a the page, up to, and including,
+ the text <quote>document.referrer</quote>, if <emphasis>both</emphasis> are present
+ in the page (and appear in that order).
+</para>
 
-<!--   ~~~~~       New section      ~~~~~     -->
-<sect2>
-<title>The <emphasis>+filter</emphasis> Action</title>
 <para>
- Filters are enabled with the <link
- linkend="FILTER"><quote>+filter</quote></link> action from within 
- one of the actions files. <quote>+filter</quote> requires one parameter, which 
- should match one of the section identifiers in the filter file itself. Example:
+ But there's still more pattern to go. The next element, again enclosed in parentheses,
+ is <literal>.*&lt;/script&gt;</literal>. You already know what <literal>.*</literal>
+ means, so the whole pattern translates to: Match from the start of the first  &lt;script&gt;
+ tag in a page to the end of the last &lt;script&gt; tag, provided that the text
+ <quote>document.referrer</quote> appears somewhere in between.
 </para>
 
-<screen>
-  +filter{html-annoyances}
-</screen>
+<para>
+ This is still not the whole story, since we have ignored the options and the parentheses:
+ The portions of the page matched by sub-patterns that are enclosed in parentheses, will be
+ remembered and be available through the variables <literal>$1, $2, ...</literal> in
+ the substitute. The <literal>U</literal> option switches to ungreedy matching, which means
+ that the first <literal>.*</literal> in the pattern will only <quote>eat up</quote> all
+ text in between <quote>&lt;script</quote> and the <emphasis>first</emphasis> occurrence
+ of <quote>document.referrer</quote>, and that the second <literal>.*</literal> will
+ only span the text up to the <emphasis>first</emphasis> <quote>&lt;/script&gt;</quote>
+ tag. Furthermore, the <literal>s</literal> option says that the match may span
+ multiple lines in the page, and the <literal>g</literal> option again means that the
+ substitution is global.
+</para>
 
 <para>
- This would activate that particular filter. Similarly, <quote>+filter</quote>
- can be turned off for selected sites as:
- <quote>-filter{<replaceable>html-annoyances</replaceable>}</quote>. Remember
- too, all actions are off by default, unless they are explicitly enabled in one
of the actions files.
+ So, to summarize, the pattern means: Match all scripts that contain the text
+ <quote>document.referrer</quote>. Remember the parts of the script from
+ (and including) the start tag up to (and excluding) the string
+ <quote>document.referrer</quote> as <literal>$1</literal>, and the part following
that string, up to and including the closing tag, as <literal>$2</literal>.
 </para>
 
-</sect2>
+<para>
+ Now the pattern is deciphered, but wasn't this about substituting things? So
+ lets look at the substitute: <literal>$1"Not Your Business!"$2</literal> is
+ easy to read: The text remembered as <literal>$1</literal>, followed by 
+ <literal>"Not Your Business!"</literal> (<emphasis>including</emphasis>
+ the quotation marks!), followed by the text remembered as <literal>$2</literal>.
+ This produces an exact copy of the original string, with the middle part
+ (the <quote>document.referrer</quote>) replaced by <literal>"Not Your
+ Business!"</literal>.
+</para>
+
+<para>
+ The whole job now reads: Replace <quote>document.referrer</quote> by
+ <literal>"Not Your Business!"</literal> wherever it appears inside a
+ &lt;script&gt tag. Note that this job won't break JavaScript syntax,
+ since both the original and the replacement are syntactically valid
+ string objects. The script just won't have access to the referrer
+ information anymore.
+</para>
+
+<para>
+ We'll show you two other jobs from the JavaScript taming department, but
+ this time only point out the constructs of special interest:
+</para>
+
+<para>
+ <screen>
+# The status bar is for displaying link targets, not pointless blahblah
+#
+s/window\.status\s*=\s*(['"]).*?\1/dUmMy=1/ig</screen>
+</para>
+
+<para>
+ <literal>\s</literal> stands for whitespace characters (space, tab, newline,
+ carriage return, form feed), so that <literal>\s*</literal> means: <quote>zero
+ or more whitespace</quote>. The <literal>?</literal> in <literal>.*?</literal>
+ makes this matching of arbitrary text ungreedy. (Note that the <literal>U</literal>
+ option is not set). The <literal>['"]</literal> construct means: <quote>a single
+ <emphasis>or</emphasis> a double quote</quote>. Finally, <literal>\1</literal> is
+ a backreference to the first parenthesis just like <literal>$1</literal> above,
+ with the difference that in the <emphasis>pattern</emphasis>, a backslash indicates
+ a backreference, whereas in the <emphasis>substitute</emphasis>, it's the dollar.
+</para>
+
+<para>
+ So what does this job do? It replaces assignments of single- or double-quoted
+ strings to the <quote>window.status</quote> object with a dummy assignment
+ (using a variable name that is hopefully odd enough not to conflict with
+ real variables in scripts). Thus, it catches many cases where e.g. pointless
+ descriptions are displayed in the status bar instead of the link target when
+ you move your mouse over links.
+</para>
+
+<para>
+ <screen>
+# Kill OnUnload popups. Yummy. Test: http://www.zdnet.com/zdsubs/yahoo/tree/yfs.html
+#
+s/(&lt;body [^&gt;]*)onunload(.*&gt;)/$1never$2/iU</screen>
+</para>
+
+<para>
+ Including the
+ <ulink url="http://www.w3.org/TR/2000/REC-DOM-Level-2-Events-20001113/events.html#Events-eventgroupings-htmlevents">OnUnload
+ event binding</ulink> in the HTML DOM was a <emphasis>CRIME</emphasis>.
+ When I close a browser window, I want it to close and die. Basta.
+ This job replaces the <quote>onunload</quote> attribute in
+ <quote>&lt;body&gt</quote> tags with the dummy word <literal>never</literal>.
+ Note that the <literal>i</literal> option makes the pattern matching
+ case-insensitive. Also note that ungreedy matching alone doesn't always guarantee
+ a minimal match: In the first parenthesis, we had to use <literal>[^&gt;]*</literal>
+ instead of <literal>.*</literal> to prevent the match from exceeding the 
+ &lt;body&gt tag if it doesn't contain <quote>OnUnload</quote>, but the page's
+ content does.
+</para>
+
+<para>
+ The last example is from the fun department:
+</para>
+
+<para>
+ <screen>
+FILTER: fun Fun text replacements
+
+# Spice the daily news:
+#
+s/microsoft(?!\.com)/MicroSuck/ig</screen>
+</para>
+
+<para>
+ Note the <literal>(?!\.com)</literal> part (a so-called negative lookahead)
+ in the job's pattern, which means: Don't match, if the string 
+ <quote>.com</quote> appears directly following <quote>microsoft</quote>
+ in the page. This prevents links to microsoft.com from being trashed, while
+ still replacing the word everywhere else.
+</para>
+
+<para>
+ <screen>
+# Buzzword Bingo (example for extended regex syntax)
+#
+s* industry[ -]leading \
+|  cutting[ -]edge \
+|  customer[ -]focused \
+|  market[ -]driven \
+|  award[ -]winning # Comments are OK, too! \
+|  high[ -]performance \
+|  solutions[ -]based \
+|  unmatched \
+|  unparalleled \
+|  unrivalled \
+*&lt;font color="red"&gt;&lt;b&gt;BINGO!&lt;/b&gt;&lt;/font&gt; \
+*igx</screen>
+</para>
+
+<para>
+ The <literal>x</literal> option in this job turns on extended syntax, and allows for
+ e.g. the liberal use of (non-interpreted!) whitespace for nicer formatting. 
+</para>
 
+<para>
+ You get the idea?
+</para>
+</sect2>
 </sect1>
 
 <!--  ~  End section  ~  -->
@@ -5551,23 +4680,80 @@ another.popular.site.net/more/junk/here/</screen>
 <sect1 id="templates">
 <title>Templates</title>
 <para>
- When <application>Privoxy</application> displays one of its internal 
- pages, such as a <ulink url="http://bogus_404_page.com">404 Not Found error page</ulink>
- (<application>Privoxy</application> must be running for link to work as
- intended), it uses the appropriate template. On Linux, BSD, and Unix, these
- are located in <filename>/etc/privoxy/templates</filename> by default. These
- may be customized, if desired. <filename>cgi-style.css</filename> is used to
- control the HTML attributes (fonts, etc).
+ All <application>Privoxy</application> built-in pages, i.e. error pages such as the 
+ <ulink url="http://show-the-404-error.page"><quote>404 - No Such Domain</quote>
+ error page</ulink>, the <ulink
+ url="http://ads.bannerserver.example.com/nasty-ads/sponsor.html"><quote>BLOCKED</quote>
+ page</ulink>
+ and all pages of its <ulink url="http://config.privoxy.org/">web-based
+ user interface</ulink>, are generated from <emphasis>templates</emphasis>. 
+ (<application>Privoxy</application> must be running for the above links to work as
+ intended.)
+</para>
+
+<para>
+ These templates are stored in a subdirectory of the <link linkend="confdir">configuration
+ directory</link> called <filename>templates</filename>. On Unixish platforms,
+ this is typically
+ <ulink url="file:///etc/privoxy/templates/"><filename>/etc/privoxy/templates/</filename></ulink>.
 </para>
+
 <para>
- The default 
- <ulink
- url="http://ads.bannerserver.example.com/nasty-ads/sponsor.html">Blocked
- </ulink> (<application>Privoxy</application> needs to be running for page to
- display) banner page with the bright red top banner, is called just
- <quote><filename>blocked</filename></quote>. This may be customized or
- replaced with something else if desired (not recommended for the casual
- user).
+ The templates are basically normal HTML files, but with place-holders (called symbols
+ or exports), which <application>Privoxy</application> fills at run time. You can
+ edit the templates with a normal text editor, should you want to customize them.
+ (<emphasis>Not recommended for the casual user</emphasis>). Note that
+ just like in configuration files, lines starting with <literal>#</literal> are
+ ignored when the templates are filled in.
+</para>
+
+<para>
+ The place-holders are of the form <literal>@name@</literal>, and you will
+ find a list of available symbols, which vary from template to template,
+ in the comments at the start of each file. Note that these comments are not
+ always accurate, and that it's probably best to look at the existing HTML
+ code to find out which symbols are supported and what they are filled in with.
+</para>
+
+<para>
+ A special application of this substitution mechanism is to make whole
+ blocks of HTML code disappear when a specific symbol is set. We use this
+ for many purposes, one of them being to include the beta warning in all
+ our user interface (CGI) pages when <application>Privoxy</application>
+ in in an alpha or beta development stage:
+</para>
+
+<para>
+ <screen>
+&lt;!-- @if-unstable-start --&gt;
+
+  ... beta warning HTML code goes here ...
+
+&lt;!-- if-unstable-end@ --&gt;</screen>
+</para>
+
+<para>
+ If the "unstable" symbol is set, everything in between and including
+ <literal>@if-unstable-start</literal> and <literal>if-unstable-end@</literal>
+ will disappear, leaving nothing but an empty comment:
+</para>
+
+<para>
+ <screen>&lt;!--  --&gt;</screen>
+</para>
+
+<para>
+ There's also an if-then-else construct and an <literal>#include</literal>
+ mechanism, but you'll sure find out if you are inclined to edit the
+ templates ;-)
+</para>
+
+<para>
+ All templates refer to a style located at
+ <ulink url="http://config.privoxy.org/send-stylesheet"><literal>http://config.privoxy.org/send-stylesheet</literal></ulink>.
+ This is, of course, locally served by <application>Privoxy</application>
+ and the source for it can be found and edited in the
+ <filename>cgi-style.css</filename> template.
 </para>
 
 </sect1>
@@ -5613,6 +4799,13 @@ Requests</title>
  &history;
 <!-- end history -->
 </sect2>
+
+<sect2 id="authors"><title>Authors</title>
+<!-- Include p-authors.sgml: -->
+ &p-authors;
+<!-- end authors -->
+</sect2>
+
 </sect1>
 
 <!--  ~  End section  ~  -->
@@ -5635,30 +4828,29 @@ Requests</title>
 <sect2 id="regex">
 <title>Regular Expressions</title>
 <para>
- <application>Privoxy</application> can use <quote>regular expressions</quote> 
- in various config files. Assuming support for <quote>pcre</quote> (Perl
- Compatible Regular Expressions) is compiled in, which is the default. Such
- configuration directives do not require regular expressions, but they can be
- used to increase flexibility by matching a pattern with wild-cards against
- URLs.
+ <application>Privoxy</application> uses Perl-style <quote>regular
+ expressions</quote> in its <link linkend="actions-file">actions
+ files</link> and <link linkend="filter-file">filter file</link>,
+ through the <ulink url="http://www.pcre.org/">PCRE</ulink> and
+ <ulink url="http://www.oesterhelt.org/pcrs/">PCRS</ulink> libraries.
 </para>
 
 <para>
  If you are reading this, you probably don't understand what <quote>regular
  expressions</quote> are, or what they can do. So this will be a very brief
- introduction only. A full explanation would require a book ;-)
+ introduction only. A full explanation would require a <ulink
+ url="http://www.oreilly.com/catalog/regex/">book</ulink> ;-)
 </para>
 
 <para>
- <quote>Regular expressions</quote> is a way of matching one character
- expression against another to see if it matches or not. One of the
- <quote>expressions</quote> is a literal string of readable characters
- (letter, numbers, etc), and the other is a complex string of literal
- characters combined with wild-cards, and other special characters, called
- meta-characters. The <quote>meta-characters</quote> have special meanings and
- are used to build the complex pattern to be matched against. Perl Compatible
- Regular Expressions is an enhanced form of the regular expression language
- with backward compatibility.
+ Regular expressions provide a language to describe patterns that can be
+ run against strings of characters (letter, numbers, etc), to see if they
+ match the string or not. The  patterns are themselves (sometimes complex)
+ strings of literal characters, combined with  wild-cards, and other special
+ characters, called meta-characters. The <quote>meta-characters</quote> have
+ special meanings and are used to build complex patterns to be matched against.
+ Perl Compatible Regular Expressions are an especially convenient
+ <quote>dialect</quote> of the regular expression language.
 </para>
 
 <para>
@@ -5745,14 +4937,6 @@ Requests</title>
  </member>
 </simplelist></para>
 
-<para><simplelist>
- <member>
-  <emphasis>s/string1/string2/g</emphasis> - This is used to rewrite strings of text. 
-  <quote>string1</quote> is replaced by <quote>string2</quote> in this
-  example. There must of course be a match on <quote>string1</quote> first.
- </member>
-</simplelist></para>
-
 <para>
  These are just some of the ones you are likely to use when matching URLs with 
  <application>Privoxy</application>, and is a long way from a definitive
@@ -5842,16 +5026,6 @@ Requests</title>
  in the expression anywhere).
 </para>
 
-<para>
- <emphasis><literal>s/microsoft(?!.com)/MicroSuck/i</literal></emphasis> - This is 
- a substitution. <quote>MicroSuck</quote> will replace any occurrence of 
- <quote>microsoft</quote>.  The <quote>i</quote> at the end of the expression
- means ignore case. The <quote>(?!.com)</quote> means 
- the match should fail if <quote>microsoft</quote> is followed by
- <quote>.com</quote>. In other words, this acts like a <quote>NOT</quote>
- modifier. In case this is a hyperlink, we don't want to break it ;-).
-</para>
-
 <para>
  We are barely scratching the surface of regular expressions here so that you
  can understand the default <application>Privoxy</application>
@@ -5866,6 +5040,11 @@ Requests</title>
  <ulink url="http://www.perldoc.com/perl5.6/pod/perlre.html">http://www.perldoc.com/perl5.6/pod/perlre.html</ulink>
 </para>
 
+<para>
+ For information on regular expression based substitutions and their applications
+ in filters, please see the <link linkend="filter-file">filter file tutorial</link>
+ in this manual.
+</para>
 </sect2>
 
 <!--  ~  End section  ~  -->
@@ -5908,9 +5087,9 @@ Requests</title>
    </para>
   </blockquote>
   <para>
-   Alternately, this may be reached at <ulink
-   url="http://p.p/">http://p.p/</ulink>, but this
-   variation may not work as reliably as the above in some configurations.
+   There is a shortcut: <ulink url="http://p.p/">http://p.p/</ulink> (But it
+   doesn't provide a fall-back to a real page, in case the request is not
+   sent through <application>Privoxy</application>)
   </para>
  </listitem>
 
@@ -6044,18 +5223,20 @@ Requests</title>
 
   <listitem>
    <para>
-    <ulink url="javascript:w=Math.floor(screen.width/2);h=Math.floor(screen.height*0.9);void(window.open('http://www.privoxy.org/actions','Feedback','screenx='+w+',width='+w+',height='+h+',scrollbars=yes,toolbar=no,location=no,directories=no,status=no,menubar=no,copyhistory=no').focus());">Privoxy - Submit Filter Feedback</ulink>
+    <ulink url="javascript:w=Math.floor(screen.width/2);h=Math.floor(screen.height*0.9);void(window.open('http://www.privoxy.org/actions/index.php?url='+escape(location.href),'Feedback','screenx='+w+',width='+w+',height='+h+',scrollbars=yes,toolbar=no,location=no,directories=no,status=no,menubar=no,copyhistory=no').focus());">Privoxy - Submit Actions File Feedback</ulink>
+   </para>
+  </listitem> 
+  <listitem>
+   <para>
+    <ulink url="javascript:void(window.open('http://config.privoxy.org/show-url-info?url='+escape(location.href),'Why').focus());">Privoxy - Why?</ulink>
    </para>
   </listitem> 
-
  </itemizedlist>
 </para>
 
-
-
 <para>
- Credit: The site which gave me the general idea for these bookmarklets is
- <ulink url="http://www.bookmarklets.com">www.bookmarklets.com</ulink>. They
+ Credit: The site which gave us the general idea for these bookmarklets is
+ <ulink url="http://www.bookmarklets.com/">www.bookmarklets.com</ulink>. They
  have more information about bookmarklets. 
 </para>
 
@@ -6135,7 +5316,7 @@ Requests</title>
   <para>
    First, the server headers are read and processed to determine, among other
    things, the MIME type (document type) and encoding. The headers are then
-   filtered as deterimed by the 
+   filtered as determined by the 
    <link linkend="CRUNCH-INCOMING-COOKIES"><quote>+crunch-incoming-cookies</quote></link>,
    <link linkend="SESSION-COOKIES-ONLY"><quote>+session-cookies-only</quote></link>,
    and <link linkend="DOWNGRADE-HTTP-VERSION"><quote>+downgrade-http-version</quote></link>
@@ -6194,23 +5375,23 @@ Requests</title>
 
 <para>
  The way <application>Privoxy</application> applies 
- <link linkend="ACTIONS"><quote>actions</quote></link>
- and <link linkend="FILTER"><quote>filters</quote></link>
+ <link linkend="ACTIONS">actions</link> and <link linkend="FILTER">filters</link>
  to any given URL can be complex, and not always so
  easy to understand what is happening. And sometimes we need to be able to
  <emphasis>see</emphasis> just what <application>Privoxy</application> is
  doing. Especially, if something <application>Privoxy</application> is doing
  is causing us a problem inadvertently. It can be a little daunting to look at
  the actions and filters files themselves, since they tend to be filled with
- <quote>regular expressions</quote> whose consequences are not always 
- so obvious. 
+ <link linkend="regex">regular expressions</link> whose consequences are not
always so obvious. 
 </para>
 
 <para>
  One quick test to see if <application>Privoxy</application> is causing a problem 
  or not, is to disable it temporarily. This should be the first troubleshooting 
  step. See <link linkend="bookmarklets">the Bookmarklets</link> section on a quick 
- and easy way to do this (be sure to flush caches afterward!).
+ and easy way to do this (be sure to flush caches afterward!). Looking at the 
+ logs is a good idea too.
 </para>
 
 <para>
@@ -6246,19 +5427,38 @@ Requests</title>
  <screen>
  Matches for http://google.com:
 
---- File standard ---
-(no matches in this file)
-
---- File default ---
-
-{ -add-header -block +deanimate-gifs{last} -downgrade-http-version +fast-redirects 
- -filter{popups} -filter{fun} -filter{shockwave-flash} -filter{crude-parental} 
- +filter{html-annoyances} +filter{js-annoyances} +filter{content-cookies} 
- +filter{webbugs} +filter{refresh-tags} +filter{nimda} +filter{banners-by-size} 
- +hide-forwarded-for-headers +hide-from-header{block} +hide-referer{forge} 
- -hide-user-agent -handle-as-image +set-image-blocker{pattern} -limit-connect 
- +prevent-compression +session-cookies-only -crunch-outgoing-cookies 
- -crunch-incoming-cookies -kill-popups -send-vanilla-wafer -send-wafer }
+ In file: default.action <guibutton>[ View ]</guibutton> <guibutton>[ Edit ]</guibutton>
+
+{-add-header 
+ -block 
+ -crunch-outgoing-cookies 
+ -crunch-incoming-cookies 
+ +deanimate-gifs{last} 
+ -downgrade-http-version 
+ +fast-redirects 
+ -filter{popups} 
+ -filter{fun} 
+ -filter{shockwave-flash} 
+ -filter{crude-parental} 
+ +filter{html-annoyances} 
+ +filter{js-annoyances} 
+ +filter{content-cookies} 
+ +filter{webbugs} 
+ +filter{refresh-tags} 
+ +filter{nimda} 
+ +filter{banners-by-size} 
+ +hide-forwarded-for-headers 
+ +hide-from-header{block} 
+ +hide-referer{forge} 
+ -hide-user-agent 
+ -handle-as-image 
+ -kill-popups 
+ -limit-connect 
+ +prevent-compression 
+ -send-vanilla-wafer 
+ -send-wafer 
+ +session-cookies-only 
+ +set-image-blocker{pattern} }
 /
 
  { -session-cookies-only }
@@ -6267,7 +5467,7 @@ Requests</title>
  { -fast-redirects }
  .google.com
 
---- File user ---
+In file: user.action <guibutton>[ View ]</guibutton> <guibutton>[ Edit ]</guibutton>
 (no matches in this file)  
 </screen>
 </para>
@@ -6321,14 +5521,37 @@ Requests</title>
  <screen>
 
  Final results:
- -add-header -block +deanimate-gifs{last} -downgrade-http-version -fast-redirects 
- -filter{popups} -filter{fun} -filter{shockwave-flash} -filter{crude-parental} 
- +filter{html-annoyances} +filter{js-annoyances} +filter{content-cookies} 
- +filter{webbugs} +filter{refresh-tags} +filter{nimda} +filter{banners-by-size} 
- +hide-forwarded-for-headers +hide-from-header{block} +hide-referer{forge} 
- -hide-user-agent -handle-as-image +set-image-blocker{pattern} -limit-connect 
- +prevent-compression -session-cookies-only -crunch-outgoing-cookies 
- -crunch-incoming-cookies -kill-popups -send-vanilla-wafer -send-wafer
+ -add-header 
+ -block 
+ -crunch-outgoing-cookies 
+ -crunch-incoming-cookies 
+ +deanimate-gifs{last} 
+ -downgrade-http-version 
+ -fast-redirects 
+ -filter{popups} 
+ -filter{fun} 
+ -filter{shockwave-flash} 
+ -filter{crude-parental} 
+ +filter{html-annoyances} 
+ +filter{js-annoyances} 
+ +filter{content-cookies} 
+ +filter{webbugs} 
+ +filter{refresh-tags} 
+ +filter{nimda} 
+ +filter{banners-by-size} 
+ +hide-forwarded-for-headers 
+ +hide-from-header{block} 
+ +hide-referer{forge} 
+ -hide-user-agent 
+ -handle-as-image 
+ -kill-popups 
+ -limit-connect 
+ +prevent-compression 
+ -send-vanilla-wafer 
+ -send-wafer
+ -session-cookies-only 
+ +set-image-blocker{pattern} 
 </screen>
 </para>
 
@@ -6382,7 +5605,7 @@ Requests</title>
 
 <para>
  One last example. Let's try <quote>http://www.rhapsodyk.net/adsl/HOWTO/</quote>.
- This one is giving us problems. We are getting a blank page. Hmmm...
+ This one is giving us problems. We are getting a blank page. Hmmm ...
 </para>
 
 <para>
@@ -6390,13 +5613,34 @@ Requests</title>
 
  Matches for http://www.rhapsodyk.net/adsl/HOWTO/:
 
- { -add-header -block +deanimate-gifs -downgrade-http-version +fast-redirects 
-   +filter{html-annoyances} +filter{js-annoyances} +filter{kill-popups} 
-   +filter{webbugs} +filter{nimda} +filter{banners-by-size} +filter{hal} 
-   +filter{fun} +hide-forwarded-for-headers +hide-from-header{block} 
-   +hide-referer{forge} -hide-user-agent -handle-as-image +set-image-blocker{blank} 
-   +prevent-compression +session-cookies-only -crunch-incoming-cookies 
-   -crunch-outgoing-cookies +kill-popups -send-vanilla-wafer -send-wafer }
+ In file: default.action <guibutton>[ View ]</guibutton> <guibutton>[ Edit ]</guibutton>
+
+ {-add-header 
+  -block 
+  -crunch-incoming-cookies 
+  -crunch-outgoing-cookies 
+  +deanimate-gifs 
+  -downgrade-http-version 
+  +fast-redirects 
+  +filter{html-annoyances} 
+  +filter{js-annoyances} 
+  +filter{kill-popups} 
+  +filter{webbugs} 
+  +filter{nimda} 
+  +filter{banners-by-size} 
+  +filter{hal} 
+  +filter{fun} 
+  +hide-forwarded-for-headers 
+  +hide-from-header{block} 
+  +hide-referer{forge} 
+  -hide-user-agent 
+  -handle-as-image 
+  +kill-popups 
+  +prevent-compression 
+  -send-vanilla-wafer 
+  -send-wafer 
+  +session-cookies-only 
+  +set-image-blocker{blank} }
    /
 
  { +block +handle-as-image }
@@ -6443,8 +5687,9 @@ Requests</title>
  was. If you don't get this kind of match, then it means one of the default 
  rules in the first section is causing the problem. This would require some 
  guesswork, and maybe a little trial and error to isolate the offending rule.
- One likely cause would be one of the <quote>{+filter}</quote> actions. Try 
- adding the URL for the site to one of aliases that turn off <quote>+filter</quote>:
+ One likely cause would be one of the <quote>{+filter}</quote> actions. These 
+ tend to be harder to troubleshoot. Try adding the URL for the site to one of
+ aliases that turn off <quote>+filter</quote>:
 </para>
 
 <para>
@@ -6475,8 +5720,16 @@ Requests</title>
 </para>
 
 <para>
- This would probably be most appropriately put in <filename>user.action</filename>, 
- for local site exceptions.
+ This would turn off all filtering for that site. This would probably be most
+ appropriately put in <filename>user.action</filename>, for local site
+ exceptions.
+</para>
+
+<para>
+ Images that are inexplicably being blocked, may well be hitting the 
+ <quote>+filter{banners-by-size}</quote> rule, which assumes 
+ that images of certain sizes are ad banners (works well most of the time 
+ since these tend to be standardized).
 </para>
 
 <para>
@@ -6511,6 +5764,137 @@ Requests</title>
  Temple Place - Suite 330, Boston, MA  02111-1307, USA.
 
  $Log: user-manual.sgml,v $
+ Revision 2.9  2003/04/11 03:14:53  hal9
+ Add small note about one filter file may be defined.
+
+ Revision 2.8  2002/10/21 02:46:09  hal9
+ Port changes to user.action examples section from 3.0.
+
+ Revision 2.7  2002/10/12 01:14:42  hal9
+ Updates for demoronizer filter, Radical profile, and the srvany.exe/icon
+ win32 fix.
+
+ Revision 2.6  2002/10/10 04:10:38  hal9
+ s/Advanced/Radical/ for standard.action change.
+
+ Revision 2.5  2002/10/10 03:50:38  hal9
+ Update cookie sections for pre-existing condition, and content cookies not
+ effected by session-cookies setting.
+
+ Revision 2.4  2002/09/26 05:58:07  hal9
+ Change development status from working on 3.0 to 3.2.
+
+ Revision 2.3  2002/09/26 00:12:17  hal9
+ Additional notes on Privoxy patterns, and filtering vs SSL.
+
+ Revision 2.2  2002/09/05 05:45:30  hal9
+ Syncing with 3.0. This should be it for doc sources. Not all builds tested
+ yet. No new content, just catching up.
+
+ Revision 1.123.2.18  2002/08/22 23:47:58  hal9
+ Add 'Documentation' to Privoxy Menu shot in Configuration section to match
+ CGIs.
+
+ Revision 1.123.2.17  2002/08/18 01:13:05  hal9
+ Spell checked (only one typo this time!).
+
+ Revision 1.123.2.16  2002/08/09 19:20:54  david__schmidt
+ Update to Mac OSX startup script name
+
+ Revision 1.123.2.15  2002/08/07 17:32:11  oes
+ Converted some internal links from ulink to link for PDF creation; no content changed
+
+ Revision 1.123.2.14  2002/08/06 09:16:13  oes
+ Nits re: actions file download
+
+ Revision 1.123.2.13  2002/08/02 18:23:19  g_sauthoff
+ Just 2 small corrections to the Gentoo sections
+
+ Revision 1.123.2.12  2002/08/02 18:17:21  g_sauthoff
+ Added 2 Gentoo sections
+
+ Revision 1.123.2.11  2002/07/26 15:20:31  oes
+ - Added version info to title
+ - Added info on new filters
+ - Revised parts of the filter file tutorial
+ - Added info on where to get updated actions files
+
+ Revision 1.123.2.10  2002/07/25 21:42:29  hal9
+ Add brief notes on not proxying non-HTTP protocols.
+
+ Revision 1.123.2.9  2002/07/11 03:40:28  david__schmidt
+
+ Updated Mac OSX sections due to installation location change
+
+ Revision 1.123.2.8  2002/06/09 16:36:32  hal9
+ Clarifications on filtering and MIME. Hardcode 'latest release' in index.html.
+
+ Revision 1.123.2.7  2002/06/09 00:29:34  hal9
+ Touch ups on filtering, in actions section and Anatomy.
+
+ Revision 1.123.2.6  2002/06/06 23:11:03  hal9
+ Fix broken link. Linkchecked all docs.
+
+ Revision 1.123.2.5  2002/05/29 02:01:02  hal9
+ This is break out of the entire config section from u-m, so it can
+ eventually be used to generate the comments, etc in the main config file
+ so that these are in sync with each other.
+
+ Revision 1.123.2.4  2002/05/27 03:28:45  hal9
+ Ooops missed something from David.
+
+ Revision 1.123.2.3  2002/05/27 03:23:17  hal9
+ Fix FIXMEs for OS2 and OSX startup. Fix Redhat typos (should be Red Hat).
+ That's a wrap, I think.
+
+ Revision 1.123.2.2  2002/05/26 19:02:09  hal9
+ Move Amiga stuff around to take of FIXME in start up section.
+
+ Revision 1.123.2.1  2002/05/26 17:04:25  hal9
+ -Spellcheck, very minor edits, and sync across branches
+
+ Revision 1.123  2002/05/24 23:19:23  hal9
+ Include new image (Proxy setup). More fun with guibutton.
+ Minor corrections/clarifications here and there.
+
+ Revision 1.122  2002/05/24 13:24:08  oes
+ Added Bookmarklet for one-click pre-filled access to show-url-info
+
+ Revision 1.121  2002/05/23 23:20:17  oes
+  - Changed more (all?) references to actions to the
+    <literal><link> style.
+  - Small fixes in the actions chapter
+  - Small clarifications in the quickstart to ad blocking
+  - Removed <emphasis> from <title>s since the new doc CSS
+    renders them red (bad in TOC).
+
+ Revision 1.120  2002/05/23 19:16:43  roro
+ Correct Debian specials (installation and startup).
+
+ Revision 1.119  2002/05/22 17:17:05  oes
+ Added Security hint
+
+ Revision 1.118  2002/05/21 04:54:55  hal9
+ -New Section: Quickstart to Ad Blocking
+ -Reformat Actions Anatomy to match new CGI layout
+
+ Revision 1.117  2002/05/17 13:56:16  oes
+  - Reworked & extended Templates chapter
+  - Small changes to Regex appendix
+  - #included authors.sgml into (C) and hist chapter
+
+ Revision 1.116  2002/05/17 03:23:46  hal9
+ Fixing merge conflict in Quickstart section.
+
+ Revision 1.115  2002/05/16 16:25:00  oes
+ Extended the Filter File chapter & minor fixes
+
+ Revision 1.114  2002/05/16 09:42:50  oes
+ More ulink->link, added some hints to Quickstart section
+
+ Revision 1.113  2002/05/15 21:07:25  oes
+ Extended and further commented the example actions files
+
  Revision 1.112  2002/05/15 03:57:14  hal9
  Spell check. A few minor edits here and there for better syntax and
  clarification.