Display both URL and IRI for page info when they differ.
[elpher.git] / elpher.texi
index 9a817e2..3b54a31 100644 (file)
@@ -1,7 +1,7 @@
 \input texinfo @c -*-texinfo-*-
 
 @setfilename elpher.info
-@settitle Elpher Manual v2.11.0
+@settitle Elpher Manual v3.2.2
 
 @dircategory Emacs
 @direntry
@@ -11,7 +11,9 @@
 @copying
 This manual documents Elpher, a gopher and gemini client for Emacs.
 
-Copyright @copyright{} 2019, 2020 Tim Vaughan
+Copyright @copyright{} 2019, 2020, 2021 Tim Vaughan@*
+Copyright @copyright{} 2021 Daniel Semyonov@*
+Copyright @copyright{} 2021 Alex Schroeder
 
 @quotation
 The source and documentation of Elpher is free software.  You can
@@ -42,12 +44,6 @@ the file COPYING in the same directory as this file for more details.
 @top Elpher
 
 @insertcopying
-@end ifnottex
-
-@macro keycmd{key,cmd}
-@item \key\  (@code{\cmd\})
-@findex \cmd\
-@end macro
 
 @menu
 * Introduction::                Elpher Overview: what's this all about?
@@ -56,11 +52,15 @@ 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
 * Gopher character encodings::  How Elpher selects encodings for gopher pages
-* Encrypted gopher connections::       How and when TLS is enabled for gopher
+* 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
+* Local files::                 Opening local files in elpher
+* About pages::                 Special pages and how to reference them
 * Customization::               How to customize various aspects of Elpher
 * Command Index::
+* News::                        Changes introduced by major releases
+* Acknowledgements::            Contributors to Elpher
 
 @detailmenu
  --- The Detailed Node Listing ---
@@ -74,6 +74,13 @@ Navigation
 @end detailmenu
 @end menu
 
+@end ifnottex
+
+@macro keycmd{key,cmd}
+@item \key\  (@code{\cmd\})
+@findex \cmd\
+@end macro
+
 @node Introduction, Installation, Top, Top
 @chapter Introduction
 
@@ -98,9 +105,6 @@ auto-completing menu item navigation,
 direct visualization of image files where supported (no writing to
 disk),
 
-@item
-a bookmark management system,
-
 @item
 basic support for the new ``heavier than gopher, lighter than the web'' Gemini protocol,
 
@@ -134,10 +138,10 @@ to follow the instructions at @url{https://melpa.org/#/getting-started}.
 @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://alexschroeder.ch/cgit/elpher}, adding it to a directory
-in your @code{load-path}, and then adding
+It is also possible to install Elpher directly by downloading the file
+@file{elpher.el} from @url{gopher://thelambdalab.xyz/1/projects/elpher}
+(you'll need to download the ``source archive'' and extract it), adding
+it to a directory in your @code{load-path}, and then adding
 
 @example
 (require 'elpher)
@@ -183,17 +187,24 @@ 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
+That's more-or-less it. Elpher supports a number of other features,
+such a 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.
 
+Note that you can launch multiple Elpher sessions in parallel by using
+a prefix:
+
+@example
+@kbd{C-u M-x elpher @key{RET}}
+@end example
+
 @node Navigation, Bookmarks, Quick Start, Top
 @chapter Navigation
 Throughout this manual, we use the word ``page'' to refer to any
 visualization of a response from a gopher or gemini server, be it a
-menu/directory, query result, text file or image.  We use
+menu/directory, query result, text file or image.
 
 Elpher's navigation interface is inspired by the Emacs Info mode.
 Movement within a page is essentially the same as moving
@@ -223,7 +234,8 @@ links and menu items.
 @keycmd{@key{TAB}, elpher-next-link}
 Move to the next link or menu item in the file.
 
-@keycmd{@kbd{Shift-@key{TAB}}/@key{backtab}, @code{elpher-prev-link}}
+@item @kbd{Shift-@key{TAB}} or @key{BACKTAB} (@code{elpher-prev-link})
+@findex elpher-prev-link
 Move to the previous link or menu item in the file.
 
 @keycmd{@key{m}, elpher-jump}
@@ -232,6 +244,7 @@ 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:
 
@@ -272,7 +285,7 @@ Moving to a different page can be accomplished in several ways,
 described by the following command:
 
 @table @asis
-@keycmd{@key{RET}\, @kbd{mouse-1}, elpher-follow-link}
+@keycmd{@key{RET}\, @key{mouse-1}, 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:
@@ -308,8 +321,9 @@ Once a text, menu or query response page has been displayed, its contents are
 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. (The protocol defaults to gopher, so gemini links must include the @code{gemini://} prefix.
+Open a particular page by specifying either its full URL or just
+entering a gopher host name. (The protocol defaults to gopher, so gemini
+links must include the @code{gemini://} prefix.
 
 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.
@@ -325,7 +339,7 @@ structure of selectors.
 @keycmd{@key{O}, elpher-root-dir}
 Open the root page (empty selector) on the current host.
 
-@keycmd{@key{u}\, @kbd{mouse-3}, elpher-back}
+@keycmd{@key{u}\, @key{-}\, @key{^}\, @key{mouse-3}, 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
@@ -367,12 +381,26 @@ this will be automatically positioned on the link that was most recently followe
 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}.
 
+Elpher actually maintains two histories, and there are two different
+commands to access them:
+
+@table @asis
+@keycmd{@key{s}, elpher-show-history}
+This shows the history of the current buffer. This shows all the links
+you would visit if you were to use @key{u} again and again.
+
+@keycmd{@key{S}, elpher-show-visited-pages}
+This shows the entire Elpher browsing history. It includes all the
+pages you visited in your current Emacs session.
+
+@end table
 
 @node Bookmarks, Gopher character encodings, Navigation, Top
 @chapter Bookmarks
 
-Elpher has a very simple link bookmarking system involving the
-following commands:
+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}
@@ -384,25 +412,37 @@ 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{x}, elpher-unbookmark-link}
-Immediately remove the bookmark (if one exists) to the link at point.
 
-@keycmd{@key{X}, elpher-unbookmark-current}
-Immediately remove the bookmark (if one exists) to 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.
 
-@keycmd{@key{B}, 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.
+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
@@ -415,8 +455,8 @@ 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.
+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
@@ -430,7 +470,7 @@ The alternative is to explicitly set the coding system used for decoding
 using the following command:
 
 @table @asis
-@keycmd{@key{S},elpher-set-coding-system}
+@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
@@ -591,7 +631,7 @@ 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
+@node Finger support, Local files, Gemini support, Top
 @chapter Finger support
 
 Incidentally, Elpher has native support for querying finger servers.
@@ -624,7 +664,63 @@ Thus @code{finger://user@@hostname} and @code{finger://hostname/user} are both e
 (The precedence of the /user notation over the user@ notation reflects a
 preference of the community.)
 
-@node Customization, Command Index, Finger support, Top
+@node Local files, About pages, Finger support, Top
+@chapter Local files
+
+Elpher supports opening local files via @samp{file:} URLs.
+
+For instance, pressing @key{g} and entering @code{file:~/document.gmi}
+will load the file named @samp{document.gmi} in your home directory,
+provided this file exists.
+
+Files opened in this way are rendered according to their name, and in
+particular their extension.  The current mappings are as follows:
+
+@table @asis
+
+@item @samp{txt}
+
+Plain text documents.  All local text files are assumed to be
+UTF-8-encoded.
+
+@item @samp{gophermap},@samp{gopher}
+
+Gophermap files, i.e. files containing a valid directory list as specified
+by RFC 1436.
+
+@item @samp{gemini},@samp{gmi}
+
+Gemini documents (i.e. documents of MIME type ``text/gemini'').  All
+local gemini files are assumed to be UTF-8-encoded.
+
+@item @samp{html},@samp{htm}
+
+HTML documents.  All local HTML files are assumed to be UTF-8-encoded.
+
+@item @samp{png},@samp{jpg},@samp{jpeg},@samp{gif},@samp{bmp},@samp{tif},@samp{tiff}
+
+Image files.
+
+@item Anything else
+A binary document, which elpher will simply offer to save somewhere
+else. (Obviously this is not useful in its own right, but there's not
+much that elpher can sensibly do with unknown binary files.)
+
+@end table
+
+
+@node About pages, Customization, Local files, Top
+@chapter About pages
+
+Like other browsers, elpher makes certain internally-generated pages
+such as the initial welcome page, the bookmarks page, the history
+stack and the list of visited pages pages accessible as URLs with
+the ``about:'' type.
+
+This means that these pages can be bookmarked and, more usefully,
+added to a local file to be rendered as a user-defined start page.
+
+@node Customization, Command Index, About pages, Top
 @chapter Customization
 
 Various parts of Elpher can be customized via the 
@@ -644,11 +740,149 @@ to display buffer headers, how to deal with ANSI escape sequences in
 text, the timeout to impose on network connections, and whether to
 prompt for confirmation when switching away from TLS.
 
+One particularly important customization is the @code{elpher-start-page-url}
+variable, which holds the URL of the page displayed initially when
+elpher starts, and when @key{U} is pressed.  By default this is set to
+@samp{about:welcome}, but any URL can be substituted.  For example, you
+might want to create a text/gemini file named
+@samp{~/.emacs/start-page.gmi} containing useful links and set the value
+of @code{elpher-start-page-url} to @samp{file:~/.emacs/start-page.gmi} to have
+these links displayed at startup.  Alternatively, you might prefer
+to set the value to @samp{about:bookmarks} so that the bookmarks page
+is used as the start page instead.
+
 See the customization group itself for details.
 
-@node Command Index,  , Customization, Top
+@node Command Index, News, Customization, Top
 @unnumbered Command Index
 
 @printindex fn
 
+@node News, Acknowledgements, Command Index, Top
+@chapter News
+
+This chapter documents the major changes introduced by Elpher releases.
+
+@section v3.2.0
+
+This version introduces several minor changes which, together, make it
+possible to set up alternative start pages configured to your liking.
+
+@subsection About pages
+
+Special elpher pages such as the welcome page (previously ``start''
+page), the bookmarks page, the browsing history stack and list of
+visited pages are now addressible via @samp{about:} URLs.  For instance,
+the standard welcome page has the address @samp{about:welcome}.
+
+@subsection Local files
+
+Local files can now be opened in elpher using @samp{file:} URLs. For
+example, @kbd{g @samp{file:~/my-start.gmi}} will open
+@samp{~/my-start.gmi} as a text/gemini document. @pxref{Local files}
+for details.
+
+@subsection Customizable start pages
+
+The new customization variable @code{elpher-start-page-url} contains the URL
+of the document to be loaded as elpher's ``start page''.  By default
+this is set to @samp{about:welcome}, but any elpher-accessible URL is
+valid. @pxref{Customization} for suggestions.
+
+@section v3.1.0
+
+@subsection Bookmarks system
+
+While Elpher bookmarks are still handled by the Emacs bookmark
+system, this release introduces the option to retain the
+original elpher bookmark page for the purpose of visiting those
+bookmarks.  In v3.1.0, @key{B} visits this page (and adds it to
+the history stack, as in previous versions), which can be interacted
+with using the standard elpher key bindings.
+
+Of course you can still view the bookmarks in the Emacs bookmark
+menu, which you can access from anywhere using the default
+binding @kbd{C-x r l} (or by following the link from the Elpher bookmarks
+page).  Indeed you will need to use this to rename, delete or otherwise
+edit your bookmarks.
+
+If you prefer to avoid using the Elpher bookmark page entirely, you
+use the customization variable @code{elpher-use-emacs-bookmark-menu}
+to have the @key{B} key open the Emacs bookmark menu directly, as in
+the previous release.
+
+@section v3.0.0
+
+@subsection Bookmarks system
+
+Bookmarks are now handled by Emacs' own bookmark management system,
+instead of Elpher's own system.
+(For details, @xref{Bookmarks, , , emacs, The Emacs Editor}.)
+This means two things.  Firstly,
+the bookmarks file (elpher-bookmarks by default) and format used by
+previous versions are now deprecated.  If these are detected, Elpher
+will offer to import your old bookmarks when you first accessing the
+bookmark list with the new version.  A suffix will be added to your
+old bookmarks file so that Elpher knows that the import is complete.
+
+Secondly, the old Elpher bookmark menu has been removed in the new
+version.  Instead, @key{B} brings up the menu provided by the Emacs
+function @code{bookmark-bmenu-list}. This has different key and mouse
+bindings to Elpher's old menu, but is much more functional.  Bookmarks
+can be renamed, deleted in groups, and much more.  (Use @kbd{C-h m} with
+the menu open to see the complete list.)
+
+@subsection History
+
+Browsing history can now be accessed via new bindings to @key{s} and @key{S}.
+The former shows the current history ``stack'' (pages accessible with
+the @key{u} key), while the latter shows a list of all pages which have
+been visited in the current session.
+
+@subsection Socks connections
+
+Elpher can now use socks connections to browse via TOR.
+
+@subsection browse-url, Org and mu4e integration
+
+These integrations provide support for elpher-handling of gemini, gopher
+and finger URLs using @code{browse-url}, in Org documents, and the mu4e
+mail system.
+
+@subsection imenu integration
+
+Gemini document headers are now navigable via imenu.
+For details, @xref{Imenu, , , emacs, The Emacs Editor}.
+
+@node Acknowledgements,  , News, Top
+@chapter Acknowledgements
+
+Elpher was originally written by Tim Vaughan. Recent maintenance has
+been done by and with the help of Alex Schroeder. In addition, the
+following people (in alphabetical order) have generously provided
+assistance and/or patches:
+
+@itemize
+@item Alexis
+@item Christopher Brannon
+@item Zhiwei Chen
+@item condy0919
+@item Étienne Deparis
+@item Roy Koushik
+@item Simon Nicolussi
+@item Noodles!
+@item Jens Östlund
+@item Abhiseck Paira
+@item F. Jason Park
+@item Omar Polo
+@item Koushk Roy
+@item Michel Alexandre Salim
+@item Alex Schroeder
+@item Daniel Semyonov
+@item Simon South
+@item Bradley Thornton
+@item Vee
+@end itemize
+
+
 @bye