\input texinfo @c -*-texinfo-*-
@setfilename elpher.info
-@settitle Elpher Manual v3.0.0
+@settitle Elpher Manual v3.4.0
@dircategory Emacs
@direntry
@copying
This manual documents Elpher, a gopher and gemini client for Emacs.
-Copyright @copyright{} 2019, 2020, 2021 Tim Vaughan@*
+Copyright @copyright{} 2019-2022 Tim Vaughan@*
Copyright @copyright{} 2021 Daniel Semyonov@*
Copyright @copyright{} 2021 Alex Schroeder
Elpher is distributed in the hope that it will be useful, but WITHOUT
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-FITNElpher FOR A PARTICULAR PURPOSE. See the GNU General Public License in
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License in
the file COPYING in the same directory as this file for more details.
@end quotation
@end copying
* 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
+* ANSI support:: Notes in Elpher's ANSI support
* Customization:: How to customize various aspects of Elpher
* Command Index::
* News:: Changes introduced by major releases
-* Acknowledgements:: Contributors to Elpher
+* Contributors:: Contributors to Elpher
@detailmenu
--- The Detailed Node Listing ---
@node Installation, Quick Start, Introduction, Top
@chapter Installation
-Elpher is available from the MELPA package repository. If you have
+@section Installing from ELPA or MELPA
+
+Elpher is available on the non-GNU ELPA package archive. If you are
+using Emacs 28 or later, this archive should be available on your system
+by default. For Emacs 27, you'll need to follow the instructions at
+@url{https://elpa.nongnu.org} to make the archive accessible.
+
+Alternatively, Elpher is available from the MELPA package archive. 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:
+Once one of these package archives is installed, enter the following to
+install Elpher:
@example
@kbd{M-x package-install @key{RET} elpher @key{RET}}
@kbd{M-x package-delete @key{RET} elpher @key{RET}}.
@end example
+@section Installing by hand
+
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
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:
@item
Following links of type `h' with a selector having the `URL:' prefix, or
-unsuported URLs in text files, will result in Elpher using an external
+unsupported 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}.)
@keycmd{@key{O}, elpher-root-dir}
Open the root page (empty selector) on the current host.
-@keycmd{@key{u}\, @key{-}\, @key{^}\, @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
@node Bookmarks, Gopher character encodings, Navigation, Top
@chapter Bookmarks
-Elpher makes use of standard Emacs bookmarks. @xref{Bookmarks, , ,
-emacs, The Emacs Editor}. The following commands are perhaps the most
-useful ones:
+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}
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}
-Open a page displaying all current bookmarks. This is where you can
-delete and search bookmarks, for example.
+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
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
+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 TLS
certificate file pair are erased from memory. Furthermore, in the case
of throw-away certificates, the corresponding files are deleted.
+@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, Customization, Gemini support, Top
+@node Finger support, Local files, Gemini support, Top
@chapter Finger support
Incidentally, Elpher has native support for querying finger servers.
(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, ANSI support, 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.
+
+To see the address of a special page, simply visit the page and
+press @key{I}.
+
+@node ANSI support, Customization, About pages, Top
+@chapter ANSI support
+
+Depending on which parts of the gopher/gemini universe you frequent,
+you may occasionally stumble on sites which use ANSI escape codes to
+either produce specific characters or to colour text.
+
+By default, elpher uses Emacs' built-in ANSI rendering library,
+@samp{ansi-color}, to process ANSI codes. This robustly interprets
+the escape codes but only supports 8 colours. Any colours unsupported
+by the library are simply stripped, leaving uncoloured text in the
+majority of cases.
+
+To drastically improve the number of colours produced, install the
+@samp{xterm-color} package from MELPA. This package will be automatically
+used by elpher if it is available, and supports 256 colours.
+This should be sufficient to properly render many ANSI colour
+gopher holes and gemini capsules quite nicely.
+
+In case you prefer to completely strip out the ANSI escape codes entirely
+by customizing the @code{elpher-filter-ansi-from-text} variable.
+
+
+@node Customization, Command Index, ANSI support, Top
@chapter Customization
Various parts of Elpher can be customized via the
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, News, Customization, Top
@printindex fn
-@node News, Acknowledgements, Command Index, Top
+@node News, Contributors, Command Index, Top
@chapter News
This chapter documents the major changes introduced by Elpher releases.
+@section v3.4.0
+
+@subsection Toggling preformatted text visibility
+
+This version introduces the ability to hide preformatted text in
+text/gemini documents by default. To enable this, set the customization
+variable @code{elpher-gemini-hide-preformatted} to non-nil. This causes
+all preformated text blocks to be replaced with their ``alt-text'' (if
+any is available) and a button for toggling the visibility of the text
+block.
+
+This feature is intended to make it easier for people using screen
+readers to read text/gemini documents.
+
+@section v3.3.0
+
+This version includes lots of bug fixes, as well as a couple of new
+features.
+
+@subsection Local gophermaps
+
+Local gophermaps can now be displayed using @samp{file:}. To render
+correctly, they must have the suffix @samp{.gopher} or @samp{.gophermap}.
+
+@subsection IRI support
+
+Internationalized Resource Identifiers (IRI) are an extension of URLs
+(or, more accurately, URIs) to support a larger set of characters beyond
+those in the US-ASCII character set. They map directly onto URIs for
+backwards compatibility, but look like gibberish if not properly
+decoded. When displaying URLs, Elpher now automatically decodes any IRI
+characters and displays the decoded IRI. (For security reasons, the
+@code{elpher-info-current} command (@kbd{I}) always displays both the
+decoded IRI and the URI when they differ.)
+
+@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 addressable 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
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, @kbd{B} brings up the menu provided by the Emacs
+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
@subsection History
-Browsing history can now be accessed via new bindings to @kbd{s} and @kbd{S}.
+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 @kbd{u} key), while the latter shows a list of all pages which have
+the @key{u} key), while the latter shows a list of all pages which have
been visited in the current session.
@subsection Socks connections
Gemini document headers are now navigable via imenu.
For details, @xref{Imenu, , , emacs, The Emacs Editor}.
-@node Acknowledgements, , News, Top
-@chapter Acknowledgements
+@node Contributors, , News, Top
+@chapter Contributors
-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:
+Elpher was originally written and is currently maintained by Tim Vaughan
+@email{plugd@@thelambdalab.xyz}. Significant improvements and
+maintenance have also been contributed by and with the help of Alex
+Schroeder @email{alex@@gnu.org}. In addition, the following people have
+all 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 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
+@item Jens Östlund @email{jostlund@@gmail.com}
+@item F. Jason Park @email{jp@@neverwas.me}
+@item Christopher Brannon @email{chris@@the-brannons.com}
+@item Omar Polo @email{op@@omarpolo.com}
+@item Noodles! @email{nnoodle@@chiru.no}
+@item Abhiseck Paira @email{abhiseckpaira@@disroot.org}
+@item Zhiwei Chen @email{chenzhiwei03@@kuaishou.com}
+@item condy0919 @email{condy0919@@gmail.com}
+@item Alexis @email{flexibeast@@gmail.com}
+@item Étienne Deparis @email{etienne@@depar.is}
+@item Simon Nicolussi @email{sinic@@sinic.name}
+@item Michel Alexandre Salim @email{michel@@michel-slm.name}
+@item Koushk Roy @email{kroy@@twilio.com}
+@item Vee @email{vee@@vnsf.xyz}
+@item Simon South @email{simon@@simonsouth.net}
+@item Daniel Semyonov @email{daniel@@dsemy.com}
+@item Bradley Thornton @email{bradley@@northtech.us}
@end itemize
-
@bye