Added history+caching and bookmarks chapters.
[elpher.git] / elpher.texi
index a81f7ef..78db4bd 100644 (file)
@@ -42,14 +42,17 @@ the file COPYING in the same directory as this file for more details.
 
 @menu
 * Introduction::                Elpher Overview: what's this all about?
+* Installation::                Installing Elpher
+* 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
 * Customization::               How to customize various aspects of Elpher
-* Hacking::                     Contributing changes to Elpher
 * Index::
 @end menu
 
-@node Introduction, Navigation, Top, Top
+@node Introduction, Installation, Top, Top
 @chapter Introduction
 
 Elpher aims to be a capable and practical gopher client for Emacs.  Its
@@ -60,7 +63,7 @@ Elpher provides the following bells and whistles:
 
 @itemize
 @item
-an easily navigable history, sporting caching of visited sites (both
+an easily navigable history, sporting caching of visited pages (both
 content and cursor position),
 
 @item
@@ -77,42 +80,302 @@ disk), and
 a simple bookmark management system.
 @end itemize
 
-Throughout this manual, the 
-
 Elpher is still under active development.  Although we try very hard to
 ensure that releases are bug-free, this cannot be guaranteed.  However,
 this also means that any usability features that you feel are missing
 can likely by incoroporated quickly, so please get in touch if you
 have some ideas.
 
-@node Navigation, Bookmarks, Introduction, Top
+@node Installation, Quick Start, Introduction, Top
+@chapter Installation
+
+Elpher is available from the MELPA package repository.  If you have
+never installed packages from this repository before, you'll need
+to follow the instructions at @url{https://melpa.org/#/getting-started}.
+
+@noindent To install Elpher, enter the following:
+
+@example
+@kbd{M-x package-install @key{RET} elpher @key{RET}}
+@end example
+
+@noindent To uninstall, use
+
+@example
+@kbd{M-x package-delete @key{RET} elpher @key{RET}}.
+@end example
+
+While not recommended, it is also possible to install Elpher directly by
+downloading the file @file{elpher.el} from
+@url{https://github.com/tgvaughan/elpher}, adding it to a directory in
+your @code{load-path}, and then adding
+
+@example
+(require 'elpher)
+@end example
+
+@noindent to your Emacs initialization file.
+
+@node Quick Start, Navigation, Installation, Top
+@chapter Quick Start
+
+Before diving into the minutiae of the different commands available,
+we will quickly describe how to get up and running with Elpher.
+
+Once installed, you can launch Elpher using
+
+@example
+@kbd{M-x elpher @key{RET}}
+@end example
+
+@noindent This will switch to the *Elpher* buffer and display a start
+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{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
+available, Clicking on a link with the mouse cursor has the same
+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.
+
+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}.
+(This is particularly useful for search query results, where this
+allows you to perform a different search.)
+
+That's more-or-less it. Elpher supports a number of other features, such
+as bookmarking, support for different coding schemes and TLS encryption,
+and a variety of customization options, all of which are explained in
+the rest of this document.  However the emphasis is on keeping the basic
+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
+menu/directory, query result, text file or image.  We use
 
-Elpher's navigation interface heavily inspired by the Emacs Info mode.
+Elpher's navigation interface is inspired by the Emacs Info mode.
+Movement within a page is essentially the same as moving
+around any other text file in Emacs, but with special keys
+for quickly jumping between menu items and URLs in text files.
+Movement between pages is facilitated by a simple linear history
+coupled with caching of pages and cursor position.
 
 @menu
-* Within-page navigation::
-* Between-page navigation::
+* Within-page navigation::      Moving about within a page
+* Between-page navigation::     Commands for moving between pages
+* History and Caching::         Explanation of how Elpher represents history
 @end menu
 
+
 @node Within-page navigation, Between-page navigation, Navigation, Navigation
 @section Within-page navigation
 
-Within a single page
+To move about within a page, you should be able use the same keys you usually
+use to browse files in Emacs.  This is even true when Evil mode is
+enabled. Paragraph hopping, searching etc should work as usual.
+
+In addition, the following commands are provided for quickly moving between
+links and menu items.
+
+@table @asis
+@item @key{TAB}  (@code{elpher-next-link})
+Move to the next link or menu item in the file.
+
+@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})
+Jump directly to a link within a file by specifying its display string
+or link text.  (Unlike the previous two commands, this immediately opens
+the selected link.
+@end table
+
+The following commands can be used to retrieve information about the
+current page, or the address of the link at point:
+
+@table @asis
+@item @kbd{i}  (@code{elpher-info-link})
+Display host, port and selector information for the link at point.
 
-@node Between-page navigation,  , Within-page navigation, Navigation
+@item @kbd{I}  (@code{elpher-info-current})
+Display host, port and selector information for the current page.
+
+@item @kbd{c}  (@code{elpher-copy-link-url})
+Add URL representing address of link at point to the kill-ring and the
+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).
+
+@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, History and Caching, Within-page navigation, Navigation
 @section Between-page navigation
 
-@node Bookmarks, Customization, Navigation, Top
+Moving to a different page can be accomplished in several ways,
+described by the following command:
+
+@table @asis
+@item @kbd{RET}, @kbd{mouse-1}  (@code{elpher-follow-link})
+Follow the menu item or link at point (or selected with the mouse).
+
+Exactly what is meant by ``follow'' depends on the kind of item selected:
+
+@itemize
+@item
+For text or menu type items or links, the curent page text is replaced
+by the text of this item.  Unless the customization variable
+@code{elpher-use-header} (@pxref{Customization}) is 
+@code{nil}, the display string of the link is displayed in the buffer header.
+Links to images behave similarly on Emacs systems supporting the display of
+bitmap graphics, however their content is not cached in memory by default.
+
+@item
+When followed, links to search/query items (type 7) prompt for input in
+the minibuffer then display the results in the same way as for text and menu
+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 has been displayed, its contents are
+cached for the duration of the Emacs session. 
+
+@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 Customization, Hacking, Bookmarks, Top
-@chapter Customization
+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.
 
-@node Hacking, Index, Customization, Top
-@chapter Hacking
+@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 Encrypted connections, Customization, Character encodings, Top
+@chapter Encrypted connections
+
+@node Customization, Index, Encrypted connections, Top
+@chapter Customization
 
-@node Index,  , Hacking, Top
+@node Index,  , Customization, Top
 @unnumbered Index
 
 @printindex cp