diff man/w3.texi @ 0:376386a54a3c r19-14

Import from CVS: tag r19-14
author cvs
date Mon, 13 Aug 2007 08:45:50 +0200
parents
children ac2d302a0011
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/man/w3.texi	Mon Aug 13 08:45:50 2007 +0200
@@ -0,0 +1,3146 @@
+\input texinfo
+@setfilename ../info/w3.info
+@settitle Emacs-W3 User's Manual
+@iftex
+@finalout
+@end iftex
+@c @setchapternewpage odd
+@c @smallbook
+@tex
+\overfullrule=0pt
+%\global\baselineskip 30pt      % for printing in double space
+@end tex
+@synindex cp fn
+@synindex vr fn
+@ifinfo
+This file documents the Emacs-W3 World Wide Web browser.
+
+Copyright (C) 1993, 1994, 1995 William M. Perry
+Copyright (C) 1996 Free Software Foundation
+
+Permission is granted to make and distribute verbatim copies of
+this manual provided the copyright notice and this permission notice
+are preserved on all copies.
+
+@ignore
+Permission is granted to process this file through Tex and print the
+results, provided the printed document carries copying permission
+notice identical to this one except for the removal of this paragraph
+(this paragraph not being relevant to the printed manual).
+
+@end ignore
+@end ifinfo
+@c
+@titlepage
+@sp 6
+@center @titlefont{Emacs-W3}
+@center @titlefont{User's Manual}
+@sp 4
+@center Third Edition, Emacs-W3 Version 2.3.0
+@sp 1
+@center February 1996
+@sp 5
+@center William M. Perry
+@center @i{wmperry@@cs.indiana.edu}
+@page
+@vskip 0pt plus 1filll
+Copyright @copyright{} 1993, 1994, 1995 William M. Perry@*
+Copyright @copyright{} 1996 Free Software Foundation
+
+Permission is granted to make and distribute verbatim copies of@*
+this manual provided the copyright notice and this permission notice@*
+are preserved on all copies.
+
+@end titlepage
+@page
+@ifinfo
+@node Top, Introduction,, (DIR)
+This manual documents the Emacs-W3 World Wide Web browser, a Lisp program
+which runs as a subsystem under Emacs.  The manual is divided into the
+following chapters.
+
+@menu
+* Introduction::                What exactly is Emacs-W3?
+* Setting Up::                  How to set up and install Emacs-W3.
+* Basic Usage::                 Basic movement and usage of Emacs-W3.
+* Compatibility::               Explanation of compatibility with
+                                other web browsers.
+* Controlling Formatting::	How to control HTML formatting
+* MIME Support::                Support for MIME
+* Security::                    Various forms of security
+* Non-Unix Operating Systems::	Special considerations necessary to get
+                                up and running correctly under non-unix
+                                OS's.
+* Advanced Features::           Some of the more arcane features.
+* More Help::                   How to get more help---mailing lists,
+                                newsgroups, etc.
+* Future Directions::           Plans for future revisions
+* Programming Interface::       How to use Emacs-W3 from other emacs
+                                programs.
+
+Appendices:
+* Reporting Bugs::              How to report a bug in Emacs-W3
+* Installing SSL::              Turning on SSL support
+* Using PGP/PEM::               Turning on PGP/PEM encryption support
+* Mailcap Files::               An explanation of Mailcap files
+
+Indices:
+* General Index::               General Index
+* Key Index::                   Menus of command keys and their references
+@end menu
+@end ifinfo
+
+@node Introduction, Setting Up, Top, Top
+@chapter Introduction
+@cindex World Wide Web
+Emacs-W3 is an Emacs subsystem that allows the user to browse the wonderful
+World Wide Web (WWW).
+
+The World Wide Web was begun at the CERN physics institute in
+Switzerland in 1991.  The project was initiated by Tim Berners-Lee
+(@i{timbl@@w3.org}) for distributing data between different research
+groups effectively.
+
+
+The Web has since grown into the most advanced information system
+currently on the internet.  It is now a global hypertext system with
+servers and @dfn{browsers} (programs written to interpret the hypertext
+language and display it correctly, and allow the user to follow links)
+exist for all major platforms (VMS, Windows, DOS, Unix, VM, NeXTstep,
+Amiga, and Macintosh).
+
+The basic concepts used in the Web are @b{hypertext} and @b{hypermedia}.
+Hypertext is the same as regular text, with one exception---it can
+contain links (cross-references) to other textual documents.  Hypermedia
+is slightly different---it can contain links to other forms of media
+(movies, sounds, interactive programs, etc.).
+
+WWW also allows searches of indices that are located anywhere on the
+network; in this respect, it mirrors certain capabilities found in both
+WAIS and Gopher.
+@iftex
+@section Client Side View of WWW
+@end iftex
+@ifinfo
+@center ----------------
+@center CLIENT SIDE VIEW
+@center ----------------
+@end ifinfo
+The WWW consists of documents and links.  Indexes are special documents
+which, rather than being read, may be searched.  The result of such a
+search is another @i{virtual} document containing links to the documents
+found.  A simple protocol, Hypertext Transfer Protocol or @i{HTTP}, is
+used to allow a browser program to request a keyword search by a remote
+information server.
+
+
+The web contains documents in many formats.  Those documents which are
+hypertext, (real or virtual) contain links to other documents, or places
+within documents.  All documents, whether real, virtual or indexes, look
+similar to the reader and are contained within the same addressing
+scheme.
+@iftex
+@section Information Provider View of WWW
+@end iftex
+@ifinfo
+@center -------------------------
+@center INFORMATION PROVIDER VIEW
+@center -------------------------
+@end ifinfo
+WWW browsers can access many existing data systems via existing
+protocols (FTP, NNTP) or via HTTP and a gateway.  In this way, the
+critical mass of data is quickly exceeded, and the increasing use of the
+system by readers and information suppliers encourage each other.
+
+Providing information is as simple as running a WWW server and pointing
+it at an existing directory structure.  The server automatically
+generates a hypertext view of the files to guide the user around.
+
+
+To personalize it, a few @b{SGML} hypertext files can be written to give
+an even more friendly view.  Also, any file available by anonymous FTP,
+or any internet newsgroup can be immediately linked into the web.  The
+small start-up effort is designed to allow open contributions.  At the
+other end of the scale, large information providers may provide an HTTP
+server with full text or keyword indexing.  This may allow access to a
+large existing database without changing the way that database is
+managed.  Such gateways have already been made into Oracle(tm), WAIS,
+and Digital's VMS/Help systems, to name but a few.
+
+
+The WWW model gets over the frustrating incompatibilities of data format
+between suppliers and reader by allowing negotiation of format between a
+smart browser and a smart server.  This provides a basis for extension
+into multimedia, and allow those who share application standards to make
+full use of them across the web.
+
+
+@ifinfo
+Here is some more specific information about what Emacs-W3 does and does
+not understand:
+@menu
+* Markup Languages Supported::	The different markup languages that
+				Emacs-W3 understands natively.
+* Supported Protocols::		The different network protocols that
+				Emacs-W3 speaks to.
+@end menu
+@end ifinfo
+@node Markup Languages Supported, Supported Protocols, Introduction, Introduction
+@chapter Supported Markup Languages
+Several different markup languages, and various extensions to those
+languages, are supported by Emacs-W3.
+@ifinfo
+@center ----------
+@center HTML 2.0
+@center ----------
+@end ifinfo
+@iftex
+@section HTML 2.0
+@end iftex
+The Hypertext Markup Language, or HTML, is composed of a set of elements
+that define a document and guide its display.  An HTML element may
+include a name, some attributes and some text or hypertext, and appears
+in an HTML document as <tag_name>text</tag_name>, <tag_name
+attribute_name=argument>text</tag_name>, or just <tag_name>.
+
+
+For example: @samp{<title>My Useful Document</title>}, and @samp{<pre
+width=60> A lot of text here.  </pre>}. 
+
+An HTML document is composed of a single element: <html>...</html>, that
+is, in turn, composed of head and body elements: <head>...</head>, and
+<body>...</body>.  To allow older HTML documents to remain readable,
+<html>, <head>, and <body> are actually optional within HTML
+documents.
+
+All the tags and attributes of HTML are fully supported in Emacs-W3.
+
+The full HTML 2.0 specification is available at any RFC
+archive@footnote{ftp://ds.internic.net/}.  It is RFC 1866.
+
+
+@ifinfo
+@center ----------
+@center HTML 3.0
+@center ----------
+@end ifinfo
+@iftex
+@section HTML 3.0
+@end iftex
+@cindex HTML 3.0
+The HTML 3.0 language is an extension of HTML, with a large degree of
+backward compatibility with HTML 2.0.  The idea of having one huge HTML
+3.0 document has been dropped in favor of several smaller supplementatry
+RFCs.  This will allow the standard to be upgraded much more quickly
+than trying to agree on all the features at once.
+
+As each new chunk of HTML 3.0 is proposed and agreed upon, Emacs-W3 will
+support it.
+
+:: WORK :: List currently supported chunks (embed, etc) ::
+@itemize @bullet
+@item Embed
+Embedding of arbitrary objects into an HTML document.  With the <embed>
+tag, any type of document can be inserted.  The most entertaining use of
+this is with embedding MPEG movies into an emacs buffer.  This requires
+Lucid Emacs 19.10, or XEmacs 19.11, as well as a slightly patched
+version of mpeg_play 2.0@footnote{The patch is available from
+ftp://ftp.cs.indiana.edu/pub/elisp/w3/mpeg_patch}.
+
+@end itemize
+@ifinfo
+@center ----------
+@center Netscape-HTML
+@center ----------
+@end ifinfo
+@iftex
+@section Netscape-HTML
+@end iftex
+I hate to say it, but I broke down and actually included some of the
+Netscape extensions into Emacs-W3.
+
+@table @b
+@item <font>...</font>
+Changes the font size.  Valid values range from 0-7. The default
+font size is 3. The value given can optionally have a '+' or '-'
+character in front of it to specify that it is relative to the document
+basefont.  Stylesheets are recommended instead, as they allow much
+greater control.@xref{Style Sheets}
+@item <center>...</center>
+This ugly, ill-thought-out alternative to the HTML 3.0 align attribute on
+headers and paragraphs was included for compatibility, and as an example
+of how @b{not} to do things.
+@item <isindex>
+The isindex tag can now take a prompt attribute, to get rid of the
+default 'This is a searchable index' label.
+@item <hr width=xx align=xx>
+The width and alignment of a horizontal rule can now be controlled.  The
+WIDTH attribute specifies how wide the rule should be, as a percentage
+of the window width.
+
+
+The ALIGN attribute specifies where the horizontal rule is placed.
+Valid values are left, right, center, and indent.
+@item <body background=@var{URL} bgcolor=@var{RGB} TEXT=@var{RGB} LINK=@var{RGB} ALINK=@var{RGB} VLINK=@var{RGB}>
+Various colors can now be set on a document wide basis.  This is done
+with various attributes on the BODY tag.  Stylesheets are really a
+better way to do this, and are recommended.  This is just for
+compatibility.  @xref{Style Sheets}
+@b{NOTE:} Netscape requires that all colors be specified in RGB values -
+this is not very intuitive for the avergage author, so Emacs-W3 allows
+you to use logical system colors (ie: @samp{"PaleGoldenrod"} instead of
+@samp{"#eee8aa"}).
+@table @b
+@item BACKGROUND=@var{url}
+Specifies a graphic to tile in the background of the document.  This
+only works in XEmacs 19.12 or later.
+@item BGCOLOR=@var{color}
+Specifies the background of the document, as a color instead of a
+graphic.
+@item TEXT=@var{color}
+Specifies the color of text on the page.
+@item LINK=@var{color}
+Specifies the color of hypertext links on the page.
+@item VLINK=@var{color}
+Specifies the color of hypertext links that have been visited already.
+@item ALINK=@var{color}
+Specifies the color of active hypertext links (links that have been
+clicked on, but not yet fully retrieved).
+@end table
+@end table
+@ifinfo
+@center ----------
+@center SGML Features
+@center ----------
+@end ifinfo
+@iftex
+@section SGML Features
+@end iftex
+@cindex SGML Features
+@cindex Entity Definitions
+@cindex Marked Sections
+:: WORK :: Document marked sections, SGML features
+@ifinfo
+@center ----------
+@center Extras
+@center ----------
+@end ifinfo
+@iftex
+@section Extra Markup
+@end iftex
+@cindex Easter Eggs
+@cindex Fluff
+@cindex Pomp & Circumstance
+There are several different markup elements that are not officially part
+of HTML or HTML 3.0 that Emacs-W3 supports.  These are either items that
+were dropped from HTML 3.0 after I had implemented them, or experimental
+parts of HTML that should not be counted as "official" or long
+lived.
+@itemize @bullet
+@item
+More <HR> improvements.  Text can be added into a horizontal rule by
+using the LABEL and TEXTALIGN attributes.
+
+@example
+<hr label="testing" textalign="right">
+yields
+----------------------------------------------------------testing-
+
+<hr label="testing" textalign="center">
+yields
+-----------------------------testing------------------------------
+
+<hr label="testing" textalign="left">
+yields
+-Testing----------------------------------------------------------
+@end example
+@item
+FLAME support.  For truly interesting dynamic documents.  This is
+replaced with a random quote from Mr. Angry (see @kbd{M-x flame} for a
+sample).
+@item
+The top ten tags that did not make it into netscape.  These tags were
+posted to the newsgroup comp.infosystems.www.misc by Laura Lemay
+(@i{lemay@@netcom.com}).  Much thanks to her for the humor.
+@table @b
+@item <wired>...</wired>
+Renders the enclosed text in a suitably ugly font/color combination.  If
+no default has been set up by the user, this is the default font, with
+red text on a yellow background.
+@item <roach>...</roach>
+When selected, the enclosed text runs and hides under the nearest
+window.  OR, giggles a lot and demands nachos, depending on the
+definition of "roach." (the formal definition, of course, to be
+determined by the Official Honorary Internet Standards Committee For
+Moving Really Slowly.)
+@item <pinhead>
+Inserts "zippyisms" into the enclosed text.  Perfect for those professional
+documents.  This is sure to be a favorite of mine!
+@item <secret>...</secret>
+Must use secret spy decoder glasses (available direct from Netscape for
+a reasonable fee) in order to read the enclosed text.  Can also be read
+by holding the computer in front of a full moon during the autumn
+solstice.
+
+In Emacs-W3, this displays the text using rot13 encoding.
+@item <hype>
+Causes Marc Andreesen to magically appear and grant an interview (wanted
+or not).  Please use this tag sparingly.
+@item <peek>....</peek>
+@item <poke>...</poke>
+Need more control over screen layout in HTML?  Well, here ya go.
+
+Actually, <peek> could almost be considered useful.  The VARIABLE
+attribute can be used to insert the value of an emacs variable into the
+current document.  Things like 'Welcome to my page, <peek
+variable=user-mail-address>' can be useful in freaking people
+out.
+@item <yogsothoth>
+@cindex Gates Bill
+@cindex Yogsothoth
+Summons the elder gods to suck away your immortal soul.  Or Bill Gates,
+if the elder gods are busy.  Unpredictable (but amusing) results occur
+when the <YOGSOTHOTH> and <HYPE> tags are used in close proximity.
+
+@item <blink>...</blink>
+Causes the enclosed text to .... ooops that one made it in.
+@end table
+@end itemize
+@node Supported Protocols, , Markup Languages Supported, Introduction
+@chapter Supported Protocols
+@cindex Network Protocols
+@cindex Protocols Supported
+@cindex Supported Protocols
+Emacs-W3 supports the following protocols
+@table @b
+@item Usenet News
+Can either display an entire newsgroup or specific articles by
+Message-ID: header.  This supports a unix-style .newsrc file, so the
+user does not see articles they have read using another newsreader, but
+due to how news URLs work, the .newsrc file cannot be updated
+reliably.
+
+To be more in line with the other URL schemes, the hostname and port of
+an NNTP server can be specified.  URLs of the form
+news://hostname:port/messageID work, but will not work in most other
+browsers.
+
+
+@item HTTP
+Supports both the HTTP/0.9 and HTTP/1.0 protocols.  Fully MIME-compliant
+with regards to HTTP/1.0.
+@item Gopher
+Support for all gopher types, including CSO queries.
+@item Gopher+
+Support for Gopher+ retrievals. Support for converting ASK blocks into
+HTML 3.0 FORMS and submitting them back to the server.
+@item FTP
+FTP is handled by either ange-ftp or efs.
+@item Local files
+Local files are handled, and MIME content-types are derived from the
+file extensions.
+@item Telnet
+Telnet is handled by running the Emacs Lisp function @code{telnet}, or
+spawning an xterm running telnet.
+@item TN3270
+TN3270 is handled by running a tn3270 program in an Emacs buffer, or
+spawning an xterm running tn3270.
+@item Mailto
+Causes a mail message to be started to a specific address.
+@item mailserver
+A more powerful version of mailto, which allows the author to specify
+the subject and body text of the mail message.  This type of link is
+never fully executed without user confirmation, because it is possible
+to insert insulting or threatening (and possibly illegal) data into the
+message.  The mail message is displayed, and the user must type 'yes' to
+send it.
+@item X-exec
+A URL can cause a local executable to be run, and its output interpreted
+as if it had come from an HTTP server.  This is very useful, but is
+still an experimental protocol, hence the X- prefix.
+@item SSL
+SSL requires a set of patches to the Emacs C code and SSLRef 2.0, or an
+external program to run in a subprocess (similar to the @file{tcp.el}
+package that comes with GNUS.  @xref{Installing SSL}
+@item Secure HTTP
+Work is in progress to add support for the Secure HTTP specification
+from Enterprise Information Technologies.  The specification for SHTTP
+can be found on EIT's web server at
+http://www.commerce.net/information/standards/drafts/shttp.txt.
+@end table
+
+@node Setting Up, Retrieving Emacs-W3, Introduction, Top
+@comment  node-name,  next,  previous,  up
+@chapter Setting Up
+@cindex Setting Up Emacs-W3
+@cindex Retrieving Emacs-W3
+This section of the manual deals with getting, compiling, and
+configuring @i{Emacs-W3}.
+@ifinfo
+@menu
+* Retrieving Emacs-W3::         Retrieving Emacs-W3 via anonymous ftp
+* Compiling Emacs-W3::          Compiling Emacs-W3 and its associated files
+* Basic Setup::                 Basic setup that everyone needs to do
+* Firewalls::                   How to set Emacs-W3 up to use a particular
+                                firewall setup.
+* Proxy Gateways::              Using a proxy server
+@end menu
+@end ifinfo
+@node Retrieving Emacs-W3, Compiling Emacs-W3, Setting Up, Setting Up
+@comment  node-name,  next,  previous,  up
+@section Retrieving Emacs-W3
+
+:: WORK :: Document that Emacs-W3 now requires the URL package as well
+
+@node Compiling Emacs-W3, Basic Setup, Retrieving Emacs-W3, Setting Up
+@comment  node-name,  next,  previous,  up
+@section Compiling Emacs-W3
+To install Emacs-W3, go into the @file{w3} subdirectory and edit the
+@file{Makefile}.  These variables might need to be changed:
+@table @code
+@item EMACS
+This variable controls what version of Emacs is used to compile the
+programs.  It should be the full path to the Emacs executable on the
+system.  The default is to use GNU Emacs (@file{emacs}).
+@item LISPDIR
+This variable controls where the lisp code is copied to when it is
+installed (with @code{make install}).  This is usually the users
+personal lisp code directory.  The value is run through
+@dfn{expand-file-name} and then added to the load-path.  Default is
+@file{~/lisp}.
+@item DOTEMACS
+This variable points to the Emacs customization file, default is
+@file{~/.emacs}.
+@item INFODIR
+This variable points to the local info directory.  This can be any valid
+directory, as long as it is in @code{Info-default-directory-list} so
+that info-mode can find it.  Default is @file{/usr/local/info/}.
+
+@item MAKEINFO
+This variables controls how the info files are built.  Possible values
+are @code{makeinfo} or @code{emacs -batch -q -f
+batch-texinfo-format}.  Default is @code{makeinfo}.
+@end table
+Once the @file{Makefile} has been modified, several different targets
+can be built.
+@table @code
+@item make w3
+This compiles all the .el files into the much faster .elc files.
+@item make install
+Compiles all the .el files and copies .el and .elc files into the
+directory specified by @code{LISPDIR}.
+@item make emacs
+Modifies the file specified by @code{DOTEMACS}.  A statement modifying
+the load-path variable and several autoload statements are added to the
+end of the file.
+@item make all
+Compiles and installs the .el files, and also modify/create the
+@code{DOTEMACS} file.
+@item make w3.info
+Creates the Emacs-readable info files.  The info files are created in
+the directory specified by @code{INFODIR}.  The makefile variable
+@code{MAKEINFO} determines how the info file is built.
+@item make w3.dvi
+Creates the printable documentation, using tex and texindex to properly
+generate the indices.  A @file{w3.dvi} file is left in the current
+directory.
+@end table
+@node Basic Setup, Firewalls, Compiling Emacs-W3, Setting Up
+@comment  node-name,  next,  previous,  up
+@section Basic Setup
+There are a few variables that almost all people need to change.
+
+@table @code
+@item w3-default-homepage
+@vindex w3-default-homepage
+The url to open at startup.  This defaults to the environment variable
+WWW_HOME if it is not set it in the users @file{.emacs} file. If
+WWW_HOME is undefined, then it defaults to the hypertext documentation
+for Emacs-W3.
+
+@item w3-delay-image-loads
+@vindex w3-delay-image-loads
+Controls the loading of inlined images.  If non-@code{nil}, images are
+not loaded.  If the correct image converters are not installed or the
+network connection is very slow, it is best to set this to @code{t}.
+Defaults to @code{nil}.
+@item url-global-history-file
+@vindex url-global-history-file
+The global history file used by both Mosaic/X and Emacs-W3.  This file
+contains a list of all the URLs that have been visited.  This file is parsed
+at startup and used to provide URL completion.  Emacs-W3 can read and
+write Mosaic/X or Netscape 1.x style history files, or use its own
+internal format (faster).  The file type is determined automatically, or
+prompted for if the file does not exist.
+@item w3-hotlist-file
+@vindex w3-hotlist-file
+Hotlist filename.  This should be the name of a file that is stored in
+NCSA's Mosaic/X or Netscape's format.  It is used to keep a listing of
+commonly accessed URLs.
+@item w3-personal-annotation-directory
+@vindex w3-personal-annotation-directory
+The directory where Emacs-W3 looks for personal annotations.  This is a
+directory that should hold the personal annotations stored in a
+Mosaic/X-compatible format.
+@item url-pgp/pem-entity
+@findex user-real-login-name
+@findex system-name
+The name by which the user is known to PGP and/or PEM entities.  If this
+is not set when Emacs-W3 is loaded, it defaults to
+@code{user-mail-address} if it is set, otherwise @code{(user-real-login-name)}@@@code{(system-name)}.
+@item url-personal-mail-address
+@vindex url-personal-mail-address
+@vindex url-pgp/pem-entity
+User's full email address.  This is what is sent to HTTP/1.0 servers as
+the FROM header.  If this is not set when Emacs-W3 is loaded, then it
+defaults to the value of @code{url-pgp/pem-entity}.
+
+@item w3-right-border
+@vindex w3-right-border
+@findex window-width
+Amount of space to leave on right margin of WWW buffers.  This amount is
+subtracted from the width of the window for each new WWW buffer and used
+as the new @code{fill-column}.
+
+@item w3-track-mouse
+@vindex w3-track-mouse
+Controls whether to track the mouse and message the url under the mouse.
+If this is non-@code{nil}, then a description of the hypertext area
+under the mouse is shown in the minibuffer.  This shows what type of
+link (inlined image, form entry area, delayed image, delayed MPEG, or
+hypertext reference) is under the cursor, and the destination.
+@item w3-echo-link
+@vindex w3-echo-link
+Controls how a URL is shown when a link is reached with @key{f},
+@key{b}, or the mouse moves over it.  Possible values are:
+@table @b
+@item url
+Displays the URL (ie: @samp{http://www.cs.indiana.edu/}).
+@item text
+Displays the text of the link (ie: @samp{A link to Indiana University}).
+@item nil
+Show nothing.
+@end table
+@item w3-use-forms-index
+@vindex w3-use-forms-index
+@cindex ISINDEX handling
+@cindex Forms based searching
+@cindex Searching with forms
+Non-@code{nil} means translate <ISINDEX> tags into a hypertext form.  A
+single text entry box is shown where the ISINDEX tag appears.
+@item url-use-hypertext-gopher
+@vindex url-use-hypertext-gopher
+@cindex Gopher+
+Controls how gopher documents are retrieved.  If non-@code{nil}, the
+gopher pages are converted into HTML and parsed just like any other
+page.  If @code{nil}, the requests are passed off to the
+@file{gopher.el} package by Scott Snyder.  Using the @file{gopher.el}
+package loses the gopher+ support, and inlined searching.
+@item url-xterm-command
+@vindex url-xterm-command
+Command used to start a windowed shell, similar to an xterm.  This
+string is passed through @code{format}, and should expect four strings:
+the title of the window, the program name to execute, and the server and
+port number.  The default is for xterm, which is very UNIX and
+XWindows-centric.
+@end table
+@node Firewalls, Proxy Gateways, Basic Setup, Setting Up
+@comment  node-name,  next,  previous,  up
+@section Firewalls
+@cindex Gateways
+There are several different reasons why the gateway support might be
+required.
+@enumerate
+@cindex Firewalls
+@item
+Stuck behind a firewall.  This is usually the case at large corporations
+with paranoid system-administrators.
+
+@cindex TERM
+@item
+Using TERM @footnote{TERM is a user-level protocol for emulating IP over
+a serial line.  More information is available at
+ftp://sunsite.unc.edu/pub/Linux/apps/comm/term} for slip-like access to
+the internet.
+
+
+NOTE: Emacs 19.22 has patches to enable native TERM networking.  To
+enable it, #define TERM in the appropriate s/*.h file for the operating
+system, then change the SYSTEM_LIBS define to include the @file{termnet}
+library that comes with the latest versions of TERM.
+ 
+@item
+@cindex Faulty hostname resolvers
+@cindex Broken SUN libc
+@cindex Can't resolve hostnames
+Emacs cannot resolve hostnames.  This happens quite often on Sun
+workstations and some ULTRIX machines.  Some C libraries do not include
+the hostname resolver routines in their static libraries.  If Emacs was
+linked statically, this means it won't be able to get to any machines
+off the local network.  This is characterized by being able to reach
+someplace with a raw ip number, but not its hostname
+(http://129.79.254.191/ works, but http://www.cs.indiana.edu/ doesn't).
+
+
+If for some reason it is not feasible to recompile Emacs with the
+@file{-lresolv} library or dynamic linking, it is just like being behind
+a firewall.  Another alternative is to set the variable
+@code{url-broken-resolution} - this will use the support in ange-ftp or
+EFS to use @file{nslookup} in a subprocess to do all hostname resolving.
+See the variables @code{efs-nslookup-program},
+@code{efs-nslookup-on-connect}, and @code{efs-nslookup-threshold} if are
+using EFS, or @code{ange-ftp-nslookup-program} if using Ange-FTP.
+
+@cindex Connections hanging with XEmacs & solaris
+@cindex Solaris networking problems
+@cindex XEmacs & Solaris network problems
+@item
+Running XEmacs 19.x and Solaris 2.x (SunOS 5.x).  For some reason,
+network processes under Solaris and XEmacs never get a status of
+@code{exit} or @code{closed}.  This causes retrieval of HTTP and gopher
+pages to hang indefinitely, with Emacs chewing up large amounts of CPU
+time.
+
+@end enumerate
+
+@vindex url-gateway-local-host-regexp
+Emacs-W3 has support for using the gateway mechanism for certain
+domains, and directly connecting to others.  To use this, change the
+value of @code{url-gateway-local-host-regexp}.  This should be a regular
+expression @footnote{Please see the full Emacs distribution for a
+description of regular expressions} that matches local hosts that do not
+require the use of a gateway.  If @code{nil}, then all connections are
+made through the gateway.
+
+
+@vindex url-gateway-method
+Emacs-W3 supports several methods of getting around gateways.  The variable
+@code{url-gateway-method} controls which of these methods is used.  This
+variable can have several values (use these as symbol names, not
+strings):
+@table @dfn
+@item program
+Run a program in a subprocess to connect to remote hosts (examples are
+@i{itelnet}@footnote{Itelnet is a standard name for a telnet executable
+that is capable of escaping the firewall.  Check with system
+administrators to see if anything similar is available}, an
+@i{expect}@footnote{Expect is a scripting language that allows control
+of interactive programs (like telnet) very easily.  It is available from
+gatekeeper.dec.com:/pub/GNU/expect-3.24.0.tar.gz} script, etc.).
+
+@item host
+Log into another local computer that has access to the internet, and run
+a telnet-like program from there.
+@item tcp
+Masanobu UMEDA (@i{umerin@@mse.kyutech.ac.jp}) has written a very nice
+replacement for the standard networking in Emacs.  This does basically
+the same thing that a method of @code{program} does, but is slightly
+more transparent to the user.
+@item native
+This means that Emacs-W3 should use the builtin networking code of Emacs.
+This should be used only if there is no firewall, or the Emacs source
+has already been hacked to get around the firewall.
+@end table
+Two of these need a bit more explanation than that:
+@vindex url-gateway-telnet-ready-regexp
+@vindex url-gateway-telnet-program
+When running a program in a subprocess to emulate a network connection,
+a few extra variables need to be set.  The variable
+@code{url-gateway-telnet-program} should point to an executable that
+accepts a hostname and port # as its arguments, and passes standard
+input to the remote host.  This can be either the full path to the
+executable or just the basename.  The variable
+@code{url-gateway-telnet-ready-regexp} controls how long Emacs-W3 should
+wait after spawning the subprocess to start sending to its standard
+input.  This gets around a bug where telnet would miss the beginning of
+requests becausse it did not buffer its input before opening a
+connection.  This should be a regular expression to watch for that
+signifies the end of the setup of @code{url-gateway-telnet-program}.
+The default should work fine for telnet.
+
+
+@cindex Host-based gateways
+@cindex Hair-pulling gateway-headaches
+@vindex url-gateway-host
+When using the @code{host}-based gatway method, things get a bit more
+complicated.  This is basically my attempt to do some of the basic stuff
+of @i{expect} within elisp.  First off, set the variable
+@code{url-gateway-host} to be the name of the gateway machine.
+
+
+@vindex url-gateway-connect-program
+The variable @code{url-gateway-connect-program} controls how the host is
+reached.  The easiest way is to have a program that does not require a
+username and password to login.  The most common of these is the
+@dfn{rsh} command.
+
+
+@vindex url-gateway-program-interactive
+@vindex url-gateway-handholding-password-regexp
+@vindex url-gateway-handholding-login-regexp
+@vindex url-gateway-host-username
+@vindex url-gateway-host-password
+If @i{rsh} is not available, then things get very ugly.  First, set the
+variable @code{url-gateway-program-interactive} to non-@code{nil}.  Then
+set the variables @code{url-gateway-host-username} and
+@code{url-gateway-host-password} to be the username and password
+necessary to log into the gateway machine.  The regular expressions in
+the variables @code{url-gateway-handholding-login-regexp} and
+@code{url-gateway-handholding-password-regexp} should match the login
+and password prompts on the gateway system respectively.  For example:
+
+
+@example
+(setq url-gateway-connect-program "telnet"
+      url-gateway-host-program "telnet"
+      url-gateway-program-interactive t
+      url-gateway-host-username "wmperry"
+      url-gateway-host-password "yeahrightkeepdreaming"
+      url-gateway-host "moose.cs.indiana.edu"
+      url-gateway-host-program-ready-regexp "Escape character is .*"
+      url-gateway-handholding-login-regexp "ogin:"
+      url-gateway-handholding-password-regexp "ord:")
+@end example
+
+@vindex url-gateway-host-prompt-pattern
+This should take care of logging in to the remote system.  The variable
+@code{url-gateway-host-prompt-pattern} should contain a regular
+expression that matches the shell prompt on the remote machine.  This
+should appear @b{no where} in the login banner/setup, or things could
+get very confused.
+
+
+@vindex url-gateway-host-program-ready-regexp
+@vindex url-gateway-host-program
+The variable @code{url-gateway-host-program-ready-regexp} should contain
+a regular expression that matches the end of the setup of
+@code{url-gateway-host-program} when it tries to make a connection to an
+off-firewall machine.  (Basically the same as
+@code{url-gateway-telnet-ready-regexp}.
+
+
+Emacs-W3 should now be able to get outside the local network.  If none
+of this makes sense, its probably my fault.  Please check with the
+network administrators to see if they have a program that does most of
+this already, since somebody somewhere at the company has probably been
+through something similar to this before, and would be much more
+helpful/knowledgeable about the local setup than I would be.  But feel
+free to mail me as a last resort.
+
+
+@node Proxy Gateways, Basic Usage, Firewalls, Setting Up
+@comment  node-name,  next,  previous,  up
+@section Proxy Gateways
+In late January 1993, Kevin Altis and Lou Montulli proposed and implemented a
+new proxy service.  This service requires the use of environment
+variables to specify a gateway server/port # to send protocol requests
+to.  Each protocol (HTTP, WAIS, gopher, FTP, etc.@:) can have a
+different gateway server.  The environment variables are
+@var{PROTOCOL}_proxy, where @var{PROTOCOL} is one of gopher, file, HTTP,
+FTP, or WAIS.
+
+:: WORK ::
+
+@node Basic Usage, , Proxy Gateways, Top
+@comment  node-name,  next,  previous,  up
+@chapter Basic Usage
+Emacs-W3 is similar to the Info package all Emacs users hold near and dear to
+their hearts (@xref{Top,,Info,info, The Info Manual}, for a description
+of Info).  Basically, @kbd{space} and @kbd{backspace} control scrolling,
+and @kbd{return} or @kbd{mouse2} follows a hypertext link.  The @kbd{f}
+and @kbd{b} keys maneuver around the various links on the page.
+
+@b{NOTE:} To enter data into a form entry area, select it using
+@kbd{return} or the middle mouse button, just like a hypertext link.
+
+
+On non-graphic terminals (VT100, DOS, etc.), hypertext links are
+surrounded by '[[' and ']]' by default.  On a graphics terminal, the
+links are in bold print.  @xref{Controlling Formatting} for information
+on how to change this, or for help on getting the highlighting to work
+on graphics terminals.
+
+There are approximately 50 keys bound to special Emacs-W3 functions.
+The basic rule of thumb regarding keybindings in Emacs-W3 is that a
+lowercase key takes an action on the @b{current document}, and an
+uppercase key takes an action on the document pointed to by the
+hypertext link @b{under the cursor}.
+
+There are several areas that the keybindings fall into: movement,
+information, action, and miscellaneous.
+
+@ifinfo
+@menu
+* Movement::		Moving around in a Emacs-W3 buffer
+* Information::		Getting information about the Emacs-W3 document being
+			viewed, and/or links within that document.
+* Action::		Taking actions in a Emacs-W3 buffer (following links,
+			printing, etc.)
+* Miscellaneous::	Miscellaneous keybindings
+@end menu
+@end ifinfo
+@node Movement, Information, Basic Usage, Basic Usage
+@section Movement
+:: WORK :: Document the 'h' and 'a' keymaps
+@table @kbd
+@findex scroll-up
+@kindex SPC
+@item SPC
+Scroll downward in the buffer.  With prefix arg, scroll down that many
+screenfuls. 
+@kindex DEL
+@findex scroll-down
+@item DEL
+Scroll upward in the buffer.  With prefix arg, scroll up that many
+screenfuls. 
+@kindex <
+@findex w3-start-of-document
+@item <
+Goes to the start of document
+@kindex >
+@findex w3-end-of-document
+@item >
+Goes to the end of document
+@kindex b
+@kindex Shift-TAB
+@findex w3-back-link
+@item Shift-TAB, b
+Attempts to move backward one link area in the current document.
+Signals an error if no previous links are found.
+@kindex hl
+@findex w3-show-hotlist
+@item hl
+Displays a complete listing of the items in the hotlist.
+@kindex hu
+@findex w3-use-hotlist
+@item hu
+Go to a link in the hotlist.
+@kindex m
+@findex w3-complete-link
+@item m
+Choose a link from the current buffer and follow it.  A completing-read
+is done on all the links, so @kbd{space} and @kbd{TAB} can be used for
+completion.
+@kindex f
+@kindex TAB
+@kindex n
+@findex w3-forward-link
+@item TAB, f, n
+Attempts to move forward one link area in the current document.  Signals
+an error if no more links are found.
+@end table
+@node Information, Action, Movement, Basic Usage
+@section Information
+These functions relate information about one or more links on the
+current document.
+@table @kbd
+@kindex v
+@findex url-view-url
+@item v
+This shows the URL of the current document in the minibuffer.
+@kindex V
+@findex w3-view-this-url
+@item V
+This shows the URL of the hypertext link under point in the minibuffer.
+If there is not a hypertext link under point, then it shows the type of
+form entry area under point.  If there is no form entry area under
+point, then it shows the inlined image's URL that is under point, if
+any.
+@kindex i
+@findex w3-document-information
+@item i
+Shows miscellaneous information about the currently displayed document.
+This includes the URL, the last modified date, MIME headers, the HTTP
+response code, and any relationships to other documents.  Any security
+information is also displayed.
+@kindex I
+@findex w3-document-information-this-url
+@item I
+Shows information about the URL at point.
+@kindex s
+@findex w3-source-document
+@item s
+This shows the HTML source of the current document in a separate buffer.
+The buffer's name is based on the document's URL.
+@kindex S
+@findex w3-source-document-at-point
+@item S
+Shows the HTML source of the hypertext link under point in a separate
+buffer.  The buffer's name is based on the document's URL.
+@kindex k
+@findex w3-save-url
+@item k
+This stores the current document's URL in the kill ring, and also in the
+current window-system's clipboard, if possible.
+@kindex K
+@findex w3-save-this-url
+@item K
+Stores the URL of the document under point in the kill ring, and also in
+the current window-system's clipboard, if possible.
+@end table
+@node Action, Miscellaneous, Information, Basic Usage
+@section Action
+First, here are the keys and functions that bring up a new hypertext
+page, usually creating a new buffer.
+@table @kbd
+@kindex return
+@findex w3-follow-link
+@item return 
+Pressing return when over a hyperlink attempts to follow the link
+under the cursor.  With a prefix argument (@kbd{C-u}), this forces the
+file to be saved to disk instead of being passed off to other viewers
+or being parsed as HTML.
+
+Pressing return when over a form input field will prompt in the
+minibuffer for the data to insert into the input field.  Type checking
+is done, and the data is only entered into the form when data of the
+correct type is entered (ie: cannot enter 44 for 'date' field, etc).
+
+@kindex Middle Mouse Button
+@findex w3-follow-mouse
+@item Middle Mouse Button
+Attempt to follow a hypertext link under the mouse cursor.  Clicking on
+a form input field will prompt in the minibuffer for the data to insert
+into the input field.  Type checking is done, and the data is only
+entered into the form when data of the correct type is entered (ie:
+cannot enter 44 for 'date' field, etc).
+
+@kindex Control Middle Mouse Button
+@kindex Meta return
+@findex w3-follow-inlined-image
+@item Control Middle Mouse Button, Meta return
+Tries to retrieve the inlined image that is under point.  It ignores any
+form entry areas or hyperlinks, and blindly follows any inlined image.
+Useful for seeing images that are meant to be used as hyperlinks when
+not on a terminal capable of displaying graphics.
+
+@kindex p
+@findex w3-print-this-url
+@item p
+Prints out the current buffer in a variety of formats, including
+PostScript, HTML source, or formatted text.
+@kindex P
+@findex w3-print-url-under-point
+@item P
+Prints out the URL under point in a variety of formats, including
+PostScript, HTML source, or formatted text.
+@kindex m
+@findex w3-complete-link
+@item m
+Selects a destination from a list of all the hyperlinks in the current
+buffer.  Use @kbd{space} and @kbd{tab} to complete on the links.
+
+@kindex r
+@kindex g
+@findex w3-reload-document
+@item r, g
+Reloads the current document.  The position within the buffer remains
+the same (unless the document has changed since it was last retrieved,
+in which case it should be relatively close).  This causes an
+unconditional reload from the remote server - the locally cached copy is
+not consulted.
+@kindex C-o
+@findex w3-fetch
+@item C-o
+Prompts for a URL in the minibuffer, and attempts to fetch
+it.  If there are any errors, or Emacs-W3 cannot understand the type of link
+requested, the errors are displayed in a hypertext buffer.
+@kindex o
+@findex w3-open-local
+@vindex url-use-hypertext-dired
+@item o
+Opens a local file, interactively.  This prompts for a local file name
+to open.  The file must exist, and may be a directory.  If the requested
+file is a directory and @code{url-use-hypertext-dired} is @code{nil},
+then a dired-mode buffer is displayed.  If non@code{nil}, then Emacs-W3
+automatically generates a hypertext listing of the directory.  The
+hypertext mode is the default, so that all the keys and functions remain
+the same.
+
+@kindex M-s
+@findex w3-search
+@item M-s
+Perform a search, if this is a searchable index.  Searching requires a
+server - Emacs-W3 can not do local file searching, as there are too many
+possible types of searches people could want to do.  Generally, the only
+URL types that allow searching are HTTP, gopher, and X-EXEC.
+@kindex Hv
+@findex w3-show-history-list
+@vindex w3-keep-history
+@item Hv
+If @code{url-keep-history} is non-@code{nil}, then Emacs-W3 keeps track
+of all the URLs visited in an Emacs session.  This function takes all
+the links that are in that internal list, and formats them as hypertext
+links in a list.
+@end table
+
+@cindex Buffer movement
+And here are the commands to move around between Emacs-W3 buffers:
+
+@table @kbd
+@kindex l
+@findex w3-goto-last-buffer
+@item l
+Goes to the last WWW buffer seen.
+@kindex q
+@findex w3-quit
+@item q
+Quits WWW mode.  This kills the current buffer and goes to the most
+recently visited buffer.
+@kindex Q
+@findex w3-leave-buffer
+@item u
+This is similar to w3-quit, but the buffer is not killed, it is moved to
+the bottom of the buffer list (so it is the least likely to show up as
+the default with switch-to-buffer).  This is different from
+@code{w3-goto-last-buffer} in that it does not return to the last WWW
+page visited - it is the same as using @code{switch-to-buffer} - the
+buffer left in the window is fairly random. 
+@kindex HB
+@kindex B
+@findex w3-backward-in-history
+@item HB, B
+Takes one step back along the path in the current history.  Has no
+effect if at the beginning of the session history.
+@kindex HF
+@kindex F
+@findex w3-forward-in-history
+@item HF, F
+Takes one step forward along the path in the current history.  Has no
+effect if at the end of the session history.
+@end table
+
+@node Miscellaneous, , Action, Basic Usage
+@section Miscellaneous
+@table @kbd
+@kindex M-m
+@findex w3-mail-current-document
+@item M-m
+Mails the current document to someone.  Choose from several different
+formats to mail: formatted text, HTML source, PostScript, or LaTeX source.
+When the HTML source is mailed, then an appropriate <base> tag is inserted
+at the beginning of the document so that relative links may be followed
+correctly by whoever receives the mail.
+@kindex M-M
+@findex w3-mail-document-under-point
+@item M-M
+Mails the document pointed to by the hypertext link under point to someone.
+Choose from several different formats to mail: formatted text, HTML source,
+PostScript, or LaTeX source.  When the HTML source is mailed, then an
+appropriate <base> tag is inserted at the beginning of the document so that
+relative links may be followed correctly by whoever receives the
+mail.
+@kindex p
+@findex w3-print-this-url
+@item p
+Prints the current document.  Choose from several different formats to
+print: formatted text, HTML source, PostScript (with ps-print), or by using
+LaTeX and dvips).
+
+@findex lpr-buffer
+@vindex lpr-command
+@vindex lpr-switches
+When the formatted text is printed, the normal @code{lpr-buffer} function
+is called, and the variables @code{lpr-command} and @code{lpr-switches}
+control how the document is printed.
+
+When the HTML source is printed, then an appropriate <base> tag is
+inserted at the beginning of the document.
+@vindex w3-use-html2latex
+@vindex w3-html2latex-prog
+@vindex w3-html2latex-args
+@vindex w3-print-commnad
+@vindex w3-latex-docstyle
+When postscript is printed, then the HTML source of the document is
+converted into LaTeX source.  If the variable @code{w3-use-html2latex}
+is non-@code{nil}, then the program specified by
+@code{w3-html2latex-prog} is run in a subprocess with the arguments in
+@code{w3-html2latex-args}.  The @code{w3-html2latex-prog} must accept
+HTML source on its standard input and send the LaTeX output to standard
+output.  If @code{w3-use-html2latex} is @code{nil}, then an Emacs Lisp
+function uses regular expressions to replace the HTML code with LaTeX
+markup.  The variable @code{w3-latex-docstyle} controls how the document
+is laid out in this case, and postscript figures are printed as
+well.
+@kindex P
+@findex w3-print-url-under-point
+@item P
+Prints the document pointed to by the hypertext link under point.
+Please see the previous item for more information.
+@kindex M-x w3-insert-formatted-url
+@findex w3-insert-formatted-url
+@item M-x w3-insert-formatted-url
+Insert a fully formatted HTML link into another buffer.  This gets the
+name and URL of either the current buffer, or, with a prefix arg, of the
+link under point, and construct the appropriate <a...>...</a> markup and
+insert it into the desired buffer.
+@kindex M-tab
+@findex w3-insert-this-url
+@item M-tab
+Inserts the URL of the current document into another buffer.  Buffer is
+prompted for in the minibuffer.  With prefix arg, uses the URL of the
+link under point.
+@kindex U
+@findex w3-use-links
+@item U
+Selects one of the <LINK> tags from this document and fetch it.  Links
+are attributes of a specific document, and can tell such things as who
+made the document, where a table of contents is located, etc.
+
+Link tags specify relationships between documents in two ways.  Normal
+(forward) relationships (where the link has a REL="xxx" attribute), and
+reverse relationships (where the link has a REV="xxx" attribute).  This
+first asks what type of link to follow (Normal or Reverse), then does
+a @code{completing-read} on only the links that have that type of
+relationship.
+@end table
+
+@node Compatibility, , , Top
+@comment  node-name,  next,  previous,  up
+@chapter Compatibility with other Browsers
+Due to the popularity of several other browsers, Emacs-W3 offers an easy
+transition to its much better way of life.  This ranges from being able
+to share the same preferences files and disk cache to actually emulating
+the keybindings used in other browsers.
+
+@ifinfo
+@menu
+* Emulation::			Emacs-W3 can emulate the keybindings and
+				other behaviours of other browsers.
+* Hotlist Handling::            A hotlist is an easy way to keep track of
+				interesting Web pages without having to
+				remember the exact path to get there.
+* Session History::             Keeping a history of documents visited
+				in one Emacs sessions allows the use of
+				'forward' and 'back' buttons easily.
+* Global History::		Keeping a history of all the places ever
+				visited on the web.
+* Annotations::                 Annotations allow comments on other
+				people's Web documents without needing
+				to change the document.
+@end menu
+@end ifinfo
+@node Emulation, Hotlist Handling, Compatibility, Compatibility
+@section Emulation
+:: WORK :: Document lynx emulation
+:: WORK :: Document netscape emulation
+@cindex Browser emulation
+@cindex Emulation of other browsers
+@cindex Netscape emulation
+@cindex Lynx emulation
+@findex turn-on-netscape-emulation
+@findex turn-on-lynx-emulation
+@findex w3-netscape-emulation-minor-mode
+@findex w3-lynx-emulation-minor-mode
+@vindex w3-mode-hook
+
+@node Hotlist Handling, Session History, Emulation, Compatibility
+@section Hotlist Handling
+:: WORK :: Document that it supports different types of hotlist formats
+:: WORK :: Make sure everything hotlist related can be accessed via 'h'
+In order to avoid having to traverse many documents to get to the same
+document over and over, Emacs-W3 supports a ``hotlist'' like Mosaic.  This is
+a file that contains URLs and aliases.  Hotlists allow quick access to any
+document in the Web, providing it has been visited and added to the hotlist.
+The variable @code{w3-hotlist-file} determines where this information
+is saved.  The structure of the file is compatible with Mosaic's
+hotlist file, so this defaults to @file{~/.mosaic-hotlist-default}.
+
+Hotlist commands are:
+@table @kbd
+@kindex hi
+@findex w3-hotlist-add-document
+@vindex w3-hotlist-file
+@item a
+Adds the current document to the hotlist, with the buffer name as its
+identifier.  Modifies the file specified by @code{w3-hotlist-file}.  If
+this is given a @var{prefix-argument} (via @kbd{C-u}), the title is
+prompted for instead of automatically defaulting to the
+document title.
+
+@findex w3-hotlist-refresh
+@vindex w3-hotlist-file
+@kindex hR
+@item hR
+This rereads the default hostlist file specified by
+@code{w3-hotlist-file}.
+@findex w3-hotlist-delete
+@vindex w3-hotlist-file
+@kindex hd
+@item d
+Prompts for the alias of the entry to kill.  Pressing the spacebar or
+tab will list out partial completions.  The internal representation of
+the hotlist and the file specified by @code{w3-hotlist-file} are
+updated. 
+@item hr
+@kindex hr
+@findex w3-hotlist-rename-entry
+@vindex w3-hotlist-file
+Some hotlist item names can be very unwieldy (`Mosaic for X level 2 fill
+out form support'), or uninformative (`Index of /').  Prompts for the
+item to rename in the minibuffer---use the spacebar or tab key for
+completion.  After having chosen an item to rename, prompts for a new
+title until a unique title is entered.  Modifies the file specified by
+@code{w3-hotlist-file}.
+
+@item hu
+@kindex hu
+@findex w3-use-hotlist
+Prompts for the alias to jump to.  Pressing the @key{spacebar} or
+@key{tab} key shows partial completions.
+
+@item hv
+@kindex hv
+@findex w3-show-hotlist
+Converts the hotlist into HTML and displays it.
+@item ha
+@kindex ha
+@findex w3-hotlist-apropos
+Shows the hotlist entries matching a regular expression.
+@item hA
+@kindex hA
+@findex w3-hotlist-append
+Appends another hotlist file to the one currently in memory.
+@end table
+@node Session History, Global History, Hotlist Handling, Compatibility
+@section History
+@cindex History Lists
+Almost all web browsers keep track of the URLs followed from a page, so
+that it can provide @b{forward} and @b{back} buttons to keep a @i{path}
+of URLs that can be traversed easily.
+@vindex url-keep-history
+If the variable @code{url-keep-history} is @code{t}, then Emacs-W3
+keeps a list of all the URLs visited in a session.
+@findex w3-show-history
+To view a listing of the history for this session of Emacs-W3, use
+@code{M-x w3-show-history} from any buffer, and Emacs-W3 generates an
+HTML document showing every URL visited since Emacs started (or
+cleared the history list), and then format it.  Any of the links can
+be chosen and followed to the original document.  To clear the history
+list, choose 'Clear History' from the 'Options' menu.
+
+@findex w3-forward-in-history
+@findex w3-backward-in-history
+@findex w3-fetch
+Another twist on the history list mechanism is the fact that all
+Emacs-W3 buffers remember what URL, buffer, and buffer position of the
+last document, and also keeps track of the next location jumped @b{to}
+from that buffer.  This means that the user can go forwards and
+backwards very easily along the path taken to reach a particular
+document.  To go forward, use the function @code{w3-forward-in-history},
+to go backward, use the function @code{w3-backward-in-history}.
+
+@node Global History, Annotations, Session History, Compatibility
+@section Global History
+:: WORK :: Document that the global history can have diff. formats
+Most web browsers also support the idea of a ``history'' of URLs the
+user has visited, and it displays them in a different style than normal
+URLs.
+
+@vindex url-keep-history
+@vindex url-global-history-file
+If the variable @code{url-keep-history} is @code{t}, then Emacs-W3
+keeps a list of all the URLs visited in a session.  The file is
+automatically written to disk when exiting emacs.  The list is added to
+those already in the file specified by @code{url-global-history-file},
+which defaults to @file{~/.mosaic-global-history}.
+
+If any URL in the list is found in the file, it is not saved, but new
+ones are added at the end of the file.
+
+The function that saves the global history list is smart enough to
+notice what style of history list is being used (Netscape, Emacs-W3, or
+XMosaic), and writes out the new additions appropriately.
+
+@cindex Completion of URLs
+@cindex Usefulness of global history
+One of the nice things about keeping a global history files is that Emacs-W3
+can use it as a completion table.  When doing @kbd{M-x w3-fetch}, pressing
+the @kbd{tab} or @kbd{space} key will show all completions for a
+partial URL.  This is very useful, especially for very long URLs that
+are not in a hotlist, or for seeing all the pages from a particular web
+site before choosing which to retrieve.
+
+@node Annotations, Group Annotations, Global History, Compatibility
+@section Annotations
+@cindex Annotations
+Mosaic can @i{annotate} documents.  Annotations are comments about the
+current document, and these annotations appear as a link to the comments
+at the end of the document.  The original file is not changed.
+ 
+@ifinfo
+@menu
+* Group Annotations::             Annotations accessible by everyone
+* Personal Annotations::          Private annotations only accessible
+				  to the user who created them
+@end menu
+@end ifinfo
+@node Group Annotations, Personal Annotations, Annotations, Annotations
+@subsection Group Annotations
+@cindex Group Annotations
+@b{@i{NOTE}}: The group annotation experiment has been terminated.  It
+will be replaced with support on the server side for adding <LINK> tags
+to documents.
+
+@node Personal Annotations, , Group Annotations, Annotations
+@subsection Personal Annotations
+@cindex Personal Annotations
+@vindex w3-personal-annotation-directory
+Emacs-W3 looks in the directory specified by
+@code{w3-personal-annotation-directory} (defaults to
+@file{~/.mosaic-personal-annotations}).  Any personal annotations for a
+document are automatically appended when it is retrieved.
+
+:: WORK :: Document the new 'a' prefix keymap
+:: WORK :: Tell where the annotations are stored
+
+@findex w3-add-personal-annotation
+@vindex w3-annotation-mode
+To add a new personal annotation, type @kbd{M-x
+w3-add-personal-annotation}.  This creates a new buffer, in the mode
+specified by @code{w3-annotation-mode}.  This defaults to
+@code{html-mode}.  If this variable is @code{nil}, or it points to an
+undefined function, then @code{default-major-mode} is consulted.
+
+A minor mode redefines @kbd{C-c C-c} to complete the annotation and
+store it on the local disk.
+
+@findex w3-delete-personal-annotation
+To delete a personal annotation, it must be the current page.  Once
+reading the annotation, @kbd{M-x w3-delete-personal-annotation} will
+remove it.  This deletes the file containing the annotation, and any
+references to it in the annotation log file.
+
+Editing personal annotations is not yet supported.
+
+@node Controlling Formatting, General Formatting, Top, Top
+@comment  node-name,  next,  previous,  up
+@chapter Controlling Formatting
+@cindex Customizing formatting
+@cindex Specifying Fonts
+@cindex Fonts
+@cindex Colors
+How Emacs-W3 formats a document is very customizable.  How a document is
+displayed depends on whether the user is on a terminal
+capable of graphics and a few variables.
+
+The following sections describe in more detail how to change the
+formatting of a document.
+
+@ifinfo
+@menu
+* General Formatting::                 Changing general things about a
+                                       document.
+* Character based terminals::          Changing how a document is
+                                       displayed on a non-graphics
+                                       terminal (vt100, etc.@:) or if
+                                       @code{w3-delimit-emphasis} is @code{t}.
+* Graphics workstations::              Changing how a document is
+                                       displayed on a graphics terminal
+                                       (Xwindows, Windows, NeXTstep,
+                                       OS/2, etc.)
+* Inlined images::                     How to specify how Emacs-W3
+                                       handles inlined images/mpegs.
+@end menu
+@end ifinfo
+@node General Formatting, Character based terminals, Controlling Formatting, Controlling Formatting
+@section General formatting conventions
+@iftex
+@heading Setting the fill column
+@end iftex
+@ifinfo
+@center --------------------
+@center Setting the fill column
+@center --------------------
+@end ifinfo
+@vindex fill-column
+@vindex w3-right-border
+Each time a document is parsed, the @code{fill-column} is recalculated
+using @code{window-width} and @code{w3-right-border}.
+@code{w3-right-border} is an integer specifying how much room at the
+right edge of the screen to leave blank.  The @code{fill-column} is set
+to @code{(- (window-width) @code{w3-right-border})}.
+@iftex
+@heading Formatting of hypertext links
+@end iftex
+@ifinfo
+@center --------------------
+@center Formatting of hypertext links
+@center --------------------
+@end ifinfo
+@vindex w3-delimit-links
+@vindex w3-link-start-delimiter
+@vindex w3-link-end-delimiter
+If the variable @code{w3-delimit-links} is non-@code{nil} (the default
+for text-terminals), then hypertext links are surrounded by text
+specified by the user.  The variables @code{w3-link-start-delimiter} and
+@code{w3-link-end-delimiter} control what text is at the start and end
+of a hypertext link.  These variables are cons-pairs of two
+strings.
+
+If a link has never been visited before (it is not in the @i{global
+history}), then the @code{car} of these variables is inserted at the
+start and end of the link.  If the link has been visited before, then
+the @code{cdr} is inserted.  So, links look like:
+
+@example
+[[This is a hypertext link]] that has never been visited.
+@{@{This one, however@}@} has been seen before at some point in time.
+@end example
+
+@iftex
+@heading Formatting of lists
+@end iftex
+@ifinfo
+@center --------------------
+@center Formatting of lists
+@center --------------------
+@end ifinfo
+@cindex Indentation
+@vindex w3-indent-level
+There are several different ways to control the formatting of lists.
+The most obvious is how deeply they are indented relative to the rest of
+the paragraphs in the document.  To control this, set the
+variable @code{w3-indent-level}.  This is the number of spaces to
+indent lists and other items requiring special margins.
+
+@vindex w3-list-chars-assoc
+Another thing that is easy to change about lists is the bullet character
+put at the front of each list item.  This is controlled by the variable
+@code{w3-list-chars-assoc}, which is an assoc list.  This is a list of
+lists, each sublist describing what to put at the start of each
+particular list type.  The @code{car} of this list should be a symbol
+(@b{not} a string) representing the type of list (e.g., @samp{ul}).
+The rest of the list should consist of strings to insert at certain
+levels of lists.  The @code{n}th element of this list is used when the
+list is nested @code{n + 1} levels.  If the list is not long enough to
+define a string for a certain nesting level, then it defaults to either
+a '*' or a '.'.
+@iftex
+@heading Formatting of directory listings
+@end iftex
+@ifinfo
+@center --------------------
+@center Formatting of directory listings
+@center --------------------
+@end ifinfo
+@vindex url-use-hypertext-dired
+When Emacs-W3 encounters a link to a directory (whether by local file access
+or via FTP), it can either create an HTML document on the fly, or use
+@code{dired-mode} to peruse the listing.  The variable
+@code{url-use-hypertext-dired} controls this behavior.
+
+If the value is @code{t}, Emacs-W3 uses @code{directory-files} to list them
+out and transform the directory into a hypertext document, then pass it
+through the parser like any other document.
+
+If the value is @code{nil}, just pass the directory off to dired using
+@code{find-file}.  Using this option loses all the hypertext abilities
+of Emacs-W3, and the users is unable to load documents in the directory
+directly into Emacs-W3 by clicking with the mouse, etc.
+
+@ignore
+@cindex Downloading multiple files
+@cindex FTP'ing multiple files
+@vindex url-forms-based-ftp
+A new option in the 2.2 series is @code{url-forms-based-ftp} - this is
+still in the experimental stages, but can be useful.  If
+@code{url-forms-based-ftp} is @code{t}, then all automatically generated
+directory listings will have a form mixed in with the file listing.
+Each file will have a checkbox next to it, and a row of buttons at the
+bottom of the screen.  Selecting one of the buttons at the bottom of the
+screen will take the designated action on all the marked files.
+Currently, only deleting and copying marked files is supported.
+@end ignore
+@iftex
+@heading Formatting of gopher directories
+@end iftex
+@ifinfo
+@center --------------------
+@center Formatting of gopher directories
+@center --------------------
+@end ifinfo
+@vindex w3-use-hypertext-gopher
+@cindex Gopher+
+@cindex ASK blocks
+There are two different ways of viewing gopher links.  The built-in
+support that converts gopher directories into HTML, or the
+@file{gopher.el} package by Scott Snyder (@i{snyder@@fnald0.fnal.gov}).
+The variable that controls this is @code{w3-use-hypertext-gopher}.  If
+set to @code{nil}, then @file{gopher.el} is used.  Any other value
+causes Emacs-W3 to use its internal gopher support.  If using
+@file{gopher.el}, all the hypertext capabilities of Emacs-W3 are lost.
+All the functionality of @file{gopher.el} is now available in the
+hypertext version, and the hypertext version supports Gopher+ and ASK
+blocks. 
+
+@vindex w3-gopher-labels
+The main way to control the display of gopher directories is by the
+variable @code{w3-gopher-labels}.  This variable controls the text that
+is inserted at the front of each item.  This is an assoc list of gopher
+types (as one character strings), and a string to insert just after the
+list item.  All the normal gopher types are defined.  Entries should be
+similar to: @samp{("0" . "(TXT)")}.  I have tried to keep all the tags
+to three characters plus two parentheses. 
+@iftex
+@heading Creating a horizontal rule
+@end iftex
+@ifinfo
+@center --------------------
+@center Creating a horizontal rule
+@center --------------------
+@end ifinfo
+@vindex w3-horizontal-rule-char
+Horizontal rules (@b{<HR>} tags in HTML[+]) are used to separate chunks
+of a document, and is meant to be rendered as a solid line across the
+page.  Some terminals display characters differently, so the variable
+@code{w3-horizontal-rule-char} controls which character is used to draw a
+horizontal bar.  This variable must be the ASCII value of the character,
+@b{not a string}.  The variable is passed through make-string whenever a
+horizontal rule of a certain width is necessary.
+
+@node Character based terminals, Graphics workstations, General Formatting, Controlling Formatting
+@section On character based terminals
+@vindex w3-delimit-emphasis
+On character based terminals, there is no easy way to show that a
+certain range of text is in bold or italics.  If the variable
+@code{w3-delimit-emphasis} is non-@code{nil}, then Emacs-W3 can insert
+characters before and after character formatting commands in HTML
+documents.  The defaul value of @code{w3-delimit-emphasis} is
+automatically set based on the type of window system and version of
+Emacs being used. 
+
+@vindex w3-header-chars-assoc
+:: WORK ::
+
+@findex w3-upcase-region
+@code{w3-header-chars-assoc} is an assoc list of header tags and a list
+of formatting instructions.  The @code{car} of the list is the level of
+the header (1--6).  The rest of the list should contain three items.
+The first item is text to insert before the header.  The second item is
+text to insert after the header.  Both should have reserved characters
+converted to their HTML[+] entity definitions.  The third item is a
+function to call on the area the header is in.  This function is called
+with arguments specifying the start and ending character positions of
+the header.  The starting point is always first.  To convert a region to
+upper case, please use @code{w3-upcase-region} instead of
+@code{upcase-region}, so that entities are converted properly.
+
+@node Graphics workstations, Inlined images, Character based terminals, Controlling Formatting
+@section With graphics workstations
+Starting with the first public release of version 2.3.0, all formatting
+is controlled by the use of stylesheets.
+
+:: WORK :: Graphic workstation stuff - redo for stylesheets
+
+@node Inlined images, , Graphics workstations, Controlling Formatting
+@cindex Inlined images
+@cindex Images
+@cindex Movies
+@cindex Inlined MPEGs
+@cindex MPEGs
+When running in Lucid Emacs 19.10 or XEmacs 19.11 and higher, Emacs-W3 can
+display inlined images and MPEG movies.  There are several variables that
+control how and when the images are displayed.
+
+@cindex Netpbm
+@cindex Pbmplus
+@vindex w3-graphic-converter-alist
+Since Lucid/XEmacs only natively understands XPixmaps and XBitmaps, GIFs
+and other image types must first be converted to one of these formats.
+To do this, the @b{netpbm utilities}@footnote{Available via anonymous
+ftp from ftp.x.org:/R5contrib/netpbm-1mar1994.tar.gz, and most large ftp
+sites.} programs are normally used.  This is a suite of freeware image
+conversion tools.  The variable @code{w3-graphic-converter-alist}
+controls how each image type is converted.  This is an assoc list, keyed
+on the MIME content-type.  The @code{car} is the content-type, and the
+@code{cdr} is a string suitable to pass to @code{format}.  A %s in this
+string will be replaced with a converter from the ppm image format to an
+XPixmap (or XBitmap, if being run on a monochrome display).  By default,
+the Emacs-W3 browser has converters for:
+
+@enumerate
+@item
+image/x-xbitmap
+@item
+image/xbitmap
+@item
+image/xbm
+@item
+image/gif
+@item
+image/jpeg
+@item
+image/x-fax
+@item
+image/x-raster
+@item
+image/windowdump
+@item
+image/x-icon
+@item
+image/portable-graymap
+@item
+image/portable-pixmap
+@item
+image/x-pixmap
+@item
+image/x-xpixmap
+@item
+image/pict
+@item
+image/x-macpaint
+@item
+image/x-targa
+@item
+image/tiff
+@end enumerate
+
+@vindex w3-color-max-blue
+@vindex w3-color-max-green
+@vindex w3-color-max-red
+@vindex w3-color-use-reducing
+@vindex w3-color-filter
+Since most displays are (sadly) not 24-bit, Emacs-W3 can automatically
+dither an image, so that it does not fill up the application' colormap too
+quickly.  If @code{w3-color-use-reducing} is non-@code{nil}, then the
+images will use reduced colors.  If @code{w3-color-filter} is @code{eq} to
+@code{'ppmquant}, then the ppmquant program will be used.  If @code{eq} to
+@code{'ppmdither}, then the ppmdither program will be used.  The ppmdither
+program tends to give better results.  The values of
+@code{w3-color-max-red}, @code{w3-color-max-blue}, and
+@code{w3-color-max-green} control how many colors the inlined images can
+use.  If using ppmquant, then the product of these three variables is used
+as the maximum number of colors per image.  If using ppmdither, then only
+the set number of color cells can be allocated per image.  See the man
+pages for ppmdither and ppmquant for more information on how the dithering
+is actually done.  @code{w3-color-filter} may also be a string, specifying
+exactly what external filter to use.  An example is: @samp{ppmquant -fs
+-map ~/pixmaps/colormap.ppm}.
+
+@cindex MPEGs
+@cindex Inlined animations
+When running in XEmacs 19.11 or XEmacs 19.12, Emacs-W3 can insert an
+MPEG movie in the middle of a buffer.  
+
+:: WORK :: Need a pointer to the new EMBED Internet Draft ::
+
+The basic syntax is:
+@example
+<embed href="somevideo.mpg" type="video/mpeg">
+@end example
+
+@vindex w3-mpeg-args
+@vindex w3-mpeg-program
+This requires a special version of the standard @file{mpeg_play} mpeg
+player.  Patches against the 2.0 version are available at
+ftp://ftp.cs.indiana.edu/pub/elisp/w3/mpeg_patch.  The variable
+@code{w3-mpeg-program} should point to this executable, and
+@code{w3-mpeg-args} should be a list of any additional arguments to be
+passed to the player.  By default, this includes @var{-loop}, so the
+mpeg plays continuously.
+
+@cindex Delaying inlined images
+@cindex Delaying inlined animations
+@vindex w3-delay-image-loads
+@vindex w3-delay-mpeg-loads
+Because images and movies can take up an incredible amount of bandwidth,
+it is useful to be able to control whether they are loaded or not.  By
+default, images and movies are loaded automatically, but the variables
+@code{w3-delay-image-loads} and @code{w3-delay-mpeg-loads} control this.
+If set to non-@code{nil}, then the images or movies are not
+loaded until explicitly requested by the user.
+
+@cindex Loading delayed images
+@cindex Loading delayed movies
+@findex w3-load-delayed-images
+@findex w3-load-delayed-mpegs
+To load any delayed images, use the function
+@code{w3-load-delayed-images}.  Its counterpart for delayed movies is
+@code{w3-load-delayed-mpegs}
+
+@node MIME Support, Adding MIME types based on file extensions, , Top
+@chapter MIME Support
+MIME is an emerging standard for multimedia mail.  It offers a very
+flexible typing mechanism.  The type of a file or message is specified
+in two parts, separated by a '/'.  The first part is the general
+category of the data (text, application, image, etc.).  The second part
+is the specific type of data (postscript, gif, jpeg, etc.).  So
+@samp{text/html} specifies an HTML document, whereas
+@samp{image/x-xwindowdump} specifies an image of an Xwindow taken with
+the @file{xwd} program.
+
+
+This typing allows much more flexibility in naming files.  HTTP/1.0
+servers can now send back content-type headers in response to a request,
+and not have the client second-guess it based on file extensions.  HTML
+files can now be named @file{something.gif} (not a great idea, but
+possible).
+
+@ifinfo
+@menu
+* Adding MIME types based on file extensions::  How to map file
+                                                extensions onto MIME
+                                                types (e.g., @samp{.gif ->
+                                                image/gif)}.
+* Specifying Viewers::  How to specify external and internal viewers
+                        for files that Emacs-W3 cannot handle natively.
+@end menu
+@end ifinfo
+
+@node Adding MIME types based on file extensions, Specifying Viewers, MIME Support, MIME Support
+@section Adding MIME types based on file extensions
+@vindex mm-mime-extensions
+For some protocols however, it is still necessary to guess the content
+of a file based on the file extension.  This type of guess-work should
+only be needed when accessing files via FTP, local file access, or old
+HTTP/0.9 servers.
+
+Instead of specifying how to view things twice, once based on
+content-type and once based on the file extension, it is easier to map
+file extensions to MIME content-types.  The variable that controls this
+is @code{mm-mime-extensions}.
+
+This variable is an assoc list of file extensions and the corresponding
+MIME content-type.  A sample entry looks like: @samp{(".movie"
+. "video/x-sgi-movie")} This makes all files that end in @file{.movie}
+(@file{foo.movie} and @file{bar.movie}) be interpreted as SGI animation
+files.  If a content-type is defined for the document, then this is
+over-ridden.  Regular expressions can @b{NOT} be used.
+
+@cindex mime-types file
+@findex mm-parse-mimetypes
+Both Mosaic and the NCSA HTTP daemon rely on a separate file for mapping
+file extensions to MIME types.  Instead of having the users of Emacs-W3
+duplicate this in lisp, this file can be parsed using the
+@code{url-parse-mimetypes} function.  This function is called each time
+w3 is loaded.  It tries to locate mimetype files in several places. If
+the environment variable @code{MIMETYPES} is nonempty, then this is
+assumed to specify a UNIX-like path of mimetype files (this is a colon
+separated string of pathnames).  If the @code{MIMETYPES} environment
+variable is empty, then Emacs-W3 looks for these files:
+
+@enumerate
+@item
+@file{~/.mime-types}
+@item
+@file{/etc/mime-types}
+@item
+@file{/usr/etc/mime-types}
+@item
+@file{/usr/local/etc/mime-types}
+@item
+@file{/usr/local/www/conf/mime-types}
+@end enumerate
+
+Each line contains information for one http type.  These types resemble
+MIME types.  To add new ones, use subtypes beginning with x-, such as
+application/x-myprogram.  Lines beginning with # are comment lines, and
+suitably ignored.  Each line consists of:
+
+type/subtype ext1 ext2 ...  ext@var{n}
+
+type/subtype is the MIME-like type of the document. ext* is any number
+of space-separated filename extensions which correspond to the MIME
+type.
+
+@node Specifying Viewers, ,Adding MIME types based on file extensions, MIME Support
+@section Specifying Viewers
+Not all files look as they should when parsed as an HTML document
+(whitespace is stripped, paragraphs are reformatted, and lots of little
+changes that make the document look unrecognizable).  Files may be
+passed to external programs or Emacs Lisp functions to be viewed.
+
+Not all files can be viewed accurately from within an Emacs session (GIF
+files for example, or audio files).  For this reason, the user can
+specify file "viewers" based on MIME content-types.  This is done with
+a standard mailcap file.  @xref{Mailcap Files}
+
+@findex mm-add-mailcap-entry
+As an alternative, the function @code{mm-add-mailcap-entry} can also be
+used from an appropriate hook.@xref{Hooks}  This functions takes three
+arguments, the major type ("@i{image}"), the minor type ("@i{gif}"), and
+an assoc list of information about the viewer.  Please see the URL
+documentation for more specific information on what this assoc list
+should look like.
+
+@node Security, Non-Unix Operating Systems, , Top
+@chapter Security
+@cindex Security
+@cindex Paranoia
+There are an increasing number of ways to authenticate a user to a web
+service.  Emacs-W3 tries to support as many as possible.  Emacs-W3
+currently supports:
+
+@table @b
+@item Basic Authentication
+@cindex Security, Basic
+@cindex HTTP/1.0 Authentication
+@cindex Authentication, Basic
+The weakest authentication available, not recommended if serious
+security is necessary.  This is simply a string that looks like
+@samp{user:password} that has been Base64 encoded, as defined in RFC
+1421.
+@item Digest Authentication
+@cindex Security, Digest
+@cindex HTTP/1.0 Authentication
+@cindex Authentication, Digest
+Jeffery L. Hostetler, John Franks, Philip Hallam-Baker, Ari Luotonen,
+Eric W. Sink, and Lawrence C. Stewart have an internet draft for a new
+authentication mechanism.  For the complete specification, please see
+draft-ietf-http-digest-aa-01.txt in the nearest internet drafts
+archive@footnote{One is ftp://ds.internic.net/internet-drafts}.
+@item SSL Encryption
+@cindex HTTP/1.0 Authentication
+@cindex Secure Sockets Layer
+@cindex SSL
+@cindex Gag Puke Retch
+@cindex Exportability
+@cindex Export Restrictions
+SSL is the @code{Secure Sockets Layer} interface developed by Netscape
+Communications @footnote{http://www.netscape.com/}.  Emacs-W3 supports
+HTTP transfers over an SSL encrypted channel, if the appropriate files
+have been installed.@xref{Installing SSL}
+@item PGP/PEM
+@cindex HTTP/1.0 Authentication
+@cindex Public Key Cryptography
+@cindex Authentication, PGP
+@cindex Authentication, PEM
+@cindex RIPEM
+@cindex Public Key Cryptography
+@cindex PGP
+@cindex Pretty Good Privacy
+@cindex Encryption
+@cindex Security
+@cindex ITAR must die
+@cindex Stupid export restrictions
+@cindex Support your local crypto-anarchist
+@cindex NSA freaks
+A few servers still support this method of authentication, but it has
+been superseded by SSL and Secure-HTTP.@xref{Using PGP/PEM}
+@end table
+
+@node Non-Unix Operating Systems, VMS, Security, Top
+@chapter Non-Unix Operating Systems
+@cindex Non-Unix Operating Systems
+@ifinfo
+@menu
+* VMS::                 The wonderful world of VAX|AXP-VMS!
+* OS/2::                The next-best thing to Unix.
+* MS-DOS::              The wonderful world of MS-DOG!
+* 16-Bit Windows::      Windows 3.1, 3.11, and WFW 3.11.
+* 32-Bit Windows::      Windows NT, Chicago/Windows 95.
+* Amiga::               The Amiga, for those who still love them.
+@end menu
+@end ifinfo
+
+@node VMS, OS/2, Non-Unix Operating Systems, Non-Unix Operating Systems
+@section VMS
+@cindex VAX-VMS
+@cindex AXP-VMS
+@cindex Digital VMS
+@cindex VMS
+:: WORK :: VMS Specific instriuctions
+
+@node OS/2, MS-DOS, VMS, Non-Unix Operating Systems
+@section OS/2
+@cindex OS/2
+@cindex Warp
+:: WORK :: OS/2 Specific instructions
+
+@node MS-DOS, 16-Bit Windows, OS/2, Non-Unix Operating Systems
+@section MS-DOS
+@cindex MS-DOS
+@cindex Microsloth
+@cindex DOS
+@cindex MS-DOG
+:: WORK :: DOS Specific instructions
+
+@node 16-Bit Windows, 32-Bit Windows, MS-DOS, Non-Unix Operating Systems
+@section 16-Bit Windows
+@cindex 16-Bit Windows
+@cindex Microsloth
+@cindex Windows (16-Bit)
+@cindex Windows For Workgroups
+:: WORK :: 16bit Windows Specific instructions
+
+@node 32-Bit Windows, Amiga, 16-Bit Windows, Non-Unix Operating Systems
+@section 32-Bit Windows
+@cindex Chicago
+@cindex Windows (32-Bit)
+@cindex 32-Bit Windows
+@cindex Microsloth
+@cindex Windows '95
+:: WORK :: 32bit Windows Specific instructions
+
+@node Amiga, Advanced Features, 32-Bit Windows, Non-Unix Operating Systems
+@section Amiga
+@cindex Amiga
+@cindex Commodore
+:: WORK :: Amiga specific instructions
+
+@node Advanced Features, Style Sheets, Amiga, Top
+@comment  node-name,  next,  previous,  up
+@chapter Advanced Features
+
+@ifinfo
+@menu
+* Style Sheets::        Formatting control, the right way
+* Disk Caching::        Improving performance by using a local disk cache
+* Interfacing to Mail/News::	How to make VM understand hypertext links
+* Debugging HTML::      How to make Emacs-W3 display warnings about invalid
+                        HTML/HTML+ constructs.
+* Native WAIS Support:: How to make Emacs-W3 understand WAIS links without
+                        using a gateway.
+* Rating Links::        How to make Emacs-W3 put an 'interestingness' value
+                        next to each link.
+* Gopher Plus Support:: How Emacs-W3 makes use of the Gopher+ protocol.
+* Hooks::               Various hooks to use throughout Emacs-W3
+* Other Variables::     Miscellaneous variables that control the real
+                        guts of Emacs-W3.
+@end menu
+@end ifinfo
+
+@node Style Sheets, Disk Caching, Advanced Features, Advanced Features
+@section Style Sheets
+@cindex Formatting control
+@cindex Style sheets
+@cindex Look and Feel
+@cindex Layout control
+@cindex Experimental style sheet mechanism
+Emacs-W3 currently supports the experimental style sheet mechanism
+proposed by H&kon W. Lie of the W3 Consortium.  This allows for the
+author to specify what a document should look like, and yet allow the
+end user to override any of the stylistic changes.  This allows for
+people with special needs (most notably the visually impaired) to
+override style bindings that could make a document totally
+unreadable.
+
+@example
+<style notation="css">
+/* This is a comment
+** These will be ignored, up to the terminating end-of-line
+#
+h1 @{ align: center,
+     color: yellow,
+     background: red,
+     font-size: 24pt
+   @}
+h2 @{ align: right,
+     font-family: palatino,
+     font-size: 18pt
+   @}
+</style>
+@end example
+
+:: WORK :: Much more information on stylesheets
+
+@cindex <style>
+To include a stylesheet into a document, simply use the <style> tag.
+Use the @b{notation} attribute to specify what language the stylesheet
+is specified in.  The default is @b{css}.  The data between the <style>
+and </style> tags is the stylsheet proper - no HTML parsing is done to
+this data - it is treated similar to an <XMP> section of text.  To
+reference an external stylesheet, use the <link> tag.
+@example
+<link rel="stylesheet" href="/bill.style">
+@end example
+If these two mechanisms are mixed, then the URL is resolved first, and
+the contents of the <style> tag take precedence if there are any
+conflicting directives.
+
+@cindex DSSSL
+@cindex DSSSL-lite
+In the future, DSSSL and DSSSL-lite will be supported as valid
+stylesheet languages, but not in this release.  For more information on
+DSSSL-lite see http://www.falch.no/~pepper/DSSSL-Lite/ - for more
+information on full DSSSL, see
+ftp://ftp.jclark.com/pub/dsssl/dsssl.ps.gz
+
+@node Disk Caching, Interfacing to Mail/News, Style Sheets, Advanced Features
+@section Disk Caching
+@cindex Caching
+@cindex Persistent Cache
+@cindex Disk Cache
+A cache stores the information on a page on the local machine.  When
+requesting a page that is in the cache, Emacs-W3 can retrieve the page
+from the cache more quickly than retrieving the page again from its
+location out on the network.  With a well-populated cache, browsing the
+web is dramatically faster.
+
+The first time a page is requested, Emacs-W3 retrieves the page from the
+network.  When requesting a page that is in the cache, Emacs-W3 checks
+to see if the page has changed since it was last retrieved from the
+remote machine.  If it has not changed, the local copy is used, saving
+the transmission of the file over the network.
+
+@vindex url-automatic-caching
+@cindex Turning on caching
+@cindex Cleaning the cache
+@cindex Clearing the cache
+@cindex Cache cleaning
+@cindex Limiting the size of the cache
+To turn on disk caching, set the variable @code{url-automatic-caching}
+to non-@code{nil}, or choose the 'Caching' menu item (under `Options').
+That is all there is to it.  Running the @code{clean-cache} shell script
+fist is recommended, to allow for future cleaning of the cache.  This
+shell script will remove all files that have not been accessed since it
+was last run.  To keep the cache pared down, it is recommended that this
+script be run from @i{at} or @i{cron} (see the manual pages for
+crontab(5) or at(1) for more information)
+
+
+@cindex Relying on cache
+@cindex Cache only mode
+@cindex Standalone mode
+@cindex Browsing with no network connection
+@cindex Netless browsing
+@vindex url-standalone-mode
+With a large cache of documents on the local disk, it can be very handy
+when traveling, or any other time the network connection is not active
+(a laptop with a dial-on-demand PPP connection, etc).  Emacs-W3 can rely
+solely on its cache, and avoid checking to see if the page has changed
+on the remote server.  In the case of a dial-on-demand PPP connection,
+this will keep the phone line free as long as possible, only bringing up
+the PPP connection when asking for a page that is not located in the
+cache.  This is very useful for demonstrations as well.  To turn this
+feature on, set the variable @code{url-standalone-mode} to
+non-@code{nil}, or choose the `Use Cache Only' menu item (under
+`Options')
+
+@cindex Caching options
+@cindex Alternate caching method
+Emacs-W3 caches files under the temporary directory specified by
+@code{url-temporary-directory}, in a user-specific subdirectory
+(determined by the @code{user-real-login-name} function).  The cache
+files are stored under their original names, so a URL like:
+http://www.spry.com/foo/bar/baz.html would be stored in a cache file
+named: /tmp/wmperry/com/spry/www/foo/bar/baz.html.  Sometimes, espcially
+with gopher links, there will be name conflicts, and an error will be
+signalled.  This cannot be avoided, and still have reasonable
+performance at startup time (reading in an index file of all the cached
+pages can take a long time on slow machines, or even fast machines with
+large caches).  When running XEmacs 19.12 or later, a different naming
+scheme can be used.  This avoids name conflicts, but loses the human
+readability of the cache file names.  The cache files will look like:
+/tmp/wmperry/acbd18db4cc2f85cedef654fccc4a4d8, which is certainly
+unique, but not very user-friendly.  To turn this on, add this to the
+@file{.emacs} file:
+
+
+@example
+(add-hook 'w3-load-hooks '(lambda ()
+                             (fset 'url-create-cached-filename
+                                   'url-create-cached-filename-using-md5)))
+@end example
+
+If other versions of emacs will not be sharing the cache, I highly
+recommend this method of creating the cache filename.
+ 
+
+@node Interfacing to Mail/News, Debugging HTML, Disk Caching, Advanced Features
+@section Interfacing to Mail/News
+@cindex Interfacing to Mail/News
+@cindex VM
+@cindex Using Emacs-W3 with VM
+@cindex GNUS
+@cindex Using Emacs-W3 with GNUS
+@cindex RMAIL
+@cindex Using Emacs-W3 with RMAIL
+More and more people are including URLs in their signatures, and within
+the body of mail messages.  It can get quite tedious to type these into
+the minibuffer to follow one. 
+
+With the latest versions of VM (the 5.9x series of betas), URLs are
+highlighted, and can be followed with the mouse or the return
+key.
+
+To access URLs from within RMAIL, the following hook should do the
+trick.
+@example
+(add-hook 'rmail-mode-hook
+	  (function
+	   (lambda ()
+	     (define-key rmail-mode-map [mouse-2] 'w3-maybe-follow-link-mouse)
+	     (define-key rmail-mode-map "\r"      'w3-maybe-follow-link))))
+@end example
+
+To access URLs from within GNUS, the following hook should do the
+trick.
+@example
+(add-hook 'gnus-article-mode-hook
+          (function
+            (lambda ()
+              (define-key gnus-article-mode-map [mouse-2]
+                          'w3-maybe-follow-link-mouse)
+              (define-key gnus-article-mode-map "\r"
+                          'w3-maybe-follow-link))))
+@end example
+
+@node Debugging HTML, Native WAIS Support, Interfacing to Mail/News, Advanced Features
+@section Debugging HTML
+@cindex Debugging
+@cindex Invalid HTML
+@cindex Bad HTML
+@vindex w3-debug-buffer
+@vindex w3-debug-html
+For those people that are adventurous, or are just as anal as I am about
+people writing valid HTML, set the variable @code{w3-debug-html} to
+@code{t} and see what happens.
+
+
+If a Emacs-W3 thinks it has encountered invalid HTML, then a debugging
+message is displayed.
+
+:: WORK :: Need to list the different values w3-debug-html can have, and
+:: WORK :: what they do ::
+
+@node Native WAIS Support, Rating Links, Debugging HTML, Advanced Features
+@section Native WAIS Support
+This version of Emacs-W3 supports native WAIS querying (earlier
+versions required the use of a gateway program).  In order to use the
+native WAIS support, a working @dfn{waisq} binary is required.  I
+recommend the distribution from think.com -
+ftp://think.com/wais/wais-8-b6.1.tar.Z is a good place to start.
+
+@vindex url-waisq-prog
+@vindex url-wais-gateway-server
+@vindex url-wais-gateway-port
+The variable @code{url-waisq-prog} must point to this executable, and
+one of @code{url-wais-gateway-server} or @code{url-wais-gateway-port}
+should be @code{nil}.
+
+When a WAIS URL is encountered, a form will be automatically generated
+and displayed.  After typing in the search term, the query will be sent
+to the server by running the @code{url-waisq-prog} in a subprocess.  The
+results will be converted into HTML and displayed.
+
+@node Rating Links, Gopher Plus Support, Native WAIS Support, Advanced Features
+@section Rating Links
+The @code{w3-link-info-display-function} variable can be used to 'rate' a URL
+when it shows up in an HTML page.  If non-@code{nil}, then this should
+be a list specifying (or a symbol specifying the name) of a function.
+This function should expect one argument, a fully specified URL, and
+should return a string.  This string is inserted after the link
+text.
+
+If a user has decided that all links served from blort.com are too laden
+with images, and wants to be warned that a link points at this host,
+they could do something like this:
+
+@example
+(defun check-url (url)
+  (if (string-match "://[^/]blort.com" url)
+     "[SLOW!]" ""))
+
+(setq w3-link-info-display-function 'check-url)
+@end example
+
+So that all links pointing to any site at blort.com shows up as "Some
+link[SLOW!]" instead of just "Some link".
+
+@node Gopher Plus Support, Hooks, Rating Links, Advanced Features
+@section Gopher+ Support
+@cindex Gopher+
+The gopher+ support in Emacs-W3 is limited to the conversion of ASK
+blocks into HTML 3.0 forms, and the usage of the content-length given by
+the gopher+ server to give a nice status bar on the bottom of the
+screen.
+
+This will hopefully be extended to include the Gopher+ method of
+content-type negotiation, but this may be a while.
+
+@node Hooks, Other Variables, Gopher Plus Support, Advanced Features
+@section Hooks
+@cindex Hooks
+These are the various hooks that can be used to customize some of
+Emacs-W3's behavior.  They are arranged in the order in which they would
+happen when retrieving a document.  All of these are functions (or lists
+of functions) that are called consecutively.
+
+@table @code
+@vindex w3-load-hooks
+@item w3-load-hooks
+These hooks are run by @code{w3-do-setup} the first time a URL is
+fetched.  All the w3 variables are initialized before this hook is
+run.
+@item w3-file-done-hooks
+These hooks are run by @code{w3-prepare-buffer} after all parsing on a
+document has been done.  All @code{url-current-}@var{*} and
+@code{w3-current-}@var{*} variables are initialized when this hook is run.
+This is run before the buffer is shown, and before any inlined images
+are downloaded and converted.
+@item w3-file-prepare-hooks
+These hooks are run by @code{w3-prepare-buffer} before any parsing is
+done on the HTML file.  The HTTP/1.0 headers specified by
+@code{w3-show-headers} have been inserted, the syntax table has been set
+to @code{w3-parse-args-syntax-table}, and any personal annotations have
+been inserted by the time this hook is run.
+@item w3-mode-hooks
+These hooks are run after a buffer has been parsed and displayed, but
+before any inlined images are downloaded and converted.
+@item w3-source-file-hooks
+These hooks are run after displaying a document's source
+@end table
+
+@node Other Variables, , Hooks, Advanced Features
+@section Miscellaneous variables
+There are lots of variables that control the real nitty-gritty of Emacs-W3
+that the beginning user probably shouldn't mess with.  Here they are.
+
+@table @code
+@item url-bad-port-list
+@vindex url-bad-port-list
+List of ports to warn the user about connecting to.  Defaults to just
+the mail and NNTP ports so a malicious HTML author cannot spoof mail or
+news to other people.
+@item url-confirmation-func
+@vindex url-confirmation-func
+What function to use for asking yes or no functions.  Possible values
+are @code{'yes-or-no-p} or @code{'y-or-n-p}, or any function that takes
+a single argument (the prompt), and returns @code{t} only if a positive
+answer is gotten.  Defaults to @code{'yes-or-no-p}.
+@item w3-delimit-links
+@vindex w3-delimit-links
+:: WORK :: This is going away, and should be specified with stylesheets instead
+@item w3-delimit-emphasis
+@vindex w3-delimit-emphasis
+:: WORK :: This is going away, and should be specified with stylesheets instead
+@item w3-default-action
+@vindex w3-default-action
+A lisp symbol specifying what action to take for files with extensions
+that are not in the @code{mm-mime-extensions} assoc list.  This is
+useful in case Emacs-W3 ever run across files with weird extensions
+(.foo, .README, .READMEFIRST, etc.).  In most circumstances, this should
+not be required anymore.
+
+Possible values: any lisp symbol.  Should be a function that takes no
+arguments.  The return value does not matter, it is ignored.  Some examples
+are @code{'w3-prepare-buffer} or @code{'indented-text-mode}.
+@ignore
+@item w3-icon-directory-list
+@vindex w3-icon-directory-list
+A list of directorys to look in for the w3 standard icons...  must end
+in a /!  If the directory @code{data-directory}/w3 exists, then this is
+automatically added to the default value of
+http://cs.indiana.edu/elisp/w3/icons/.
+@end ignore
+@item w3-keep-old-buffers
+@vindex w3-keep-old-buffers
+Whether to keep old buffers around when following links.  To avoid lots
+of buffers in one Emacs session, set this variable to @code{nil}.  I
+recommend setting it to @code{t}, so that backtracking from one link to
+another is faster.
+
+@item url-passwd-entry-func
+@vindex url-passwd-entry-func
+This is a symbol indicating which function to call to read in a
+password.  If this variable is @code{nil} at startup, it is initialized
+depending on whether @dfn{EFS} or @dfn{ange-ftp} is being used.  This
+function should accept the prompt string as its first argument, and the
+default value as its second argument.
+
+@item w3-reuse-buffers
+@vindex w3-reuse-buffers
+Determines what happens when @code{w3-fetch} is called on a document
+that has already been loaded into another buffer.  Possible values are:
+@code{nil}, @code{yes}, and @code{no}.  @code{nil} will ask the user if
+Emacs-W3 should reuse the buffer (this is the default value).  A value of
+@code{yes} means assume the user wants to always reuse the buffer.  A
+value of @code{no} means assume the user always wants to re-fetch the
+document.
+@item w3-show-headers
+@vindex w3-show-headers
+This is a list of HTTP/1.0 headers to show at the end of a buffer.  All
+the headers should be in lowercase.  They are inserted at the end of the
+buffer in a <UL> list.  Alternatively, if this is simply @code{t}, then
+all the HTTP/1.0 headers are shown.  The default value is
+@code{nil}.
+@item w3-show-status, url-show-status
+@vindex url-show-status
+@vindex w3-show-status
+Whether to show progress messages in the minibuffer.
+@code{w3-show-status} controls if messages about the parsing are
+displayed, and @code{url-show-status} controls if a running total of the
+number of bytes transferred is displayed.  These Can cause a large
+performance hit if using a remote X display over a slow link, or a
+terminal with a slow modem.
+@item mm-content-transfer-encodings
+@vindex mm-content-transfer-encodings
+An assoc list of @var{Content-Transfer-Encodings} or
+@var{Content-Encodings} and the appropriate decoding algorithms for each.
+If the @code{cdr} of a node is a list, then this specifies the decoder is
+an external program, with the program as the first item in the list, and
+the rest of the list specifying arguments to be passed on the command line.
+If using an external decoder, it must accept its input from @code{stdin}
+and send its output to @code{stdout}.
+
+If the @code{cdr} of a node is a symbol whose function definition is
+non-@code{nil}, then that encoding can be handled internally.  The function
+is called with 2 arguments, buffer positions bounding the region to be
+decoded.  The function should completely replace that region with the
+unencoded information.
+
+Currently supported transfer encodings are: base64, x-gzip, 7bit, 8bit,
+binary, x-compress, x-hqx, and quoted-printable.
+@item url-uncompressor-alist
+@vindex url-uncompressor-alist
+An assoc list of file extensions and the appropriate uncompression
+programs for each.  This is used to build the Accept-encoding header for
+HTTP/1.0 requests.
+@item url-waisq-prog
+@vindex url-waisq-prog
+Name of the waisq executable on this system.  This should be the
+@file{waisq} program from think.com's wais8-b5.1 distribution.
+@end table
+
+@node More Help, Future Directions, , Top
+@chapter More Help
+@cindex Relevant Newsgroups
+@cindex Newsgroups
+@cindex Support
+For more help on Emacs-W3, please send me mail
+(@i{wmperry@@cs.indiana.edu}).  Several discussion lists have also been
+created for Emacs-W3.  To subscribe, send mail to
+@i{majordomo@@indiana.edu}, with the body of the message 'subscribe
+@var{listname} @var{<email addres>}'.  All other mail should go to
+@i{<listname>@@indiana.edu}.
+
+
+@itemize @bullet
+@item
+w3-announce -- this list is for anyone interested in Emacs-W3, and
+should in general only be used by me.  The gnu.emacs.sources newsgroup
+and a few other mailing lists are included on this.  Please only use
+this list for major package releases related to Emacs-W3.
+(@i{www-announce@@w3.org} is included on this list).
+@item
+w3-beta -- this list is for beta testers of Emacs-W3.  These brave souls test
+out not-quite stable code.
+@item
+w3-dev -- a list consisting of myself and a few other people who are
+interested in the internals of Emacs-W3, and doing active development work.
+Pretty dead right now, but I hope it will grow.
+@end itemize
+
+For more help on the World Wide Web in general, please refer to the
+comp.infosystems.www.* newsgroups.  There are also several discussion
+lists concerning the Web.  Send mail to @i{<listname>-request@@w3.org}
+with a subject line of 'subscribe <listname>'.  All mail should go to
+@i{<listname>@@w3.org}.  Administrative mail should go to
+@i{www-admin@@w3.org}.  The lists are:
+
+
+@itemize @bullet
+@item
+www-talk -- for general discussion of the World Wide Web, where its
+going, new features, etc.  All the major developers are subscribed to
+this list.
+@item
+www-announce -- for announcements concerning the World Wide Web.  Server
+changes, new servers, new software, etc.
+@end itemize
+
+As a last resort, mail me.  I'll try to answer as quickly as I can.
+
+@node Future Directions, Programming Interface, More Help, Top
+@chapter Future Directions
+Changes are constantly being made to the Emacs browser (hopefully all
+for the better).  This is a list of the things that are being worked on
+right now.
+
+:: WORK :: Revamp the todo list
+@node Programming Interface, Generalized ZONES, Future Directions, Top
+@comment  node-name,  next,  previous,  up
+@chapter Internals of Emacs-W3
+@cindex Internals of Emacs-W3
+@cindex Using Emacs-W3 from other programs
+This chapter attempts to explain some of the internal workings of
+Emacs-W3 and various data structures that are used.  It also details
+some functions that are useful for using some of the Emacs-W3
+functionality from within other programs, or extending the current
+capabilities of Emacs-W3.
+
+@ifinfo
+@menu
+* Generalized ZONES::           A generic interface to 'zones' of text
+                                that can contain information.
+* Global Variables::            Global variables used throughout Emacs-W3
+* Data Structures::             The various data structures used in Emacs-W3
+* Miscellaneous Functions::     Miscellaneous functions to interface
+                                with w3 and access its data structures
+* MIME functions::              MIME functions---parsing messages,
+                                mailcap files, and more.
+@end menu
+@end ifinfo
+@node Generalized ZONES, Global Variables,Programming Interface, Programming Interface, Programming Interface
+@comment  node-name,  next,  previous,  up
+@section Generalized ZONES
+Due to the many different @i{flavors} of Emacs in existence, the
+addition of data and font information to arbitrary regions of text has
+been generalized.  The following functions are defined for
+using/manipulating these @dfn{zones} of data.
+
+@table @code
+@findex w3-add-zone
+@item w3-add-zone (start end style data &optional highlight)
+Creates a zone between buffer positions start and end, with font
+information specified by style, and a data segment of data.  If the
+optional argument highlight is non-@code{nil}, then the region
+highlights when the mouse moves over it.
+
+
+@findex w3-zone-at
+@item w3-zone-at (point)
+Returns the zone at @var{point}.  Preference is given to hypertext
+links, then to form entry areas, then to inlined images.  So if an
+inlined image was part of a hypertext link, this would always return the
+hypertext link.
+
+@findex w3-zone-data
+@item w3-zone-data (zone)
+Returns the zone's data segment. The data structures used in Emacs-W3 are
+relatively simple.  They are just list structures that follow a certain
+format.  The two main data types are @dfn{form objects}, @dfn{link
+objects},and @dfn{inlined images}.  All the information for these types
+of links are stored as lists.
+
+@findex w3-zone-hidden-p
+@item w3-zone-hidden-p (zone)
+Returns @code{t} if and only if a zone is currently invisible.
+@findex w3-hide-zone
+@item w3-hide-zone (start end)
+Makes a region of text from @code{start} to @code{end} invisible.
+@findex w3-unhide-zone
+@item w3-unhide-zone (start end)
+Makes a region of text from @code{start} to @code{end} visible
+again.
+@findex w3-zone-start
+@item w3-zone-start (zone)
+Returns an integer that is the start of zone, as a buffer position.  In
+Emacs 18.xx, this returns a marker instead of an integer, but it can be
+used just like an integer.
+@findex w3-zone-end
+@item w3-zone-end (zone)
+Returns an integer that is the end of zone, as a buffer position.  In
+Emacs 18.xx, this returns a marker instead of an integer, but it can be
+used just like an integer.
+@findex w3-zone-eq
+@item w3-zone-eq (zone1 zone2)
+Returns @code{t} if and only if zone1 and zone2 represent the same
+region of text in the same buffer, with the same properties and
+data.
+@findex w3-delete-zone
+@item w3-delete-zone (zone)
+Removes zone from its buffer (or current buffer).  The return value is
+irrelevant, and varies for each version of Emacs.
+@findex w3-all-zones
+@item w3-all-zones ()
+Returns a list of all the zones contained in the current buffer.  Useful
+for extracting information about hypertext links or form entry
+areas.  Programs should not rely on this list being sorted, as the order
+varies with each version of Emacs.
+@item w3-zone-at (pt)
+Returns the zone at character position PT in the current buffer that is
+either a link or a forms entry area.  Returns @code{nil} if no link at
+point.
+
+@end table
+@findex w3-zone-data
+These data structures are what is generally returned by
+@code{w3-zone-data}.
+
+@node Global Variables, Data Structures , Generalized ZONES, Programming Interface
+@comment  node-name,  next,  previous,  up
+@section Global variables
+There are also some variables that may be useful when writing a program
+or function that interacts with Emacs-W3.  All of the
+@code{w3-current-*} variables are local to each buffer.
+
+
+@table @code
+@vindex url-current-mime-headers
+@item url-current-mime-headers
+An assoc list of all the MIME headers for the current document.  Keyed
+on the lowercase MIME header (e.g., @samp{content-type} or
+@samp{content-encoding}.
+@vindex url-current-server
+@item url-current-server
+Server that the current document was retrieved from.
+@vindex url-current-file
+@item url-current-file
+Filename of the current document
+@vindex url-current-type
+@item url-current-type
+A string representing what network protocol was used to retrieve the
+current buffer's document.  Can be one of http, gopher, file, ftp, news,
+or mailto.
+@vindex url-current-port
+@item url-current-port
+Port # of the current document.
+@vindex w3-current-last-buffer
+@item w3-current-last-buffer
+The last buffer seen before this one.
+@vindex w3-running-FSF19
+@item w3-running-FSF19
+This is @code{t} if and only if we are running in FSF Emacs 19.
+@vindex w3-running-xemacs
+@item w3-running-xemacs
+This is @code{t} if and only if we are running in Lucid Emacs, WinEmacs, or
+XEmacs.
+@end table
+
+@node Data Structures, Miscellaneous Functions, Global Variables, Programming Interface
+@comment  node-name,  next,  previous,  up
+@section Data Structures
+Form objects are used to store information about a FORM data entry area.
+@enumerate
+@item
+@code{'w3form}
+@item
+A cons pair of (METHOD . URL), where METHOD specifies what method to use
+to retrieve the form when it is submitted (e.g., @samp{GET}) and URL is a
+fully specified URL pointing at where to submit the FORM data to.
+@item
+The type of input area this is.  (e.g., @samp{CHECKBOX} or
+@samp{RADIO})
+@item
+The name of the input tag.  This is used when sending the form to the
+server, so that the server can tell what data is what.
+@item
+The default value of the input area.  Gotten from the INPUT tag at
+creation time.
+@item
+The current value of the input area.
+@item
+Whether the item is checked or not.  Only used for RADIO or CHECKBOX
+items.
+@item
+The size (in characters) of the input area.  Not used for CHECKBOX,
+RADIO, or TEXTAREA input areas.
+@item
+The maximum length of the input.  Only used for TEXT or PASSWORD input
+areas.
+@item
+The form that this input area belongs to.  Each form in the same buffer
+has a unique identifier assigned when the document is parsed.  It is
+used when the form is submitted to get only the data for the correct
+form.
+@item
+A list of strings that represent the choices for this input area.  Only
+used for SELECT tags.
+@item
+A string or @code{nil}, specifying the ID attribute on this input
+tag.
+@end enumerate
+
+A new development in the World Wide Web is the concept of collapsible
+areas of text.  If a zone controls one of these regions, it is marked
+with the @b{w3expandlist} property.  The format of this structure
+is:
+
+@enumerate
+@item
+@code{'w3expandlist}
+@item
+A marker representing the start of the hidden text as a buffer position.
+@item
+A marker representing the end of the hidden text as a buffer position.
+@end enumerate
+
+A zone with the @b{w3graphic} property is a link to an inlined image's
+source file.
+@enumerate
+@item
+@code{'w3graphic}
+@item
+@findex w3-follow-inlined-image
+The full URL of the inlined image.  This is only ever returned if the
+inlined image is the only extent under point, or
+@code{w3-follow-inlined-image} is invoked.
+@end enumerate
+
+A zone with the @b{w3} property is a full-fledged hypertext link to
+another document.
+@enumerate
+@item
+@code{'w3}
+@item
+The ID attribute of this link.  Used for resolving references to
+specific points within a document (e.g., @samp{file.html#sectionA}.
+@item
+The HREF attribute of this link.  This is a fully specified URL pointing
+at a network resource.  All relative directory references should have
+been removed before being stored in this structure.
+@item
+The text between the <A> and </A> tags.  This is used to build menus or
+to get the text of a link without doing a buffer-substring.
+@item
+The URN attribute of this link.  Currently not used for anything,
+waiting for the URN specification to be hammered out.
+@item
+The REL attribute of this link.  Specifies the links relevance to the
+current document.
+@item
+The REV attribute of this link.  Specifies the current documents
+relevance to the link.
+@item
+The METHODS attribute, which tells what methods can be used on this
+link.  (e.g., @samp{GET, HEAD, PUT}.
+@end enumerate
+@node Miscellaneous Functions, MIME functions, Data Structures, Programming Interface
+@comment  node-name,  next,  previous,  up
+@section Miscellaneous Functions
+I have done quite a bit of work trying to make a clean interface to the
+internals of Emacs-W3.
+
+@table @code
+@findex url-clear-tmp-buffer
+@vindex url-working-buffer
+@item url-clear-tmp-buffer
+Sets the current buffer to be @code{url-working-buffer}, creating it if
+necessary, and erase it.  This should usually be called before
+retrieving URLs.
+
+@findex w3-convert-html-to-latex
+@item w3-convert-html-to-latex
+Takes a buffer of HTML markup (which should be in
+@code{w3-working-buffer}), and convert it into LaTeX.  This is an
+adaptation of the simple sed scripts from Cern.  Does as good a job as
+the html2latex program, and I usually prefer its formatting over
+html2latex's.
+
+@findex w3-fetch
+@item w3-fetch
+Takes a URL as its only argument. It then attempts to retrieve the URL.
+For example: @samp{(w3-fetch "http://cs.indiana.edu/")} would retrieve
+the Indiana University CS home page and parse it as HTML.
+
+
+@findex url-generate-new-buffer-name
+@item url-generate-new-buffer-name
+Takes a string, and returns the first unique buffer name using that
+string as a base.  For example @samp{(url-generate-new-buffer-name
+"new-buff")} would return @samp{"new-buff<1>"} if buffer @code{new-buff}
+already existed.
+
+
+@findex url-generate-unique-filename
+@item url-generate-unique-filename
+Returns a string that represents a unique filename in the /tmp
+directory.  For example, @samp{(url-generate-unique-filename)} would
+return @samp{"/tmp/url-tmp129440"}.  The filename is arrived at by using
+a unique prefix (url-tmp), the uid of the current user (12944 in my
+case), and a number that is incremented if a file already exists.
+
+
+@findex url-buffer-visiting
+@item url-buffer-visiting (url)
+Returns the name of a buffer (if any) that is visiting URL.
+
+@findex url-create-mime-request
+@vindex url-request-extra-headers
+@vindex url-request-data
+@vindex url-request-method
+@vindex url-mime-accept-string
+@vindex url-current-server
+@cindex Creating an HTTP request
+@item url-create-mime-request (fname ref-url)
+Creates a MIME request for the file fname.  The Referer: field of the
+HTTP/1.0 request is set to the value of ref-url if necessary.  Returns a
+string that can be sent to an HTTP server.  The request uses several
+variables that control how the request looks.
+
+
+If the value of @code{url-request-extra-headers} is non-@code{nil}, then
+it is used as extra MIME headers when an HTTP/1.0 request is
+created.
+
+@findex url-get-url-at-point
+@item url-get-url-at-point
+Returns the url at a point specified by an optional argument.  If no
+argument is given to the function, the current buffer position is used.
+Tries to find the URL closest to that point, but does not change the
+users position in the buffer.  Has a preference for looking backward
+when not directly on a URL.
+
+
+@findex url-hexify-string
+@item url-hexify-string
+Takes a string and replaces any characters that are not acceptable in a
+URL with the "escaped" encoding that is standard for URLs (replaces the
+character with a % followed by the hexadecimal representation of the
+ASCII value of the character).  For example, @samp{(url-hexify-string
+"this is a test")} would return @samp{"this%20is%20a%20test"}.
+
+
+@findex url-open-stream
+@item url-open-stream
+Takes the same parameters as @code{open-network-stream}, and functions
+similarly.  It takes a process name, a buffer name, a host name, and a
+port number or server name.  It attempts to open a network connection to
+the remote host on the specified port/service name, with output going to
+the buffer.  It returns the process object that is the network
+connection.
+
+
+@findex url-retrieve
+@item url-retrieve
+:: WORK :: Need to describe the url-request-* variables and the no-cache and
+   expected-md5 arguments to url-retrieve ::
+
+
+@findex url-unhex-string
+@item url-unhex-string
+This is the opposite of @code{url-hexify-string}.  It removes any %XXX
+encoded characters in a string.  For example @samp{(url-unhex-string
+"this%20is%20a%20test")} would return @samp{"this is a test"}.
+
+@findex w3-view-this-url
+@item w3-view-this-url
+Returns the URL of the hyperlink under point (if no hyperlink is under
+point, then it returns @code{nil}).  If the optional argument is
+@code{nil}, then the URL is also displayed in the minibuffer.
+
+
+@findex url-view-url
+@item url-view-url
+Returns the URL of current document.  If the optional argument is
+@code{nil}, then the URL is also displayed in the minibuffer.
+
+@end table
+
+@node MIME functions, Reporting Bugs, Miscellaneous Functions, Programming Interface
+@section MIME Functions
+@table @code
+@item mm-compose-type(TYPE)
+Composes a body section of MIME-type TYPE.  This uses the compose field
+of a mailcap entry to generate the data, and returns a string that
+contains the data, with a correct content-type header.
+
+@item mm-extension-to-mime(EXTN)
+Returns the MIME content-type of the file extension EXTN.
+@item mm-mime-info(ST ND REQUEST)
+Returns the mime viewer command for a specific MIME type.  If ST is a
+number, then the MIME type is the @code{buffer-substring} between ST and
+ND, otherwise ST should be a string specifying the MIME type and
+associated data.  Returns @code{nil} if the specified type is not found.
+
+
+Expects a complete content-type header line as its argument.  This can
+be simple like text/html, or complex like text/plain; charset=blah; foo=bar
+
+
+Third argument REQUEST specifies what information to return.  If it is
+@code{nil} or the empty string, the viewer (second field of the mailcap
+entry) is returned.  If it is a string, then the mailcap field
+corresponding to that string is returned (print, description, whatever).
+If a number, then all the information for this specific viewer is
+returned.
+@item mm-parse-mailcap(FILE)
+Parses the mailcap file specified by FILE.
+@item mm-parse-mailcaps(PATH)
+Parses the default mailcap files.  Optional argument PATH specifies a
+UNIX-style path of where to find the mailcap files.  This function must
+be run before the rest of the mm-* functions.
+@item mm-parse-mimetype-file(FILE)
+Parses out a mime-types file specified by FILE.
+@item mm-parse-mimetypes(PATH)
+Parses the default mimetypes files.  Optional argument PATH specifies a
+UNIX-style path of where to find the mimetypes files.
+@end table
+
+@node Reporting Bugs, Installing SSL, MIME functions, Top
+@appendix Reporting Bugs
+@cindex Reporting Bugs
+@cindex Bugs
+@cindex Contacting the author
+
+:: WORK :: Reporting bugs needs work.
+
+@node Installing SSL, Using PGP/PEM, Reporting Bugs, Top 
+@appendix Installing SSL
+@cindex HTTP/1.0 Authentication
+@cindex Secure Sockets Layer
+@cindex SSL
+@cindex Gag Puke Retch
+@cindex Exportability
+@cindex Export Restrictions
+In order to use SSL in Emacs-W3, an implementation of SSL is necessary.
+These are the implementations that I am aware of:
+
+@table @code
+@item SSLRef 2.0
+Available from Netscape Communications @footnote{http://www.netscape.com/newsref/std/sslref.html}.  This requires the
+RSARef library, which is not exportable.  The RSARef library is
+available from ftp://ftp.rsa.com/rsaref/
+@item SSLeay 0.4
+An implementation by Eric Young (eay@@mincom.oz.au) that is free for
+commerial or noncommercial use, and was developed completely outside the
+US by a non-US citizen.  More information can be found at
+ftp://ftp.psy.uq.oz.au/pub/Crypto/SSL/
+@end table
+
+@vindex ssl-program-name
+Whichever reference implementation is used (I recommend the SSLeay
+distribution, just to thumb a nose at the NSA :), there is a program
+that can be run in a subprocess that takes a hostname and port number on
+the command line, and reads/writes to standard input/output (the
+Netscape implementation comes with one of these by default).  Set the
+variable @code{ssl-program-name} to point to this program.
+
+
+This should be all the configuration necessary.  In the future, I will
+be distributing a set of patches to Emacs 19.xx and XEmacs 19.xx to
+SSL-enable them, for the sake of speed.
+
+@node Using PGP/PEM, Mailcap Files, Installing SSL, Top
+@appendix Using PGP/PEM
+@cindex HTTP/1.0 Authentication
+@cindex Public Key Cryptography
+@cindex Authentication, PGP
+@cindex Authentication, PEM
+@cindex RIPEM
+@cindex Public Key Cryptography
+@cindex PGP
+@cindex Pretty Good Privacy
+@cindex Encryption
+@cindex Security
+@cindex ITAR must die
+@cindex Stupid export restrictions
+@cindex Support your local crypto-anarchist
+@cindex NSA freaks
+Most of this chapter has been reproduced from the original documentation
+written by Rob McCool (@i{robm@@netscape.com})@footnote{See
+http://hoohoo.ncsa.uiuc.edu/docs/PEMPGP.html for the original}.
+
+RIPEM is 'Riordan's Internet Privacy Enhanced Mail', and is currently on
+version 1.2b3.  US citizens can ftp it from
+ftp://ripem.msu.edu/pub/crypt/ripem.
+
+PGP is 'Pretty Good Privacy', and is currently on version 2.6.  The
+legal controversies that plagued earlier versions have been resolved, so
+this is a competely legal program now.  There is also a legal version
+for european users, called 2.6ui (the Unofficial International
+version).
+
+PGP and PEM are programs that allow two parties to communicate in a way
+which does not allow third parties to read them, and which certify that
+the person who sent the message is really who they claim they are.
+
+
+PGP and PEM both use RSA encryption.  The U.S.  government has strict
+export controls over foreign use of this technology, so people outside
+the U.S.  may have a difficult time finding programs which perform the
+encryption.
+
+A working copy of either Pretty Good Privacy or RIPEM is required.  You
+should be familiar with the program and have generated a public/private
+key pair.
+
+
+Currently, the protocol has been implemented with PEM and PGP using
+local key files on the server side, and on the client side with PEM
+using finger to retrieve the server's public key.
+
+Parties who wish to use Emacs-W3 with PEM or PGP encryption will need to
+communicate beforehand and find a tamper-proof way to exchange their
+public keys.
+
+Pioneers get shot full of arrows.  This work is currently in the
+experimental stages and thus may have some problems that I have
+overlooked.  The only known problem that I know about is that the
+messages are currently not timestamped.  This means that a malicious
+user could record the encrypted message with a packet sniffer and repeat
+it back to the server ad nauseum.  Although they would not be able to
+read the reply, if the request was for something being charged for, this
+could be very inconvenient.
+
+This protocol is almost word-for-word a copy of Tony Sander's RIPEM
+based scheme, generalized a little.  Below, wherever PEM is used,
+replace it with PGP, and the behaviour should remain the same.
+
+@example
+*Client:*
+
+GET /docs/protected.html HTTP/1.0
+UserAgent: Emacs-W3/2.1.x
+
+*Server:* 
+
+HTTP/1.0 401 Unauthorized
+WWW-Authenticate: PEM entity="webmaster@@hoohoo.ncsa.uiuc.edu"
+Server: NCSA/1.1
+
+*Client:* 
+
+GET / HTTP/1.0
+Authorization: PEM entity="robm@@ncsa.uiuc.edu"
+Content-type: application/x-www-pem-request
+
+--- BEGIN PRIVACY-ENHANCED MESSAGE ---
+this is the real request, encrypted
+--- END PRIVACY-ENHANCED MESSAGE ---
+
+*Server:* 
+
+HTTP/1.0 200 OK
+Content-type: application/x-www-pem-reply
+
+--- BEGIN PRIVACY-ENHANCED MESSAGE ---
+this is the real reply, encrypted
+--- END PRIVACY-ENHANCED MESSAGE ---
+That's it.  
+@end example
+
+@cindex Mailcrypt
+Emacs-W3 uses the excellent @i{mailcrypt}@footnote{Available from
+http://www.cs.indiana.edu/LCD/cover.html?mailcrypt} package written by
+Jin S Choi (@i{jsc@@mit.edu}).  This package takes care of calling ripem
+and/or pgp with the correct arguments.  Please see the documentation at
+the top of mailcrypt.el for instructions on using mailcrypt.  All bug
+reports about mailcrypt should go to Jin S Choi, but bugs about how I
+use it in Emacs-W3 should of course be directed to me.
+
+@node Mailcap Files, General Index, Using PGP/PEM, Top
+@appendix Mailcap Files
+NCSA Mosaic and almost all other WWW browsers rely on a separate file
+for mapping MIME types to external viewing programs.  This takes some of
+the burden off of browser developers, so each browser does not have to
+support all image formats, or postscript, etc.  Instead of having the
+users of Emacs-W3 duplicate this in lisp, this file can be parsed using
+the @code{mm-parse-mailcaps} function.  This function is called each
+time Emacs-W3 is loaded.  It tries to locate mimetype files in several
+places. If the environment variable @code{MAILCAPS} is nonempty, then
+this is assumed to specify a UNIX-like path of mimetype files (this is a
+colon separated string of pathnames).  If the @code{MAILCAPS}
+environment variable is empty, then Emacs-W3 looks for these
+files:
+
+@enumerate
+@item
+@file{~/.mailcap}
+@item
+@file{/etc/mailcap}
+@item
+@file{/usr/etc/mailcap}
+@item
+@file{/usr/local/etc/mailcap}
+@end enumerate
+
+This format of this file is specified in RFC 1343, but a brief synopsis
+follows (this is taken verbatim from sections of RFC 1343).
+
+Each mailcap file consists of a set of entries that describe the proper
+handling of one media type at the local site.  For example, one line
+might tell how to display a message in Group III fax format.  A mailcap
+file consists of a sequence of such individual entries, separated by
+newlines (according to the operating system's newline
+conventions). Blank lines and lines that start with the "#" character
+(ASCII 35) are considered comments, and are ignored.  Long entries may
+be continued on multiple lines if each non-terminal line ends with a
+backslash character ('\', ASCII 92), in which case the multiple lines
+are to be treated as a single mailcap entry.  Note that for such
+"continued" lines, the backslash must be the last character on the line
+to be continued.
+
+Each mailcap entry consists of a number of fields, separated by
+semi-colons.  The first two fields are required, and must occur in the
+specified order.  The remaining fields are optional, and may appear in
+any order.
+
+The first field is the content-type, which indicates the type of data
+this mailcap entry describes how to handle.  It is to be matched against
+the type/subtype specification in the "Content-Type" header field of an
+Internet mail message.  If the subtype is specified as "*", it is
+intended to match all subtypes of the named content-type.
+
+The second field, view-command, is a specification of how the message or
+body part can be viewed at the local site.  Although the syntax of this
+field is fully specified, the semantics of program execution are
+necessarily somewhat operating system dependent.
+
+The optional fields, which may be given in any order, are as follows:
+@itemize @bullet
+@item
+The "compose" field may be used to specify a program that can be used to
+compose a new body or body part in the given format.  Its intended use
+is to support mail composing agents that support the composition of
+multiple types of mail using external composing agents.  As with the
+view- command, the semantics of program execution are operating system
+dependent.  The result of the composing program may be data that is not
+yet suitable for mail transport---that is, a Content-Transfer-Encoding
+may need to be applied to the data.
+@item
+The "composetyped" field is similar to the "compose" field, but is to be
+used when the composing program needs to specify the Content-type header
+field to be applied to the composed data.  The "compose" field is
+simpler, and is preferred for use with existing (non-mail-oriented)
+programs for composing data in a given format.  The "composetyped" field
+is necessary when the Content-type information must include auxilliary
+parameters, and the composition program must then know enough about mail
+formats to produce output that includes the mail type
+information.
+@item
+The "edit" field may be used to specify a program that can be used to
+edit a body or body part in the given format.  In many cases, it may be
+identical in content to the "compose" field, and shares the
+operating-system dependent semantics for program execution.
+@item
+The "print" field may be used to specify a program that can be used to
+print a message or body part in the given format.  As with the
+view-command, the semantics of program execution are operating system
+dependent.
+@item
+The "test" field may be used to test some external condition (e.g.  the
+machine architecture, or the window system in use) to determine whether
+or not the mailcap line applies.  It specifies a program to be run to
+test some condition.  The semantics of execution and of the value
+returned by the test program are operating system dependent.  If the
+test fails, a subsequent mailcap entry should be sought.  Multiple test
+fields are not permitted---since a test can call a program, it can
+already be arbitrarily complex.
+@item
+The "needsterminal" field indicates that the view-command must be run on
+an interactive terminal.  This is needed to inform window-oriented user
+agents that an interactive terminal is needed.  (The decision is not
+left exclusively to the view-command because in some circumstances it
+may not be possible for such programs to tell whether or not they are on
+interactive terminals.)  The needsterminal command should be assumed to
+apply to the compose and edit commands, too, if they exist.  Note that
+this is NOT a test---it is a requirement for the environment in which
+the program will be executed, and should typically cause the creation of
+a terminal window when not executed on either a real terminal or a
+terminal window.
+@item
+The "copiousoutput" field indicates that the output from the
+view-command will be an extended stream of output, and is to be
+interpreted as advice to the UA (User Agent mail- reading program) that
+the output should be either paged or made scrollable. Note that it is
+probably a mistake if needsterminal and copiousoutput are both
+specified.
+@item
+The "description" field simply provides a textual description,
+optionally quoted, that describes the type of data, to be used
+optionally by mail readers that wish to describe the data before
+offering to display it.
+@item
+The "x11-bitmap" field names a file, in X11 bitmap (xbm) format, which
+points to an appropriate icon to be used to visually denote the presence
+of this kind of data.
+@item
+Any other fields beginning with "x-" may be included for local or
+mailer-specific extensions of this format.  Implementations should
+simply ignore all such unrecognized fields to permit such extensions,
+some of which might be standardized in a future version of this
+document.
+@end itemize
+
+@node General Index, Key Index, Mailcap Files, Top
+@appendix General Index
+@printindex fn
+@node Key Index, , General Index, Top
+@appendix Key Index
+@printindex ky
+@contents
+@bye