Added character encoding chapter.
[elpher.git] / elpher.texi
index 725f927..82d0b29 100644 (file)
@@ -47,6 +47,7 @@ the file COPYING in the same directory as this file for more details.
 * 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
 * Customization::               How to customize various aspects of Elpher
 * Index::
 @end menu
@@ -131,7 +132,7 @@ Once installed, you can launch Elpher using
 page, with information on each of the default keyboard bindings.
 
 From here you can move point between links (which may be menu items or
-inline URLs in text files) by using @key{TAB} and @kbd{Shift-TAB} keys,
+inline URLs in text files) by using @key{TAB} and @kbd{S-@key{TAB}},
 as in Info.  You can also jump directly to a menu item using @key{m}, or
 use the standard Emacs or Evil motion and search commands to find your
 way around.  To open a link, press @key{RET}.  (Where a mouse is
@@ -175,7 +176,8 @@ coupled with caching of pages and cursor position.
 
 @menu
 * Within-page navigation::      Moving about within a page
-* Between-page navigation::     Concepts and commands for moving between pages
+* Between-page navigation::     Commands for moving between pages
+* History and Caching::         Explanation of how Elpher represents history
 @end menu
 
 
@@ -190,10 +192,10 @@ In addition, the following commands are provided for quickly moving between
 links and menu items.
 
 @table @asis
-@item @kbd{tab}  (@code{elpher-next-link})
+@item @key{TAB}  (@code{elpher-next-link})
 Move to the next link or menu item in the file.
 
-@item @kbd{<S-tab>}/@kbd{<backtab>}  (@code{elpher-prev-link})
+@item @kbd{Shift-@key{TAB}}/@key{backtab}  (@code{elpher-prev-link})
 Move to the previous link or menu item in the file.
 
 @item @kbd{m}  (@code{elpher-jump})
@@ -219,10 +221,23 @@ system clipboard (if available).
 @item @kbd{C}  (@code{elpher-copy-current-url})
 Add URL representing address of the current page to the kill-ring and
 the system clipboard (if available).
-@end table
 
+@item @kbd{d}  (@code{elpher-download})
+Download link at point and save the result as a file.  The minibuffer
+will prompt for the name of the file to write, with the default name being
+the display string (if available) associated with the link.
+
+@item @kbd{D}  (@code{elpher-download-current})
+This is similar to @code{elpher-downlowd}, but instead applies to the
+current page rather than a link.
+
+@item @kbd{w} (@code{elpher-view-raw})
+This displays the raw server response for the current page.  While not
+useful for general browsing, it is useful for debugging incorrect rendering
+or out-of-spec server responses.
+@end table
 
-@node Between-page navigation,  , Within-page navigation, Navigation
+@node Between-page navigation, History and Caching, Within-page navigation, Navigation
 @section Between-page navigation
 
 Moving to a different page can be accomplished in several ways,
@@ -251,29 +266,152 @@ items.
 @item
 Following links to binary files (and image files on unsupported systems)
 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
+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}.) 
+
 @end itemize
 
-Once a text, menu or query response page is retrieved, its contents are
+Once a text, menu or query response page has been displayed, its contents are
 cached for the duration of the Emacs session. 
 
-@item @kbd{d}  (@code{elpher-download})
-
 @item @kbd{g}  (@code{elpher-go})
+Open a particular page by specifying either its URL or directly entering
+a host, port and selector.
+
+Note that 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.
 
 @item @kbd{O}  (@code{elpher-root-dir})
+Open the root page (empty selector) on the current host.
 
 @item @kbd{u}  (@code{elpher-back})
 Return to the previous page, where ``previous'' means the page where the
 page which was displayed immediately before the current page.
 @end table
 
+
+@node History and Caching,  , Between-page navigation, Navigation
+@section History and Caching 
+
+The history and caching strategy in Elpher is extremely simple, but
+may be confusing without a good mental model of how it works.  That
+is what this section attempts to provide.
+
+Essentially, @strong{every} time you navigate to a new page, either
+by clicking or pressing @key{RET} on a link, using @key{g} to jump
+to a new page by its address, or using @key{O} to open the root selector,
+the following two things occur:
+
+@enumerate
+@item
+the cursor position and content for the original page are recorded in an
+in-memory cache, and
+
+@item
+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
+haven't yet visited that menu, it's therefore better to use @key{u} to
+go back in this case.}
+
+One aspect that may seem peculiar is that Elpher lacks a corresponding ``next'' or
+``forward'' command.  However, since Elpher caches the position of point,
+this will be automatically positioned on the link that was most recently followed
+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
 @chapter Bookmarks
 
-@node Character encodings, Customization, Bookmarks, Top
+Elpher has a very simple link bookmarking system involving the
+following commands:
+
+@table @asis
+@item @key{a}  (@code{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.
+
+@item @key{A}  (@code{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.
+
+@item @key{x}  (@code{elpher-unbookmark-link})
+Immediately remove the bookmark (if one exists) to the link at point.
+
+@item @key{X}  (@code{elpher-unbookmark-current})
+Immediately remove the bookmark (if one exists) to the current page.
+
+@item @key{B}  (@code{elpher-bookmarks})
+Open a page displaying all current bookmarks.  Note that this bookmark
+page is added to the history just as if you had opened it using a link.
+Thus to return to the previous page, use @kbd{u}.  This also means
+that you can peruse the various bookmarks by visiting them in turn, 
+using @kbd{u} to return to the bookmark page (where the position of point
+is cached), then moving to another bookmarked link and so on.
+@end table
+
+Bookmarks are stored as a s-exp in the file @file{elpher-bookmarks}
+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 Customization, Index, Character encodings, Top
+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.
+(@xref{Recognize coding, Recognizing coding systems, ,emacs}.)
+While this can be okay, it is important to realise 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
+@item @key{S}  (@code{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
+list of alternatives (which is extensive) and to autocomplete.  An empty
+response will cause Elpher to return to its default autodetection
+behaviour.
+
+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}.
+
+@end table
+
+@node Encrypted connections, Customization, Character encodings, Top
+@chapter Encrypted connections
+
+@node Customization, Index, Encrypted connections, Top
 @chapter Customization
 
 @node Index,  , Customization, Top