X-Git-Url: https://thelambdalab.xyz/gitweb/index.cgi?a=blobdiff_plain;f=elpher.el;h=ead20ada5777ca75392e3cbc67999d13f2fd5a9c;hb=c5326528d6d3997c23259bf85b900543f07516c8;hp=a55b659cdf001db507dd56b62fba4c0d989c39cc;hpb=dbfd5ef1fa1ba682229cc9bdd3778ad8963bdf60;p=elpher.git diff --git a/elpher.el b/elpher.el index a55b659..ead20ad 100644 --- a/elpher.el +++ b/elpher.el @@ -26,7 +26,25 @@ ;;; Commentary: -;; Elpher is a tool for exploring "gopherspace" using GNU Emacs. +;; Elpher aims to provide a full-featured gopher client for GNU Emacs. +;; It supports: + +;; - intuitive keyboard and mouse-driven browsing, +;; - caching of visited sites (both content and cursor position), +;; - pleasant and configurable colouring of Gopher directories, +;; - direct visualisation of image files, +;; - 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. + +;; To launch Elpher, simply use 'M-x elpher'. This will open a start +;; page containing information on key bindings and suggested starting +;; points for your gopher exploration. + +;; Faces, caching options and start page can be configured via +;; the Elpher customization group in Applications. ;;; Code: @@ -73,6 +91,18 @@ "\r\n") "Source for elpher start page.") +(defconst elpher-type-map + '((?0 elpher-get-text-node "T" elpher-text) + (?1 elpher-get-index-node "/" elpher-index) + (?g elpher-get-image-node "im" elpher-image) + (?p elpher-get-image-node "im" elpher-image) + (?I elpher-get-image-node "im" elpher-image) + (?4 elpher-get-node-download "B" elpher-binary) + (?5 elpher-get-node-download "B" elpher-binary) + (?9 elpher-get-node-download "B" elpher-binary) + (?7 elpher-get-search-node "?" elpher-search)) + "Association list from types to getters, margin codes and index faces.") + ;;; Customization group ;; @@ -81,6 +111,8 @@ "A gopher client." :group 'applications) +;; Face customizations + (defface elpher-index '((((background dark)) :foreground "deep sky blue") (((background light)) :foreground "blue")) @@ -125,6 +157,8 @@ '((t :foreground "blue")) "Face used for brackets around margin key.") +;; Other customizations + (defcustom elpher-open-urls-with-eww nil "If non-nil, open URL selectors using eww. Otherwise, use the system browser via the BROWSE-URL function." @@ -134,6 +168,13 @@ Otherwise, use the system browser via the BROWSE-URL function." "If non-nil, cache images in memory in the same way as other content." :type '(boolean)) +(defcustom elpher-start-address nil + "If nil, the default start directory is shown when Elpher is started. +Otherwise, a list containing the selector, host and port of a directory to +use as the start page." + :type '(list string string integer)) + + ;;; Model ;; @@ -265,18 +306,6 @@ content and cursor position fields of the node." (insert " ")) (insert (make-string elpher-margin-width ?\s)))) -(defvar elpher-type-map - '((?0 elpher-get-text-node "T" elpher-text) - (?1 elpher-get-index-node "/" elpher-index) - (?g elpher-get-image-node "im" elpher-image) - (?p elpher-get-image-node "im" elpher-image) - (?I elpher-get-image-node "im" elpher-image) - (?4 elpher-get-node-download "B" elpher-binary) - (?5 elpher-get-node-download "B" elpher-binary) - (?9 elpher-get-node-download "B" elpher-binary) - (?7 elpher-get-search-node "?" elpher-search)) - "Association list from types to getters, margin codes and index faces.") - (defun elpher-insert-index-record (line) "Insert the index record corresponding to LINE into the current buffer." (let* ((type (elt line 0)) @@ -629,8 +658,8 @@ The result is stored as a string in the variable ‘elpher-selector-string’." (if button (let ((node (button-get button 'elpher-node))) (if node - (elpher-visit-node (button-get button 'elpher-node - #'elpher-get-node-download)) + (elpher-visit-node (button-get button 'elpher-node) + #'elpher-get-node-download) (message "Can only download gopher links, not general URLs."))) (message "No link selected.")))) @@ -673,7 +702,9 @@ The result is stored as a string in the variable ‘elpher-selector-string’." "Start elpher with default landing page." (interactive) (setq elpher-current-node nil) - (let ((start-node (elpher-make-node nil nil #'elpher-get-index-node))) + (let ((start-node (elpher-make-node nil + elpher-start-address + #'elpher-get-index-node))) (elpher-visit-node start-node)) "Started Elpher.") ; Otherwise (elpher) evaluates to start page string.