Use unhex URLs in the header
[elpher.git] / elpher.texi
index 34c3a61..7229c99 100644 (file)
@@ -1,17 +1,17 @@
 \input texinfo @c -*-texinfo-*-
 
 @setfilename elpher.info
-@settitle Elpher Manual v2.0.0
+@settitle Elpher Manual v2.10.0
 
 @dircategory Emacs
 @direntry
-* Elpher: (elpher).     A gopher client for Emacs.
+* Elpher: (elpher).     A gopher and gemini client for Emacs.
 @end direntry
 
 @copying
-This manual documents Elpher, a gopher client for Emacs.
+This manual documents Elpher, a gopher and gemini client for Emacs.
 
-Copyright @copyright{} 2019 Tim Vaughan
+Copyright @copyright{} 2019, 2020 Tim Vaughan
 
 @quotation
 The source and documentation of Elpher is free software.  You can
@@ -27,7 +27,7 @@ the file COPYING in the same directory as this file for more details.
 @end copying
 
 @titlepage
-@title Elpher Gopher Client Manual
+@title Elpher Gopher and Gemini Client Manual
 @author Tim Vaughan
 
 @page
@@ -55,8 +55,8 @@ the file COPYING in the same directory as this file for more details.
 * Quick Start::                 Get up and running quickly
 * Navigation::                  Fundamentals of Elpher navigation
 * Bookmarks::                   How to record and visit bookmarks
-* Character encodings::         How Elpher handles different character encodings
-* Encrypted connections::       How and when TLS is enabled
+* Gopher character encodings::  How Elpher selects encodings for gopher pages
+* Encrypted gopher connections::       How and when TLS is enabled for gopher
 * Gemini support::              Support for the Gemini protocol
 * Finger support::              Support for the Finger protocol
 * Customization::               How to customize various aspects of Elpher
@@ -77,11 +77,11 @@ Navigation
 @node Introduction, Installation, Top, Top
 @chapter Introduction
 
-Elpher aims to be a capable and practical gopher client for Emacs.  Its
-focus is on easy keyboard-driven navigation based on sensible default
-bindings (with out-of-the-box support for Evil).  It is intended to be
-robust and behave in non-surprising ways at all times.  Additionally,
-Elpher provides the following bells and whistles:
+Elpher aims to be a capable and practical gopher and gemini client for
+Emacs.  Its focus is on easy keyboard-driven navigation based on
+sensible default bindings (with out-of-the-box support for Evil).  It is
+intended to be robust and behave in non-surprising ways at all times.
+Additionally, Elpher provides the following bells and whistles:
 
 @itemize
 @item
@@ -171,12 +171,12 @@ effect.)
 To return to the page you just followed the link from, press @key{u}.
 
 Elpher caches (for the duration of an Emacs session) both page contents
-and the position of point on each of the pages (gopher menus, query
-results, or text pages) you visit, restoring these when you next visit
-the same page.  Thus, pressing @key{u} displays the previous page in
-exactly the same state as when you left, meaning that you can quickly
-and visually explore the different documents in a menu without having to
-wait for anything to reload.
+and the position of point on each of the pages (gopher menus, gemini
+pages, query results, or text pages) you visit, restoring these when you
+next visit the same page.  Thus, pressing @key{u} displays the previous
+page in exactly the same state as when you left, meaning that you can
+quickly and visually explore the different documents in a menu without
+having to wait for anything to reload.
 
 Of course, sometimes you'll @emph{want} to reload the current page
 rather than stick with the cached version.  To do this use @key{R}.
@@ -191,9 +191,8 @@ navigation experience as intuitive and responsive as possible.
 
 @node Navigation, Bookmarks, Quick Start, Top
 @chapter Navigation
-by 
 Throughout this manual, we use the word ``page'' to refer to any
-visualization of a response from a gopher server, be it a
+visualization of a response from a gopher or gemini server, be it a
 menu/directory, query result, text file or image.  We use
 
 Elpher's navigation interface is inspired by the Emacs Info mode.
@@ -298,7 +297,7 @@ causes Elpher to prompt for a filename in which to save the content.
 
 @item
 Following links of type `h' with a selector having the `URL:' prefix, or
-non-gopher URLs in text files, will result in Elpher using an external
+unsuported URLs in text files, will result in Elpher using an external
 programme to open the URL.  This will be either the default system browser
 or, if the @code{elpher-open-urls-with-eww} customization variable is non-nil,
 Emacs' own EWW browser. (See @pxref{Customization}.) 
@@ -310,17 +309,17 @@ cached for the duration of the Emacs session.
 
 @keycmd{@key{g}, elpher-go}
 Open a particular page by specifying either its full URL or just entering
-a gopher host name.
+a gopher host name. (The protocol defaults to gopher, so gemini links must include the @code{gemini://} prefix.
 
-If a non-gopher protocol is used in the URL the result will be the same
-as following a URL link of the same type from a gopher menu.
+If a unsupported protocol is used in the URL the result will be the same
+as following a URL link of the same type from a link in a page.
 
 @keycmd{@key{o}, elpher-go-current}
 Prompts for a URL similar to @code{elpher-go}, but initialized to the URL
 of the current page.  This allows you to easily try other selectors for the
 same server.
 
-Remember however, that the Gopher RFC 1436 provides no guarantees about the
+Remember however, that the Gopher RFC 1436 provides @emph{no} guarantees about the
 structure of selectors.
 
 @keycmd{@key{O}, elpher-root-dir}
@@ -354,11 +353,11 @@ the original page is set as the ``parent'' of the new page.
 @end enumerate
 
 The only way to return to pages in this history is by using @key{u},
-which returns to the previous of the current page.
-@footnote{The addition of the new page to the history happens even if
-the new page is one that has been seen before. This is mostly the
-desired behaviour.  However, opening an explicit ``back'' link provided
-by a gopher menu will also add a new entry to the history.  Unless you
+which returns to the previous of the current page.  @footnote{The
+addition of the new page to the history happens even if the new page is
+one that has been seen before. This is mostly the desired behaviour.
+However, opening an explicit ``back'' link provided by a gopher menu or
+gemini page will also add a new entry to the history.  Unless you
 haven't yet visited that menu, it's therefore better to use @key{u} to
 go back in this case.}
 
@@ -369,7 +368,7 @@ from a given page.  This means that, at least for links followed from menus
 and text files, the inverse of @key{u} is actually just @key{RET}.
 
 
-@node Bookmarks, Character encodings, Navigation, Top
+@node Bookmarks, Gopher character encodings, Navigation, Top
 @chapter Bookmarks
 
 Elpher has a very simple link bookmarking system involving the
@@ -405,8 +404,8 @@ in the user emacs directory (usually @file{~/.emacs.d/}).
 Any command which modifies the list of bookmarks immediately updates
 this file.
 
-@node Character encodings, Encrypted connections, Bookmarks, Top
-@chapter Character encodings
+@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
@@ -433,7 +432,7 @@ using the following command:
 @table @asis
 @keycmd{@key{S},elpher-set-coding-system}
 Causes a elpher to prompt for a coding system to use for decoding
-future text.  The @key{TAB} key can be used at this prompt to display a
+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.
@@ -445,8 +444,8 @@ will need to select the correct coding and then reload the text using
 @key{R}.
 
 
-@node Encrypted connections, Gemini support, Character encodings, Top
-@chapter Encrypted connections
+@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,
@@ -469,18 +468,18 @@ 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 connections, Top
+@node Gemini support, Finger support, Encrypted gopher connections, Top
 @chapter Gemini support
 
 @uref{gopher://gemini.circumlunar.space, Gemini}
-is a new protocol being devloped by several members of
+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 benifits.
+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 seemless navigation between
+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
@@ -499,31 +498,98 @@ certificate verification by default.  This behaviour can be easily
 customized by setting the @code{elpher-gemini-TLS-cert-checks}
 customization variable to non-nil.
 
-Like gopher, the gemini specification concerns both the protocol 
- 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
+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 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.)
+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 posesses a section header syntax similar to
+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
-amongst levels.  On terminal systems, the level is indicated by the
-number of preceeding # symbols.
+among levels.  On terminal systems, the level is indicated by the
+number of preceding # symbols.
 
 I should emphasize however that, while it is definitely functional,
 Elpher's gemini support is still experimental, and various aspects will
-change as the protocol develops further.  Additionally, the use of
-client TLS certicificates is still not yet supported.
+change as the protocol develops further.
+
+@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 edisting 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 TLS
+transactions to the host for which the certificate was created.
+It is immediately ``forgotten'' when a TLS connection to another host
+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.
+
 
 @node Finger support, Customization, Gemini support, Top
 @chapter Finger support