;; Author: Tim Vaughan <tgvaughan@gmail.com>
;; Created: 11 April 2019
-;; Version: 1.0.0
+;; Version: 1.1.0
;; Keywords: comm gopher
;; Homepage: https://github.com/tgvaughan/elpher
;; Package-Requires: ((emacs "25"))
;; - (m)enu key support, similar to Emacs' info browser,
;; - clickable web and gopher links in plain text.
-;; The caching mechanism works by maintaining a hierarchy of visited
-;; pages rather than a linear history, meaning that it is quick and
-;; easy to navigate this history.
+;; Visited pages are stored as a hierarchy rather than a linear history,
+;; meaning that navigation between these pages is quick and easy.
;; To launch Elpher, simply use 'M-x elpher'. This will open a start
;; page containing information on key bindings and suggested starting
:type '(boolean))
(defcustom elpher-buttonify-urls-in-directories nil
- "If non-nil, turns URLs matched in \"i\" item types in directories
-into clickable buttons."
+ "If non-nil, turns URLs matched in directories into clickable buttons."
:type '(boolean))
(defcustom elpher-cache-images nil
;; Node
-(defvar elpher-seen-nodes (make-hash-table :test 'equal)
- "Table mapping addresses to existing (seen) node objects.")
-
(defun elpher-make-node (parent address getter &optional content pos)
"Create a node in the gopher page hierarchy.
page.
The optional arguments CONTENT and POS can be used to fill the cached
-content and cursor position fields of the node.
-
-If the hash table `elpher-seen-nodes' contains a key equal to ADDRESS,
-the node contained as its value will be returned instead."
- (let ((existing-node (gethash address elpher-seen-nodes)))
- (if existing-node
- existing-node
- (let ((new-node (list parent address getter content pos)))
- (puthash address new-node elpher-seen-nodes)
- new-node))))
+content and cursor position fields of the node."
+ (list parent address getter content pos))
(defun elpher-node-parent (node)
"Retrieve the parent node of NODE."
(protocol (downcase (match-string 1))))
(if (string= protocol "gopher")
(let* ((host (match-string 2))
- (port 70)
+ (port (if (match-string 3)
+ (string-to-number (substring (match-string 3) 1))
+ 70))
(type-and-selector (match-string 4))
(type (if (> (length type-and-selector) 1)
(elt type-and-selector 1)