X-Git-Url: https://thelambdalab.xyz/gitweb/index.cgi?a=blobdiff_plain;f=elpher.el;h=3d75f36c3c0ce349d5da5262c4eefd8966f296c0;hb=b4e8bb3e2c2574ff291078469f07fe4849e9535d;hp=9c0138b3868b5f8ab2971ac89ddf560c2bb2e038;hpb=2f3ba5d038eb1c65dbfb2a1cda3636aa80f6e448;p=elpher.git diff --git a/elpher.el b/elpher.el index 9c0138b..3d75f36 100644 --- a/elpher.el +++ b/elpher.el @@ -4,7 +4,7 @@ ;; Author: Tim Vaughan ;; Created: 11 April 2019 -;; Version: 2.2.0 +;; Version: 2.3.2 ;; Keywords: comm gopher ;; Homepage: https://github.com/tgvaughan/elpher ;; Package-Requires: ((emacs "26")) @@ -65,7 +65,7 @@ ;;; Global constants ;; -(defconst elpher-version "2.2.0" +(defconst elpher-version "2.3.2" "Current version of elpher.") (defconst elpher-margin-width 6 @@ -428,8 +428,10 @@ unless PRESERVE-PARENT is non-nil." (address (elpher-node-address elpher-current-node)) (url-string (if (elpher-address-special-p address) "" - (concat " - " (elpher-address-to-url address) "")))) - (setq header-line-format (list display-string url-string))))) + (concat " - " (elpher-address-to-url address) ""))) + (header (replace-regexp-in-string "%" "%%" (concat display-string + url-string)))) + (setq header-line-format header)))) (defmacro elpher-with-clean-buffer (&rest args) "Evaluate ARGS with a clean *elpher* buffer as current." @@ -642,7 +644,7 @@ If ADDRESS is not supplied or nil the record is rendered as an ;; Text rendering (defconst elpher-url-regex - "\\([a-zA-Z]+\\)://\\([a-zA-Z0-9.\-]+\\|\[[a-zA-Z0-9:]+\]\\)\\(?3::[0-9]+\\)?\\(?4:/[^<> \r\n\t(),]*\\)?" + "\\([a-zA-Z]+\\)://\\([a-zA-Z0-9.\-]*[a-zA-Z0-9\-]\\|\[[a-zA-Z0-9:]+\]\\)\\(:[0-9]+\\)?\\(/\\([0-9a-zA-Z\-_~?/@|:.]*[0-9a-zA-Z\-_~?/@|]\\)?\\)?" "Regexp used to locate and buttniofy URLs in text files loaded by elpher.") (defun elpher-buttonify-urls (string) @@ -774,21 +776,23 @@ The response is stored in the variable ‘elpher-gemini-response’." (setq elpher-gemini-response "") (if (not (gnutls-available-p)) (error "Cannot retrieve TLS selector: GnuTLS not available") - (let* ((kill-buffer-query-functions nil) - (proc (open-network-stream "elpher-process" - nil - (elpher-address-host address) - (elpher-address-port address) - :type 'tls))) - (set-process-coding-system proc 'binary) - (set-process-filter proc - (lambda (_proc string) - (setq elpher-gemini-response - (concat elpher-gemini-response string)))) - (set-process-sentinel proc after) - (process-send-string proc - (concat (elpher-address-to-url address) "\r\n"))))) - + (condition-case the-error + (let* ((kill-buffer-query-functions nil) + (proc (open-network-stream "elpher-process" + nil + (elpher-address-host address) + (elpher-address-port address) + :type 'tls))) + (set-process-coding-system proc 'binary) + (set-process-filter proc + (lambda (_proc string) + (setq elpher-gemini-response + (concat elpher-gemini-response string)))) + (set-process-sentinel proc after) + (process-send-string proc + (concat (elpher-address-to-url address) "\r\n"))) + (error + (error "Error initiating connection to server"))))) (defun elpher-process-gemini-response (renderer) "Process the gemini response and pass the result to RENDERER. @@ -827,14 +831,16 @@ The response is assumed to be in the variable `elpher-gemini-response'." renderer) (elpher-restore-pos)))))) (?4 ; Temporary failure - (error "Gemini server reports TEMPORARY FAILURE for this request")) + (error "Gemini server reports TEMPORARY FAILURE for this request: %S" + response-header)) (?5 ; Permanent failure - (error "Gemini server reports PERMANENT FAILURE for this request")) + (error "Gemini server reports PERMANENT FAILURE for this request: %S" + response-header)) (?6 ; Client certificate required (error "Gemini server requires client certificate (unsupported at this time)")) (_other - (error "Gemini server responded with unknown response code %S" - response-code)))) + (error "Gemini server response unknown: %S" + response-header)))) (error (elpher-network-error (elpher-node-address elpher-current-node) the-error)))) @@ -991,7 +997,7 @@ The response is assumed to be in the variable `elpher-gemini-response'." " - TAB/Shift-TAB: next/prev item on current page\n" " - RET/mouse-1: open item under cursor\n" " - m: select an item on current page by name (autocompletes)\n" - " - u: return to previous page\n" + " - u/mouse-3: return to previous page\n" " - o/O: visit different selector or the root menu of the current server\n" " - g: go to a particular gopher address\n" " - d/D: download item under cursor or current page\n"