X-Git-Url: https://thelambdalab.xyz/gitweb/index.cgi?a=blobdiff_plain;f=elpher.el;h=6049d0de10e43db69e108de74f5ff0713c1fd9ed;hb=f68258e6ac8b5ab733566e98b16a0a7447ac7a11;hp=a8f8eddc8090fa9be2dd9019464b321a2b78fed8;hpb=5ce47dc02e9a2591a7673d9c9fc3ed1e465f81fc;p=elpher.git diff --git a/elpher.el b/elpher.el index a8f8edd..6049d0d 100644 --- a/elpher.el +++ b/elpher.el @@ -4,7 +4,7 @@ ;; Author: Tim Vaughan ;; 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")) @@ -36,9 +36,8 @@ ;; - (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 @@ -164,8 +163,7 @@ Otherwise, use the system browser via the BROWSE-URL function." :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 @@ -427,7 +425,9 @@ The result is stored as a string in the variable ‘elpher-selector-string’." (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) @@ -624,16 +624,35 @@ The result is stored as a string in the variable ‘elpher-selector-string’." (defun elpher-go () "Go to a particular gopher site." (interactive) - (switch-to-buffer "*elpher*") - (let* ( - (hostname (read-string "Gopher host: ")) - (selector (read-string "Selector (default none): " nil nil "")) - (port (read-string "Port (default 70): " nil nil 70)) - (address (list selector hostname port))) - (elpher-visit-node - (elpher-make-node elpher-current-node - address - #'elpher-get-index-node)))) + (let ((node + (let ((host-or-url (read-string "Gopher host or URL: "))) + (if (string-match elpher-url-regex host-or-url) + (if (not (string= (downcase (match-string 1 host-or-url)) "gopher")) + (error "Only gopher URLs acceptable.") + (let* ((host (match-string 2 host-or-url)) + (port (if (match-string 3 host-or-url) + (string-to-number (substring (match-string 3 host-or-url) 1)) + 70)) + (type-and-selector (match-string 4 host-or-url)) + (type (if (> (length type-and-selector) 1) + (elt type-and-selector 1) + ?1)) + (selector (if (> (length type-and-selector) 1) + (substring type-and-selector 2) + "")) + (address (elpher-make-address selector host port)) + (getter (car (alist-get type elpher-type-map)))) + (elpher-make-node elpher-current-node + address + getter))) + (let* ((selector (read-string "Selector (default none): " nil nil "")) + (port (read-string "Port (default 70): " nil nil 70)) + (address (list selector host-or-url port))) + (elpher-make-node elpher-current-node + address + #'elpher-get-index-node)))))) + (switch-to-buffer "*elpher*") + (elpher-visit-node node))) (defun elpher-redraw () "Redraw current page."