;; Author: Tim Vaughan <plugd@thelambdalab.xyz>
;; Created: 11 April 2019
-;; Version: 2.7.9
+;; Version: 2.7.10
;; Keywords: comm gopher
;; Homepage: http://thelambdalab.xyz/elpher
;; Package-Requires: ((emacs "26"))
;;; Global constants
;;
-(defconst elpher-version "2.7.9"
+(defconst elpher-version "2.7.10"
"Current version of elpher.")
(defconst elpher-margin-width 6
(defun elpher-address-to-url (address)
"Get string representation of ADDRESS, or nil if ADDRESS is special."
- (if (not (elpher-address-special-p address))
- (url-encode-url (url-recreate-url address))
- nil))
+ (if (elpher-address-special-p address)
+ nil
+ (let* ((port (url-port address))
+ (address-to-convert
+ (if (= port 0)
+ address
+ (let ((address-copy (seq-copy address))
+ (protocol (url-type address)))
+ (if (or (and (equal protocol "gopher")
+ (= port 70))
+ (and (equal protocol "gemini")
+ (= port 1965))
+ (and (equal protocol "http")
+ (= port 80))
+ (and (equal protocol "finger")
+ (= port 79)))
+ (setf (url-port address-copy) 0))
+ address-copy))))
+ (url-encode-url (url-recreate-url address-to-convert)))))
(defun elpher-address-type (address)
"Retrieve type of ADDRESS object.
(defun elpher-address-from-gemini-url (url)
"Extract address from URL with defaults as per gemini map files."
- (let ((address (url-generic-parse-url url)))
+ (let ((address (url-generic-parse-url url))
+ (current-address (elpher-page-address elpher-current-page)))
(unless (and (url-type address) (not (url-fullness address))) ;avoid mangling mailto: urls
(setf (url-fullness address) t)
(if (url-host address) ;if there is an explicit host, filenames are absolute
(if (string-empty-p (url-filename address))
(setf (url-filename address) "/")) ;ensure empty filename is marked as absolute
- (setf (url-host address) (url-host (elpher-page-address elpher-current-page)))
- (setf (url-port address) (url-port (elpher-page-address elpher-current-page)))
+ (setf (url-host address) (url-host current-address))
+ (setf (url-port address) (url-port current-address))
(unless (string-prefix-p "/" (url-filename address)) ;deal with relative links
(setf (url-filename address)
- (concat (file-name-directory
- (url-filename (elpher-page-address elpher-current-page)))
+ (concat (file-name-directory (url-filename current-address))
(url-filename address)))))
(unless (url-type address)
(setf (url-type address) "gemini"))
"Go to a particular gopher site HOST-OR-URL.
When run interactively HOST-OR-URL is read from the minibuffer."
(interactive "sGopher or Gemini URL: ")
- (let ((page (elpher-make-page host-or-url
- (elpher-address-from-url host-or-url))))
+ (let* ((cleaned-host-or-url (string-trim host-or-url))
+ (address (elpher-address-from-url cleaned-host-or-url))
+ (page (elpher-make-page cleaned-host-or-url address)))
(switch-to-buffer "*elpher*")
(elpher-visit-page page)
- '()))
+ nil))
(defun elpher-go-current ()
"Go to a particular site read from the minibuffer, initialized with the current URL."