X-Git-Url: https://thelambdalab.xyz/gitweb/index.cgi?p=elpher.git;a=blobdiff_plain;f=elpher.el;h=cca05b8502d1a3daf72a0ea0b0e1e9b86c2db5fd;hp=56c5996c16ebc26a805ad441e318ff3d9a68f75d;hb=755a375d1fe78be3c1ad35cd516ac38faaf0e0d6;hpb=e8c010a9f70321b2671c2cf6b4cba2db8320e319 diff --git a/elpher.el b/elpher.el index 56c5996..cca05b8 100644 --- a/elpher.el +++ b/elpher.el @@ -4,7 +4,7 @@ ;; Author: Tim Vaughan ;; Created: 11 April 2019 -;; Version: 2.7.9 +;; Version: 2.7.11 ;; Keywords: comm gopher ;; Homepage: http://thelambdalab.xyz/elpher ;; Package-Requires: ((emacs "26")) @@ -70,7 +70,7 @@ ;;; Global constants ;; -(defconst elpher-version "2.7.9" +(defconst elpher-version "2.7.11" "Current version of elpher.") (defconst elpher-margin-width 6 @@ -307,9 +307,9 @@ requiring gopher-over-TLS." (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 + (url-encode-url (url-recreate-url address)))) (defun elpher-address-type (address) "Retrieve type of ADDRESS object. @@ -707,7 +707,7 @@ displayed. The _WINDOW argument is currently unused." (address (elpher-page-address page))) (format "mouse-1, RET: open '%s'" (if (elpher-address-special-p address) address - (url-recreate-url address)))))))) + (elpher-address-to-url address)))))))) (defun elpher-insert-index-record (display-string &optional address) "Function to insert an index record into the current buffer. @@ -1116,17 +1116,18 @@ For instance, the filename /a/b/../c/./d will reduce to /a/c/d" (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-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")) @@ -1521,11 +1522,12 @@ If ADDRESS is already bookmarked, update the label only." "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."