X-Git-Url: https://thelambdalab.xyz/gitweb/index.cgi?p=elpher.git;a=blobdiff_plain;f=elpher.texi;h=0de237cabfd1b9fe4eb0dbdca4a307f939d2b2a0;hp=78db4bd866c1256e3483ca3ef36265097e731595;hb=c9175aedfaf3daeca6b2414f74ef703f2f6cbc1f;hpb=a1792d0f1a41f73811117326e37cfd61e491bcb1 diff --git a/elpher.texi b/elpher.texi index 78db4bd..0de237c 100644 --- a/elpher.texi +++ b/elpher.texi @@ -1,8 +1,12 @@ \input texinfo @c -*-texinfo-*- -@c %**start of header + @setfilename elpher.info -@settitle Elpher Manual v1.0.0 -@c %**end of header +@settitle Elpher Manual v2.0.0 + +@dircategory Emacs +@direntry +* Elpher: (elpher). A gopher client for Emacs. +@end direntry @copying This manual documents Elpher, a gopher client for Emacs. @@ -40,6 +44,11 @@ the file COPYING in the same directory as this file for more details. @insertcopying @end ifnottex +@macro keycmd{key,cmd} +@item \key\ (@code{\cmd\}) +@findex \cmd\ +@end macro + @menu * Introduction:: Elpher Overview: what's this all about? * Installation:: Installing Elpher @@ -48,8 +57,20 @@ the file COPYING in the same directory as this file for more details. * Bookmarks:: How to record and visit bookmarks * Character encodings:: How Elpher handles different character encodings * Encrypted connections:: How and when TLS is enabled +* Gemini support:: Support for the Gemini protocol * Customization:: How to customize various aspects of Elpher -* Index:: +* Command Index:: + +@detailmenu + --- The Detailed Node Listing --- + +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 detailmenu @end menu @node Introduction, Installation, Top, Top @@ -62,6 +83,9 @@ robust and behave in non-surprising ways at all times. Additionally, Elpher provides the following bells and whistles: @itemize +@item +followable web and gopher links in plain text, + @item an easily navigable history, sporting caching of visited pages (both content and cursor position), @@ -70,20 +94,21 @@ content and cursor position), auto-completing menu item navigation, @item -followable web and gopher links in plain text, +direct visualization of image files where supported (no writing to +disk), @item -direct visualization of image files where supported (no writing to -disk), and +a bookmark management system, @item -a simple bookmark management system. +basic support for the new ``heavier than gopher, lighter than the web'' Gemini protocol. + @end itemize 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 +can likely by incorporated quickly, so please get in touch if you have some ideas. @node Installation, Quick Start, Introduction, Top @@ -107,7 +132,7 @@ to follow the instructions at @url{https://melpa.org/#/getting-started}. 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 +@url{gopher://thelambdalab.xyz/1/projects/elpher/}, adding it to a directory in your @code{load-path}, and then adding @example @@ -192,13 +217,13 @@ In addition, the following commands are provided for quickly moving between links and menu items. @table @asis -@item @key{TAB} (@code{elpher-next-link}) +@keycmd{@key{TAB}, 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}) +@keycmd{@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}) +@keycmd{@key{m}, 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. @@ -208,30 +233,30 @@ 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}) +@keycmd{@key{i}, elpher-info-link} Display host, port and selector information for the link at point. -@item @kbd{I} (@code{elpher-info-current}) +@keycmd{@key{I}, elpher-info-current} Display host, port and selector information for the current page. -@item @kbd{c} (@code{elpher-copy-link-url}) +@keycmd{@key{c}, 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}) +@keycmd{@key{C}, 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}) +@keycmd{@key{d}, 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 +@keycmd{@key{D}, elpher-download-current} +This is similar to @code{elpher-download}, but instead applies to the current page rather than a link. -@item @kbd{w} (@code{elpher-view-raw}) +@keycmd{@key{.}, 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. @@ -244,14 +269,14 @@ 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}) +@keycmd{@key{RET}\, @kbd{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: @itemize @item -For text or menu type items or links, the curent page text is replaced +For text or menu type items or links, the current 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. @@ -279,21 +304,30 @@ Emacs' own EWW browser. (See @pxref{Customization}.) 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. +@keycmd{@key{g}, elpher-go} +Open a particular page by specifying either its full URL or just entering +a gopher host name. + +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. + +@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. -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. +Remember however, that the Gopher RFC 1436 provides no guarantees about the +structure of selectors. -@item @kbd{O} (@code{elpher-root-dir}) +@keycmd{@key{O}, elpher-root-dir} Open the root page (empty selector) on the current host. -@item @kbd{u} (@code{elpher-back}) +@keycmd{@key{u}\, @kbd{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 History and Caching, , Between-page navigation, Navigation @section History and Caching @@ -330,6 +364,7 @@ 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}. + @node Bookmarks, Character encodings, Navigation, Top @chapter Bookmarks @@ -337,22 +372,22 @@ Elpher has a very simple link bookmarking system involving the following commands: @table @asis -@item @key{a} (@code{elpher-bookmark-link}) +@keycmd{@key{a}, 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}) +@keycmd{@key{A}, 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}) +@keycmd{@key{x}, elpher-unbookmark-link} Immediately remove the bookmark (if one exists) to the link at point. -@item @key{X} (@code{elpher-unbookmark-current}) +@keycmd{@key{X}, elpher-unbookmark-current} Immediately remove the bookmark (if one exists) to the current page. -@item @key{B} (@code{elpher-bookmarks}) +@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 @@ -369,15 +404,117 @@ this file. @node Character encodings, Encrypted connections, Bookmarks, Top @chapter Character encodings -@node Encrypted connections, Customization, 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. +(See @pxref{Recognize coding, Recognizing coding systems, ,emacs}.) While +this approach can be okay, it is important to realize 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 +@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 +list of alternatives (which is extensive) and to auto-complete. An empty +response will cause Elpher to return to its default auto-detection +behaviour. +@end table + +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}. + + +@node Encrypted connections, Gemini support, Character encodings, Top @chapter Encrypted connections -@node Customization, Index, Encrypted connections, Top +While RFC 1436 does not broach the topic of encryption at all, several +modern gopher servers can serve content over encrypted connections, +and a common choice for this is TLS. + +Elpher can retrieve selectors using Emacs' built-in TLS support which +uses the GnuTLS library. (It is possible to build emacs without +GnuTLS, in which case encryption is not supported.) + +To retrieve documents using TLS, Elpher's TLS mode must be enabled. +This can be directly toggled using @key{T}, but note that just as with +the character encoding, changing this mode only affects subsequent +connections. + +Alternatively, TLS mode is @emph{automatically} enabled whenever +gopher URLs starting with @code{gophers://} are followed. + +The mode is sticky, so it remains active until switched off. +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, Customization, Encrypted connections, Top +@chapter Gemini support + +@uref{gopher://zaibatsu.circumlunar.space/1/~solderpunk/gemini, Gemini} +is a new protocol being devloped 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. +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 +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 +difference from your perspective as a user is that you should no longer +have to worry about manually toggling TLS on or off (for gemini it's +always on), and you should never have to manually set a character coding +scheme. + +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 not yet supported. + +@node Customization, Command Index, Gemini support, Top @chapter Customization -@node Index, , Customization, Top -@unnumbered Index +Various parts of Elpher can be customized via the +variables belonging to the elpher customization group, accessible +using + +@example +@kbd{M-x customize-group elpher @key{RET}} +@end example + +@noindent This group contains a number of faces that can be modified to change +the appearance of Elpher, including one face per menu item type. + +The group also contains variables for customizing the behaviour of +Elpher. This includes how to open arbitrary (non-gopher) URLs, whether +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. + +See the customization group itself for details. + +@node Command Index, , Customization, Top +@unnumbered Command Index -@printindex cp +@printindex fn @bye