Version bump.
[elpher.git] / elpher.texi
1 \input texinfo @c -*-texinfo-*-
2
3 @setfilename elpher.info
4 @settitle Elpher Manual v3.1.0
5
6 @dircategory Emacs
7 @direntry
8 * Elpher: (elpher). A gopher and gemini client for Emacs.
9 @end direntry
10
11 @copying
12 This manual documents Elpher, a gopher and gemini client for Emacs.
13
14 Copyright @copyright{} 2019, 2020, 2021 Tim Vaughan@*
15 Copyright @copyright{} 2021 Daniel Semyonov@*
16 Copyright @copyright{} 2021 Alex Schroeder
17
18 @quotation
19 The source and documentation of Elpher is free software.  You can
20 redistribute it and/or modify it under the terms of the GNU General
21 Public License as published by the Free Software Foundation; either
22 version 3, or (at your option) any later version.
23
24 Elpher is distributed in the hope that it will be useful, but WITHOUT
25 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
26 FITNElpher FOR A PARTICULAR PURPOSE. See the GNU General Public License in
27 the file COPYING in the same directory as this file for more details.
28 @end quotation
29 @end copying
30
31 @titlepage
32 @title Elpher Gopher and Gemini Client Manual
33 @author Tim Vaughan
34
35 @page
36 @vskip 0pt plus 1filll
37 @insertcopying
38 @end titlepage
39
40 @contents
41
42 @ifnottex
43 @node Top, Introduction, (dir), (dir)
44 @top Elpher
45
46 @insertcopying
47
48 @menu
49 * Introduction::                Elpher Overview: what's this all about?
50 * Installation::                Installing Elpher
51 * Quick Start::                 Get up and running quickly
52 * Navigation::                  Fundamentals of Elpher navigation
53 * Bookmarks::                   How to record and visit bookmarks
54 * Gopher character encodings::  How Elpher selects encodings for gopher pages
55 * Encrypted gopher connections::  How and when TLS is enabled for gopher
56 * Gemini support::              Support for the Gemini protocol
57 * Finger support::              Support for the Finger protocol
58 * Customization::               How to customize various aspects of Elpher
59 * Command Index::
60 * News::                        Changes introduced by major releases
61 * Acknowledgements::            Contributors to Elpher
62
63 @detailmenu
64  --- The Detailed Node Listing ---
65
66 Navigation
67
68 * Within-page navigation::      Moving about within a page
69 * Between-page navigation::     Commands for moving between pages
70 * History and Caching::         Explanation of how Elpher represents history
71
72 @end detailmenu
73 @end menu
74
75 @end ifnottex
76
77 @macro keycmd{key,cmd}
78 @item \key\  (@code{\cmd\})
79 @findex \cmd\
80 @end macro
81
82 @node Introduction, Installation, Top, Top
83 @chapter Introduction
84
85 Elpher aims to be a capable and practical gopher and gemini client for
86 Emacs.  Its focus is on easy keyboard-driven navigation based on
87 sensible default bindings (with out-of-the-box support for Evil).  It is
88 intended to be robust and behave in non-surprising ways at all times.
89 Additionally, Elpher provides the following bells and whistles:
90
91 @itemize
92 @item
93 followable web and gopher links in plain text,
94
95 @item
96 an easily navigable history, sporting caching of visited pages (both
97 content and cursor position),
98
99 @item
100 auto-completing menu item navigation,
101
102 @item
103 direct visualization of image files where supported (no writing to
104 disk),
105
106 @item
107 basic support for the new ``heavier than gopher, lighter than the web'' Gemini protocol,
108
109 @item
110 support for the Finger protocol.
111
112 @end itemize
113
114 Elpher is still under active development.  Although we try very hard to
115 ensure that releases are bug-free, this cannot be guaranteed.  However,
116 this also means that any usability features that you feel are missing
117 can likely by incorporated quickly, so please get in touch if you
118 have some ideas.
119
120 @node Installation, Quick Start, Introduction, Top
121 @chapter Installation
122
123 Elpher is available from the MELPA package repository.  If you have
124 never installed packages from this repository before, you'll need
125 to follow the instructions at @url{https://melpa.org/#/getting-started}.
126
127 @noindent To install Elpher, enter the following:
128
129 @example
130 @kbd{M-x package-install @key{RET} elpher @key{RET}}
131 @end example
132
133 @noindent To uninstall, use
134
135 @example
136 @kbd{M-x package-delete @key{RET} elpher @key{RET}}.
137 @end example
138
139 It is also possible to install Elpher directly by downloading the file
140 @file{elpher.el} from @url{gopher://thelambdalab.xyz/1/projects/elpher}
141 (you'll need to download the ``source archive'' and extract it), adding
142 it to a directory in your @code{load-path}, and then adding
143
144 @example
145 (require 'elpher)
146 @end example
147
148 @noindent to your Emacs initialization file.
149
150 @node Quick Start, Navigation, Installation, Top
151 @chapter Quick Start
152
153 Before diving into the minutiae of the different commands available,
154 we will quickly describe how to get up and running with Elpher.
155
156 Once installed, you can launch Elpher using
157
158 @example
159 @kbd{M-x elpher @key{RET}}
160 @end example
161
162 @noindent This will switch to the *Elpher* buffer and display a start
163 page, with information on each of the default keyboard bindings.
164
165 From here you can move point between links (which may be menu items or
166 inline URLs in text files) by using @key{TAB} and @kbd{S-@key{TAB}},
167 as in Info.  You can also jump directly to a menu item using @key{m}, or
168 use the standard Emacs or Evil motion and search commands to find your
169 way around.  To open a link, press @key{RET}.  (Where a mouse is
170 available, Clicking on a link with the mouse cursor has the same
171 effect.)
172
173 To return to the page you just followed the link from, press @key{u}.
174
175 Elpher caches (for the duration of an Emacs session) both page contents
176 and the position of point on each of the pages (gopher menus, gemini
177 pages, query results, or text pages) you visit, restoring these when you
178 next visit the same page.  Thus, pressing @key{u} displays the previous
179 page in exactly the same state as when you left, meaning that you can
180 quickly and visually explore the different documents in a menu without
181 having to wait for anything to reload.
182
183 Of course, sometimes you'll @emph{want} to reload the current page
184 rather than stick with the cached version.  To do this use @key{R}.
185 (This is particularly useful for search query results, where this
186 allows you to perform a different search.)
187
188 That's more-or-less it. Elpher supports a number of other features,
189 such a support for different coding schemes and TLS encryption, and a
190 variety of customization options, all of which are explained in the
191 rest of this document. However the emphasis is on keeping the basic
192 navigation experience as intuitive and responsive as possible.
193
194 Note that you can launch multiple Elpher sessions in parallel by using
195 a prefix:
196
197 @example
198 @kbd{C-u M-x elpher @key{RET}}
199 @end example
200
201 @node Navigation, Bookmarks, Quick Start, Top
202 @chapter Navigation
203 Throughout this manual, we use the word ``page'' to refer to any
204 visualization of a response from a gopher or gemini server, be it a
205 menu/directory, query result, text file or image.
206
207 Elpher's navigation interface is inspired by the Emacs Info mode.
208 Movement within a page is essentially the same as moving
209 around any other text file in Emacs, but with special keys
210 for quickly jumping between menu items and URLs in text files.
211 Movement between pages is facilitated by a simple linear history
212 coupled with caching of pages and cursor position.
213
214 @menu
215 * Within-page navigation::      Moving about within a page
216 * Between-page navigation::     Commands for moving between pages
217 * History and Caching::         Explanation of how Elpher represents history
218 @end menu
219
220
221 @node Within-page navigation, Between-page navigation, Navigation, Navigation
222 @section Within-page navigation
223
224 To move about within a page, you should be able use the same keys you usually
225 use to browse files in Emacs.  This is even true when Evil mode is
226 enabled. Paragraph hopping, searching etc should work as usual.
227
228 In addition, the following commands are provided for quickly moving between
229 links and menu items.
230
231 @table @asis
232 @keycmd{@key{TAB}, elpher-next-link}
233 Move to the next link or menu item in the file.
234
235 @item @kbd{Shift-@key{TAB}} or @key{BACKTAB} (@code{elpher-prev-link})
236 @findex elpher-prev-link
237 Move to the previous link or menu item in the file.
238
239 @keycmd{@key{m}, elpher-jump}
240 Jump directly to a link within a file by specifying its display string
241 or link text.  (Unlike the previous two commands, this immediately opens
242 the selected link.
243 @end table
244
245
246 The following commands can be used to retrieve information about the
247 current page, or the address of the link at point:
248
249 @table @asis
250 @keycmd{@key{i}, elpher-info-link}
251 Display host, port and selector information for the link at point.
252
253 @keycmd{@key{I}, elpher-info-current}
254 Display host, port and selector information for the current page.
255
256 @keycmd{@key{c}, elpher-copy-link-url}
257 Add URL representing address of link at point to the kill-ring and the
258 system clipboard (if available).
259
260 @keycmd{@key{C}, elpher-copy-current-url}
261 Add URL representing address of the current page to the kill-ring and
262 the system clipboard (if available).
263
264 @keycmd{@key{d}, elpher-download}
265 Download link at point and save the result as a file.  The minibuffer
266 will prompt for the name of the file to write, with the default name being
267 the display string (if available) associated with the link.
268
269 @keycmd{@key{D}, elpher-download-current}
270 This is similar to @code{elpher-download}, but instead applies to the
271 current page rather than a link.
272
273 @keycmd{@key{.}, elpher-view-raw}
274 This displays the raw server response for the current page.  While not
275 useful for general browsing, it is useful for debugging incorrect rendering
276 or out-of-spec server responses.
277 @end table
278
279 @node Between-page navigation, History and Caching, Within-page navigation, Navigation
280 @section Between-page navigation
281
282 Moving to a different page can be accomplished in several ways,
283 described by the following command:
284
285 @table @asis
286 @keycmd{@key{RET}\, @key{mouse-1}, elpher-follow-link}
287 Follow the menu item or link at point (or selected with the mouse).
288
289 Exactly what is meant by ``follow'' depends on the kind of item selected:
290
291 @itemize
292 @item
293 For text or menu type items or links, the current page text is replaced
294 by the text of this item.  Unless the customization variable
295 @code{elpher-use-header} (@pxref{Customization}) is 
296 @code{nil}, the display string of the link is displayed in the buffer header.
297 Links to images behave similarly on Emacs systems supporting the display of
298 bitmap graphics, however their content is not cached in memory by default.
299
300 @item
301 When followed, links to search/query items (type 7) prompt for input in
302 the minibuffer then display the results in the same way as for text and menu
303 items.
304
305 @item
306 Following links to binary files (and image files on unsupported systems)
307 causes Elpher to prompt for a filename in which to save the content.
308
309 @item
310 Following links of type `h' with a selector having the `URL:' prefix, or
311 unsuported URLs in text files, will result in Elpher using an external
312 programme to open the URL.  This will be either the default system browser
313 or, if the @code{elpher-open-urls-with-eww} customization variable is non-nil,
314 Emacs' own EWW browser. (See @pxref{Customization}.) 
315
316 @end itemize
317
318 Once a text, menu or query response page has been displayed, its contents are
319 cached for the duration of the Emacs session. 
320
321 @keycmd{@key{g}, elpher-go}
322 Open a particular page by specifying either its full URL or just
323 entering a gopher host name. (The protocol defaults to gopher, so gemini
324 links must include the @code{gemini://} prefix.
325
326 If a unsupported protocol is used in the URL the result will be the same
327 as following a URL link of the same type from a link in a page.
328
329 @keycmd{@key{o}, elpher-go-current}
330 Prompts for a URL similar to @code{elpher-go}, but initialized to the URL
331 of the current page.  This allows you to easily try other selectors for the
332 same server.
333
334 Remember however, that the Gopher RFC 1436 provides @emph{no} guarantees about the
335 structure of selectors.
336
337 @keycmd{@key{O}, elpher-root-dir}
338 Open the root page (empty selector) on the current host.
339
340 @keycmd{@key{u}\, @key{-}\, @key{^}\, @key{mouse-3}, elpher-back}
341 Return to the previous page, where ``previous'' means the page where the
342 page which was displayed immediately before the current page.
343 @end table
344
345
346 @node History and Caching,  , Between-page navigation, Navigation
347 @section History and Caching 
348
349 The history and caching strategy in Elpher is extremely simple, but
350 may be confusing without a good mental model of how it works.  That
351 is what this section attempts to provide.
352
353 Essentially, @strong{every} time you navigate to a new page, either
354 by clicking or pressing @key{RET} on a link, using @key{g} to jump
355 to a new page by its address, or using @key{O} to open the root selector,
356 the following two things occur:
357
358 @enumerate
359 @item
360 the cursor position and content for the original page are recorded in an
361 in-memory cache, and
362
363 @item
364 the original page is set as the ``parent'' of the new page.
365 @end enumerate
366
367 The only way to return to pages in this history is by using @key{u},
368 which returns to the previous of the current page.  @footnote{The
369 addition of the new page to the history happens even if the new page is
370 one that has been seen before. This is mostly the desired behaviour.
371 However, opening an explicit ``back'' link provided by a gopher menu or
372 gemini page will also add a new entry to the history.  Unless you
373 haven't yet visited that menu, it's therefore better to use @key{u} to
374 go back in this case.}
375
376 One aspect that may seem peculiar is that Elpher lacks a corresponding ``next'' or
377 ``forward'' command.  However, since Elpher caches the position of point,
378 this will be automatically positioned on the link that was most recently followed
379 from a given page.  This means that, at least for links followed from menus
380 and text files, the inverse of @key{u} is actually just @key{RET}.
381
382 Elpher actually maintains two histories, and there are two different
383 commands to access them:
384
385 @table @asis
386 @keycmd{@key{s}, elpher-show-history}
387 This shows the history of the current buffer. This shows all the links
388 you would visit if you were to use @key{u} again and again.
389
390 @keycmd{@key{S}, elpher-show-visited-pages}
391 This shows the entire Elpher browsing history. It includes all the
392 pages you visited in your current Emacs session.
393
394 @end table
395
396 @node Bookmarks, Gopher character encodings, Navigation, Top
397 @chapter Bookmarks
398
399 Elpher makes use of standard Emacs bookmarks.
400 @xref{Bookmarks, , , emacs, The Emacs Editor}.
401 The following commands are used to add new bookmarks:
402
403 @table @asis
404 @keycmd{@key{a}, elpher-bookmark-link}
405 Add a bookmark for the link at point.  The minibuffer will prompt for
406 a name for the bookmark, which defaults to the display string.
407
408 @keycmd{@key{A}, elpher-bookmark-current}
409 Add a bookmark for the current page.  The minibuffer will prompt for
410 a name for the bookmark, defaulting to the display string associated
411 with the link that was followed to reach the current page.
412
413
414 @keycmd{@key{B}, elpher-open-bookmarks}
415 Visit a page displaying all elpher bookmarks. 
416 The behaviour of the this function depends on the customization variable
417 @code{elpher-use-emacs-bookmark-menu}.  If nil (the default), the
418 command will visit a special elpher page listing all elpher-specific
419 bookmarks.  If non-nil, the command will simply open the standard Emacs
420 bookmark list displaying all current bookmarks (including non-elpher
421 bookmarks).
422
423 @keycmd{@kbd{C-x r l}, bookmark-bmenu-list}
424 This command opens the standard Emacs bookmark menu, with which bookmarks
425 can be renamed, deleted or annotated.
426
427 @end table
428
429 On opening the bookmarks page, elpher will offer to import any legacy
430 (2.x) bookmarks files into the new system. Once the import is complete,
431 the original bookmarks file will have ``-legacy'' appended to it, so
432 so that elpher knows not to import it again.
433
434 If you have any other legacy bookmark files (besides the one in the
435 original location, or specified in the @code{elpher-bookmarks-file}
436 customization variable, which should be automatically detected), you can
437 can import these using
438
439 @example
440 @kbd{M-x elpher-bookmark-import @key{RET}}
441 @end example
442
443 Once this is done, you may delete these legacy bookmarks files.
444
445 @node Gopher character encodings, Encrypted gopher connections, Bookmarks, Top
446 @chapter Gopher character encodings
447
448 Responses Elpher retrieves from servers are initially read as pure
449 binary data.  When the data is intended to be interpreted as textual (as
450 determined by the type parameter of the gopher menu item or the gopher
451 URL), this data needs to be @emph{decoded} into a sequence of
452 characters.  To do this properly requires knowledge of the encoding
453 system used by whoever authored the document.
454
455 Unfortunately gopher lacks a systematic way of acquiring this necessary
456 information. Thus, the details of the coding system must be either
457 inferred from the binary data, or must be specified by the user.
458
459 By default, Elpher applies Emacs' built-in character encoding detection
460 system to the full (undecoded) response data and uses this to attempt to
461 convert it into a character string.
462 (See @pxref{Recognize coding, Recognizing coding systems, ,emacs}.) While
463 this approach can be okay, it is important to realize that its inference
464 algorithm is extremely primitive and depends heavily on assumptions based
465 on the language settings of your emacs system.
466
467 The alternative is to explicitly set the coding system used for decoding
468 using the following command:
469
470 @table @asis
471 @keycmd{@key{!},elpher-set-coding-system}
472 Causes a elpher to prompt for a coding system to use for decoding
473 future gopher text.  The @key{TAB} key can be used at this prompt to display a
474 list of alternatives (which is extensive) and to auto-complete.  An empty
475 response will cause Elpher to return to its default auto-detection
476 behaviour.
477 @end table
478
479 Note that changing the coding system only affects newly loaded text.
480 Thus, if text has already been decoded using an incorrect system, you
481 will need to select the correct coding and then reload the text using
482 @key{R}.
483
484
485 @node Encrypted gopher connections, Gemini support, Gopher character encodings, Top
486 @chapter Encrypted gopher connections
487
488 While RFC 1436 does not broach the topic of encryption at all, several
489 modern gopher servers can serve content over encrypted connections,
490 and a common choice for this is TLS.
491
492 Elpher can retrieve selectors using Emacs' built-in TLS support which
493 uses the GnuTLS library. (It is possible to build emacs without
494 GnuTLS, in which case encryption is not supported.)
495
496 To retrieve documents using TLS, Elpher's TLS mode must be enabled.
497 This can be directly toggled using @key{T}, but note that just as with
498 the character encoding, changing this mode only affects subsequent
499 connections.
500
501 Alternatively, TLS mode is @emph{automatically} enabled whenever
502 gopher URLs starting with @code{gophers://} are followed.
503
504 The mode is sticky, so it remains active until switched off.
505 It can also be automatically switched off when a TLS connection fails.
506 In this case Elpher will prompt for your confirmation to ensure that
507 you can't accidentally make a non-TLS connection.
508
509 @node Gemini support, Finger support, Encrypted gopher connections, Top
510 @chapter Gemini support
511
512 @uref{gopher://gemini.circumlunar.space, Gemini}
513 is a new protocol being developed by several members of
514 gopherspace.  It aims to solve some of the long-standing technical
515 issues associated with gopher as a protocol, while keeping the major benefits.
516 For instance, it _requires_ encrypted connections, it does away with
517 the selector type, and allows servers to explicitly specify the
518 character coding scheme used for text documents.
519
520 The latest versions of Elpher aim to provide seamless transitions between
521 gemini and gopher documents.  Basically you should be able to open,
522 bookmark, download and otherwise interact with gemini pages in exactly
523 the same way as you do with other non-gemini pages.  The only major
524 difference from your perspective as a user is that you should no longer
525 have to worry about manually toggling TLS on or off (for gemini it's
526 always on), and you should never have to manually set a character coding
527 scheme.
528
529 The gemini protocol specification recommends a Trust on First Use (TOFU)
530 behaviour when validating gemini server TLS certificates.  This is
531 because many gemini servers rely on self-signed certificates rather
532 than certificates signed by a CA. Sadly however, this TOFU behaviour is
533 far from straight-forward to configure using Emacs' existing Network
534 Security Manager.  For this reason, elpher defaults to performing no
535 certificate verification by default.  This behaviour can be easily
536 customized by setting the @code{elpher-gemini-TLS-cert-checks}
537 customization variable to non-nil.
538
539 The gemini specification concerns both the protocol and a simple text
540 document format (mimetype text/gemini) which is like a mixture between
541 gophermap files and markdown-formatted files but simpler than both.
542 Elpher renders gemini responses which are provided in this format in
543 line with the rules in the spec.  This includes wrapping long lines at
544 word boundaries.  The specific column at which this text is wrapped is
545 defined by the customization variable
546 @code{elpher-gemini-max-fill-width}, which is set to 80 columns by
547 default. (This is slightly wider than Emacs' default fill width of 70
548 columns due to the fact that there are a significant amount of older
549 gemini content which, against the advice of the current spec, hard wraps
550 at <80 columns.  The larger default allows this to still look okay,
551 while still keeping content without hard wraps looking pleasant.)
552
553 The text/gemini format also possesses a section header syntax similar to
554 markdown.  Elpher allows different header levels to be drawn with
555 different, customizable, faces.  By default, on graphically-capable
556 emacs systems, these faces are given different heights to distinguish
557 among levels.  On terminal systems, the level is indicated by the
558 number of preceding # symbols.
559
560 I should emphasize however that, while it is definitely functional,
561 Elpher's gemini support is still experimental, and various aspects will
562 change as the protocol develops further.
563
564 @section Client Certificates for Gemini
565
566 Gemini makes explicit use of the client certificate mechanism that TLS
567 provides for allowing clients to authenticate themselves with servers.
568 The Gemini specification suggests two distinct classes of client
569 certificates: short-lived certificates used to identify you for a single
570 session, and more permanent certificates used to identify you over a
571 longer time period.
572
573 When Elpher receives a request for a client certificate from a server,
574 it will present you with the option to create and use a single-use
575 ``throwaway'' certificate, or to use a ``persistent''
576 certificate (optionally creating it or installing pre-existing key and
577 certificate files).
578
579 Certificate creation in Elpher requires an installation of OpenSSL, and
580 ---in particular---that Elpher be able to run the @command{openssl} command-line
581 utility.  By default, Elpher assumes that the @command{openssl} is on the
582 system path, but the precise location can be set by customizing the
583 @code{elpher-openssl-command} variable.
584
585 Each generated certificate results in the creation of a .key file and
586 a .crt file.  In the case of a throwaway certificate, these files are
587 stored in the temporary directory indicated by the Emacs variable
588 @code{temporary-file-directory} and are deleted when ``forgotten''
589 (as described below).
590
591 In the case of persistent certificates, these files are stored in the
592 folder defined by the Elpher variable
593 @code{elpher-certificate-directory}, and are never deleted by Elpher.
594 (Of course you can delete them yourself whenever you like.)
595 The base name of the files (i.e. sans extension) is what Elpher uses
596 to identify the certificate.
597
598 Using throwaway certificates is as simple as pressing the @key{t} 
599 key at the prompt which appears following a certificate request from
600 a server.  There is nothing more to do.
601
602 Using a persistent certificate requires instead selecting @key{p} from the same
603 menu.  This will result in Elpher asking you for the name identifying
604 the certificate.  This entry autocompletes to the list of known certificate
605 names, so you can use @key{TAB} to display the list.
606
607 In the case that you choose a name that does not belong to the list of
608 known certificates, Elpher will offer to create one for you or to
609 ``install'' one from existing key and certificate files.
610 Pressing the @key{n} key will cause Elpher to begin the process of
611 creating a new persistent certificate, using some additional
612 details for which you will be prompted.
613 Alternatively, pressing the @key{i} key will cause Elpher to ask for the
614 locations of edisting key and certificate files to add to
615 @code{elpher-certificate-directory} under the chosen name.
616
617 Once a certificate is selected, it will be used for all subsequent TLS
618 transactions to the host for which the certificate was created.
619 It is immediately ``forgotten'' when a TLS connection to another host
620 is attempted, or the following command is issued:
621
622 @table @asis
623 @keycmd{@key{F},elpher-forget-certificate}
624 Causes Elpher to immediately forget any currently-loaded client certificate.
625 @end table
626
627 In either case, ``forgetting'' means that the details of the key and
628 certificate file pair are erased from memory.  Furthermore, in the case
629 of throw-away certificates, the corresponding files are deleted.
630
631
632 @node Finger support, Customization, Gemini support, Top
633 @chapter Finger support
634
635 Incidentally, Elpher has native support for querying finger servers.
636 Of course, one could argue that this functionality is more easily
637 provided by one's local telnet client.  However finger URLs do appear
638 on occasion in gopherspace, and it's nice to be able to open them
639 in place.
640
641 Elpher interprets @code{finger://} URLs as follows:
642
643 @itemize
644
645 @item
646 The host is determined by the host name portion of the URL.
647
648 @item
649 In the case that the @emph{file name} portion of the URL is non-empty (besides
650 the leading slash), this is interpreted as the user to finger.
651
652 @item
653 Otherwise, the @emph{user} portion of the URL is interpreted as the user to finger.
654
655 @item
656 If no user is provided, the root directory of the finger server is requested.
657
658 @end itemize
659
660 Thus @code{finger://user@@hostname} and @code{finger://hostname/user} are both equivalent.
661
662 (The precedence of the /user notation over the user@ notation reflects a
663 preference of the community.)
664
665 @node Customization, Command Index, Finger support, Top
666 @chapter Customization
667
668 Various parts of Elpher can be customized via the 
669 variables belonging to the elpher customization group, accessible
670 using
671
672 @example
673 @kbd{M-x customize-group elpher @key{RET}}
674 @end example
675
676 @noindent This group contains a number of faces that can be modified to change
677 the appearance of Elpher, including one face per menu item type.
678
679 The group also contains variables for customizing the behaviour of
680 Elpher.  This includes how to open arbitrary (non-gopher) URLs, whether
681 to display buffer headers, how to deal with ANSI escape sequences in
682 text, the timeout to impose on network connections, and whether to
683 prompt for confirmation when switching away from TLS.
684
685 See the customization group itself for details.
686
687 @node Command Index, News, Customization, Top
688 @unnumbered Command Index
689
690 @printindex fn
691
692 @node News, Acknowledgements, Command Index, Top
693 @chapter News
694
695 This chapter documents the major changes introduced by Elpher releases.
696
697 @section v3.1.0
698
699 @subsection Bookmarks system
700
701 While Elpher bookmarks are still handled by the Emacs bookmark
702 system, this release introduces the option to retain the
703 original elpher bookmark page for the purpose of visiting those
704 bookmarks.  In v3.1.0, @key{B} visits this page (and adds it to
705 the history stack, as in previous versions), which can be interacted
706 with using the standard elpher key bindings.
707
708 Of course you can still view the bookmarks in the Emacs bookmark
709 menu, which you can access from anywhere using the default
710 binding @kbd{C-x r l} (or by following the link from the Elpher bookmarks
711 page).  Indeed you will need to use this to rename, delete or otherwise
712 edit your bookmarks.
713
714 If you prefer to avoid using the Elpher bookmark page entirely, you
715 use the customization variable @code{elpher-use-emacs-bookmark-menu}
716 to have the @key{B} key open the Emacs bookmark menu directly, as in
717 the previous release.
718
719 @section v3.0.0
720
721 @subsection Bookmarks system
722
723 Bookmarks are now handled by Emacs' own bookmark management system,
724 instead of Elpher's own system.
725 (For details, @xref{Bookmarks, , , emacs, The Emacs Editor}.)
726 This means two things.  Firstly,
727 the bookmarks file (elpher-bookmarks by default) and format used by
728 previous versions are now deprecated.  If these are detected, Elpher
729 will offer to import your old bookmarks when you first accessing the
730 bookmark list with the new version.  A suffix will be added to your
731 old bookmarks file so that Elpher knows that the import is complete.
732
733 Secondly, the old Elpher bookmark menu has been removed in the new
734 version.  Instead, @key{B} brings up the menu provided by the Emacs
735 function @code{bookmark-bmenu-list}. This has different key and mouse
736 bindings to Elpher's old menu, but is much more functional.  Bookmarks
737 can be renamed, deleted in groups, and much more.  (Use @kbd{C-h m} with
738 the menu open to see the complete list.)
739
740 @subsection History
741
742 Browsing history can now be accessed via new bindings to @key{s} and @key{S}.
743 The former shows the current history ``stack'' (pages accessible with
744 the @key{u} key), while the latter shows a list of all pages which have
745 been visited in the current session.
746
747 @subsection Socks connections
748
749 Elpher can now use socks connections to browse via TOR.
750
751 @subsection browse-url, Org and mu4e integration
752
753 These integrations provide support for elpher-handling of gemini, gopher
754 and finger URLs using @code{browse-url}, in Org documents, and the mu4e
755 mail system.
756
757 @subsection imenu integration
758
759 Gemini document headers are now navigable via imenu.
760 For details, @xref{Imenu, , , emacs, The Emacs Editor}.
761
762 @node Acknowledgements,  , News, Top
763 @chapter Acknowledgements
764
765 Elpher was originally written by Tim Vaughan. Recent maintenance has
766 been done by and with the help of Alex Schroeder. In addition, the
767 following people (in alphabetical order) have generously provided
768 assistance and/or patches:
769
770 @itemize
771 @item Alexis
772 @item Christopher Brannon
773 @item Zhiwei Chen
774 @item condy0919
775 @item Étienne Deparis
776 @item Roy Koushik
777 @item Simon Nicolussi
778 @item Noodles!
779 @item Jens Östlund
780 @item F. Jason Park
781 @item Omar Polo
782 @item Koushk Roy
783 @item Michel Alexandre Salim
784 @item Alex Schroeder
785 @item Daniel Semyonov
786 @item Simon South
787 @item Bradley Thornton
788 @item Vee
789 @end itemize
790
791
792 @bye