+Elpher makes use of standard Emacs bookmarks.
+@xref{Bookmarks, , , emacs, The Emacs Editor}.
+The following commands are used to add new bookmarks:
+
+@table @asis
+@keycmd{@key{a}, elpher-bookmark-link}
+Add a bookmark for the link at point. The minibuffer will prompt for
+a name for the bookmark, which defaults to the display string.
+
+@keycmd{@key{A}, elpher-bookmark-current}
+Add a bookmark for the current page. The minibuffer will prompt for
+a name for the bookmark, defaulting to the display string associated
+with the link that was followed to reach the current page.
+
+
+@keycmd{@key{B}, elpher-open-bookmarks}
+Visit a page displaying all elpher bookmarks.
+The behaviour of the this function depends on the customization variable
+@code{elpher-use-emacs-bookmark-menu}. If nil (the default), the
+command will visit a special elpher page listing all elpher-specific
+bookmarks. If non-nil, the command will simply open the standard Emacs
+bookmark list displaying all current bookmarks (including non-elpher
+bookmarks).
+
+@keycmd{@kbd{C-x r l}, bookmark-bmenu-list}
+This command opens the standard Emacs bookmark menu, with which bookmarks
+can be renamed, deleted or annotated.
+
+@end table
+
+On opening the bookmarks page, elpher will offer to import any legacy
+(2.x) bookmarks files into the new system. Once the import is complete,
+the original bookmarks file will have ``-legacy'' appended to it, so
+so that elpher knows not to import it again.
+
+If you have any other legacy bookmark files (besides the one in the
+original location, or specified in the @code{elpher-bookmarks-file}
+customization variable, which should be automatically detected), you can
+can import these using
+
+@example
+@kbd{M-x elpher-bookmark-import @key{RET}}
+@end example
+
+Once this is done, you may delete these legacy bookmarks files.
+
+@node Gopher character encodings, Encrypted gopher connections, Bookmarks, Top
+@chapter Gopher character encodings
+
+Responses Elpher retrieves from servers are initially read as pure
+binary data. When the data is intended to be interpreted as textual (as
+determined by the type parameter of the gopher menu item or the gopher
+URL), this data needs to be @emph{decoded} into a sequence of
+characters. To do this properly requires knowledge of the encoding
+system used by whoever authored the document.
+
+Unfortunately gopher lacks a systematic way of acquiring this necessary
+information. Thus, the details of the coding system must be either
+inferred from the binary data, or must be specified by the user.
+
+By default, Elpher applies Emacs' built-in character encoding detection
+system to the full (undecoded) response data and uses this to attempt to
+convert it into a character string.
+(See @pxref{Recognize coding, Recognizing coding systems, ,emacs}.) While
+this approach can be okay, it is important to realize that its inference
+algorithm is extremely primitive and depends heavily on assumptions based
+on the language settings of your emacs system.
+
+The alternative is to explicitly set the coding system used for decoding
+using the following command:
+
+@table @asis
+@keycmd{@key{!},elpher-set-coding-system}
+Causes a elpher to prompt for a coding system to use for decoding
+future gopher text. The @key{TAB} key can be used at this prompt to display a
+list of alternatives (which is extensive) and to auto-complete. An empty
+response will cause Elpher to return to its default auto-detection
+behaviour.
+@end table
+
+Note that changing the coding system only affects newly loaded text.
+Thus, if text has already been decoded using an incorrect system, you
+will need to select the correct coding and then reload the text using
+@key{R}.
+
+
+@node Encrypted gopher connections, Gemini support, Gopher character encodings, Top
+@chapter Encrypted gopher connections
+
+While RFC 1436 does not broach the topic of encryption at all, several
+modern gopher servers can serve content over encrypted connections,
+and a common choice for this is TLS.
+
+Elpher can retrieve selectors using Emacs' built-in TLS support which
+uses the GnuTLS library. (It is possible to build emacs without
+GnuTLS, in which case encryption is not supported.)
+
+To retrieve documents using TLS, Elpher's TLS mode must be enabled.
+This can be directly toggled using @key{T}, but note that just as with
+the character encoding, changing this mode only affects subsequent
+connections.
+
+Alternatively, TLS mode is @emph{automatically} enabled whenever
+gopher URLs starting with @code{gophers://} are followed.
+
+The mode is sticky, so it remains active until switched off.
+It can also be automatically switched off when a TLS connection fails.
+In this case Elpher will prompt for your confirmation to ensure that
+you can't accidentally make a non-TLS connection.
+
+@node Gemini support, Finger support, Encrypted gopher connections, Top
+@chapter Gemini support
+
+@uref{gopher://gemini.circumlunar.space, Gemini}
+is a new protocol being developed by several members of
+gopherspace. It aims to solve some of the long-standing technical
+issues associated with gopher as a protocol, while keeping the major benefits.
+For instance, it _requires_ encrypted connections, it does away with
+the selector type, and allows servers to explicitly specify the
+character coding scheme used for text documents.
+
+The latest versions of Elpher aim to provide seamless transitions between
+gemini and gopher documents. Basically you should be able to open,
+bookmark, download and otherwise interact with gemini pages in exactly
+the same way as you do with other non-gemini pages. The only major
+difference from your perspective as a user is that you should no longer
+have to worry about manually toggling TLS on or off (for gemini it's
+always on), and you should never have to manually set a character coding
+scheme.
+
+The gemini protocol specification recommends a Trust on First Use (TOFU)
+behaviour when validating gemini server TLS certificates. This is
+because many gemini servers rely on self-signed certificates rather
+than certificates signed by a CA. Sadly however, this TOFU behaviour is
+far from straight-forward to configure using Emacs' existing Network
+Security Manager. For this reason, elpher defaults to performing no
+certificate verification by default. This behaviour can be easily
+customized by setting the @code{elpher-gemini-TLS-cert-checks}
+customization variable to non-nil.
+
+The gemini specification concerns both the protocol and a simple text
+document format (mimetype text/gemini) which is like a mixture between
+gophermap files and markdown-formatted files but simpler than both.
+Elpher renders gemini responses which are provided in this format in
+line with the rules in the spec. This includes wrapping long lines at
+word boundaries. The specific column at which this text is wrapped is
+defined by the customization variable
+@code{elpher-gemini-max-fill-width}, which is set to 80 columns by
+default. (This is slightly wider than Emacs' default fill width of 70
+columns due to the fact that there are a significant amount of older
+gemini content which, against the advice of the current spec, hard wraps
+at <80 columns. The larger default allows this to still look okay,
+while still keeping content without hard wraps looking pleasant.)
+
+The text/gemini format also possesses a section header syntax similar to
+markdown. Elpher allows different header levels to be drawn with
+different, customizable, faces. By default, on graphically-capable
+emacs systems, these faces are given different heights to distinguish
+among levels. On terminal systems, the level is indicated by the
+number of preceding # symbols.
+
+@menu
+* Client Certificates for Gemini:: Accessing secure gemini pages
+* Hiding preformatted text in text/gemini documents:: An accessibility option
+@end menu
+
+@node Client Certificates for Gemini, Hiding preformatted text in text/gemini documents, Gemini support, Gemini support
+@section Client Certificates for Gemini
+
+Gemini makes explicit use of the client certificate mechanism that TLS
+provides for allowing clients to authenticate themselves with servers.
+The Gemini specification suggests two distinct classes of client
+certificates: short-lived certificates used to identify you for a single
+session, and more permanent certificates used to identify you over a
+longer time period.
+
+When Elpher receives a request for a client certificate from a server,
+it will present you with the option to create and use a single-use
+``throwaway'' certificate, or to use a ``persistent''
+certificate (optionally creating it or installing pre-existing key and
+certificate files).
+
+Certificate creation in Elpher requires an installation of OpenSSL, and
+---in particular---that Elpher be able to run the @command{openssl} command-line
+utility. By default, Elpher assumes that the @command{openssl} is on the
+system path, but the precise location can be set by customizing the
+@code{elpher-openssl-command} variable.
+
+Each generated certificate results in the creation of a .key file and
+a .crt file. In the case of a throwaway certificate, these files are
+stored in the temporary directory indicated by the Emacs variable
+@code{temporary-file-directory} and are deleted when ``forgotten''
+(as described below).
+
+In the case of persistent certificates, these files are stored in the
+folder defined by the Elpher variable
+@code{elpher-certificate-directory}, and are never deleted by Elpher.
+(Of course you can delete them yourself whenever you like.)
+The base name of the files (i.e. sans extension) is what Elpher uses
+to identify the certificate.
+
+Using throwaway certificates is as simple as pressing the @key{t}
+key at the prompt which appears following a certificate request from
+a server. There is nothing more to do.
+
+Using a persistent certificate requires instead selecting @key{p} from the same
+menu. This will result in Elpher asking you for the name identifying
+the certificate. This entry autocompletes to the list of known certificate
+names, so you can use @key{TAB} to display the list.
+
+In the case that you choose a name that does not belong to the list of
+known certificates, Elpher will offer to create one for you or to
+``install'' one from existing key and certificate files.
+Pressing the @key{n} key will cause Elpher to begin the process of
+creating a new persistent certificate, using some additional
+details for which you will be prompted.
+Alternatively, pressing the @key{i} key will cause Elpher to ask for the
+locations of existing key and certificate files to add to
+@code{elpher-certificate-directory} under the chosen name.
+
+Once a certificate is selected, it will be used for all subsequent
+gemini requests involving URLs begining with the URL for for which the
+certificate was created. It is immediately ``forgotten'' when a TLS
+connection to a non-matching URL is attempted, or the following command
+is issued:
+
+@table @asis
+@keycmd{@key{F},elpher-forget-certificate}
+Causes Elpher to immediately forget any currently-loaded client certificate.
+@end table
+
+In either case, ``forgetting'' means that the details of the key and
+certificate file pair are erased from memory. Furthermore, in the case
+of throw-away certificates, the corresponding files are deleted.
+
+Persistant client certificates can be added to the alist contained in the
+customization variable @code{elpher-certificate-map} so that they are
+automatically activated whenever a gemini page with the matching URL
+prefix is visited.
+
+@node Hiding preformatted text in text/gemini documents, , Client Certificates for Gemini, Gemini support
+@section Hiding preformatted text in text/gemini documents
+
+Preformatted text is often used to display ``ASCII art'' or other
+similar text-based artwork. While for many this is a fun way to
+introduce personality into their gemini documents, such text can
+pose difficulties for screen readers.
+
+Setting the @code{elpher-gemini-hide-preformatted} customization option
+to non-nil causes Elpher to hide all preformatted text blocks by
+default. In place of the preformatted text, Elpher instead displays the
+``alt text'' (if any is available), along with a button which can be
+used to make specific blocks visible as required.
+
+Other related customization options are
+@code{elpher-gemini-preformatted-toggle-label}, which is the label used
+for the toggle button, and
+@code{elpher-gemini-preformatted-toggle-bullet}, which is the margin
+string used to distinguish the line replacing the preformatted text.
+
+@node Finger support, Local files, Gemini support, Top
+@chapter Finger support
+
+Incidentally, Elpher has native support for querying finger servers.
+Of course, one could argue that this functionality is more easily
+provided by one's local telnet client. However finger URLs do appear
+on occasion in gopherspace, and it's nice to be able to open them
+in place.
+
+Elpher interprets @code{finger://} URLs as follows:
+
+@itemize
+
+@item
+The host is determined by the host name portion of the URL.