X-Git-Url: https://thelambdalab.xyz/gitweb/index.cgi?p=elpher.git;a=blobdiff_plain;f=elpher.el;h=a107f075b713a10813eceda8758b6d215997f28c;hp=f2a8188d495178e4cd59248961bb01ddae267f5f;hb=3cddc8bdcb0a05ecd308c310bcd020f7288af4de;hpb=7c57225da0abd31b1c1da3814737410c49f2b868 diff --git a/elpher.el b/elpher.el index f2a8188..a107f07 100644 --- a/elpher.el +++ b/elpher.el @@ -4,7 +4,7 @@ ;; Author: Tim Vaughan ;; Created: 11 April 2019 -;; Version: 2.9.1 +;; Version: 2.10.3 ;; Keywords: comm gopher ;; Homepage: http://thelambdalab.xyz/elpher ;; Package-Requires: ((emacs "26.2")) @@ -71,7 +71,7 @@ ;;; Global constants ;; -(defconst elpher-version "2.9.1" +(defconst elpher-version "2.10.3" "Current version of elpher.") (defconst elpher-margin-width 6 @@ -209,7 +209,7 @@ some servers which do not support IPv6 can take a long time to time-out." "Face used for html type directory records.") (defface elpher-gemini - '((t :inherit font-lock-regexp-grouping-backslash)) + '((t :inherit font-lock-constant-face)) "Face used for Gemini type directory records.") (defface elpher-other-url @@ -269,8 +269,6 @@ some servers which do not support IPv6 can take a long time to time-out." (let ((url (url-generic-parse-url url-string))) (unless (and (not (url-fullness url)) (url-type url)) (setf (url-fullness url) t) - (setf (url-filename url) - (url-unhex-string (url-filename url))) (unless (url-type url) (setf (url-type url) "gopher")) (when (or (equal "gopher" (url-type url)) @@ -368,7 +366,7 @@ address refers to, via the table `elpher-type-map'." For gopher addresses this is a combination of the selector type and selector." (if (symbolp address) nil - (url-filename address))) + (url-unhex-string (url-filename address)))) (defun elpher-address-host (address) "Retrieve host from ADDRESS object." @@ -392,7 +390,7 @@ If no address is defined, returns 0. (This is for compatibility with the URL li (defun elpher-address-gopher-p (address) "Return non-nill if ADDRESS object is a gopher address." (and (not (elpher-address-special-p address)) - (member (elpher-address-protocol address) '("gopher gophers")))) + (member (elpher-address-protocol address) '("gopher" "gophers")))) (defun elpher-gopher-address-selector (address) "Retrieve gopher selector from ADDRESS object." @@ -516,6 +514,7 @@ unless NO-HISTORY is non-nil." (defmacro elpher-with-clean-buffer (&rest args) "Evaluate ARGS with a clean *elpher* buffer as current." + (declare (debug (body))) (list 'with-current-buffer "*elpher*" '(elpher-mode) (append (list 'let '((inhibit-read-only t)) @@ -763,8 +762,8 @@ longer needed for this session." (cert-file (concat temporary-file-directory file-base ".crt"))) (elpher-generate-certificate file-base key-file cert-file t))) -(defun elpher-generate-permanent-certificate (file-base common-name) - "Generate and return details of a persistant certificate. +(defun elpher-generate-persistent-certificate (file-base common-name) + "Generate and return details of a persistent certificate. The argument FILE-BASE is used as the base for the key and certificate files, while COMMON-NAME specifies the common name field of the certificate. @@ -803,7 +802,9 @@ base for the installed key and certificate files." (expand-file-name cert-file)))) (defun elpher-list-existing-certificates () - "Return a list of the persistant certificates in `elpher-certificate-directory'." + "Return a list of the persistent certificates in `elpher-certificate-directory'." + (unless (file-directory-p elpher-certificate-directory) + (make-directory elpher-certificate-directory)) (mapcar (lambda (file) (file-name-sans-extension file)) @@ -1190,13 +1191,13 @@ that the response was malformed." (pcase (read-answer "What do you want to do? " '(("throwaway" ?t "generate and use throw-away certificate") - ("persistant" ?p - "generate new or use existing persistant certificate") + ("persistent" ?p + "generate new or use existing persistent certificate") ("abort" ?a "stop immediately"))) ("throwaway" (setq elpher-client-certificate (elpher-generate-throwaway-certificate))) - ("persistant" + ("persistent" (let* ((existing-certificates (elpher-list-existing-certificates)) (file-base (completing-read "Nickname for new or existing certificate (autocompletes, empty response aborts): " @@ -1218,7 +1219,7 @@ that the response was malformed." file-base))) (message "New key and self-signed certificate written to %s" elpher-certificate-directory) - (elpher-generate-permanent-certificate file-base common-name))) + (elpher-generate-persistent-certificate file-base common-name))) ("install" (let* ((cert-file (read-file-name "Certificate file: " nil nil t)) (key-file (read-file-name "Key file: " nil nil t))) @@ -1363,17 +1364,22 @@ treatment that a separate function is warranted." The gemini map file line describing the header is given by HEADER-LINE." (when (string-match "^\\(#+\\)[ \t]*" header-line) - (let ((level (length (match-string 1 header-line))) - (header (substring header-line (match-end 0)))) + (let* ((level (length (match-string 1 header-line))) + (header (substring header-line (match-end 0))) + (face (pcase level + (1 'elpher-gemini-heading1) + (2 'elpher-gemini-heading2) + (3 'elpher-gemini-heading3) + (_ 'default))) + (fill-column (if (display-graphic-p) + (/ (* fill-column + (font-get (font-spec :name (face-font 'default)) :size)) + (font-get (font-spec :name (face-font face)) :size)) + fill-column))) (unless (display-graphic-p) (insert (make-string level ?#) " ")) - (insert (propertize header 'face - (pcase level - (1 'elpher-gemini-heading1) - (2 'elpher-gemini-heading2) - (3 'elpher-gemini-heading3) - (_ 'default))) - "\n")))) + (insert (propertize header 'face face)) + (newline)))) (defun elpher-gemini-insert-text (text-line) "Insert a plain non-preformatted TEXT-LINE into a text/gemini document. @@ -1524,8 +1530,8 @@ The result is rendered using RENDERER." "Alternatively, select a search engine and enter some search terms:\n") (elpher-insert-index-record "Gopher Search Engine (Veronica-2)" (elpher-make-gopher-address ?7 "/v2/vs" "gopher.floodgap.com" 70)) - (elpher-insert-index-record "Gemini Search Engine (GUS)" - (elpher-address-from-url "gemini://gus.guru/search")) + (elpher-insert-index-record "Gemini Search Engine (geminispace.info)" + (elpher-address-from-url "gemini://geminispace.info/search")) (insert "\n" "This page contains your bookmarked sites (also visit with B):\n") (elpher-insert-index-record "Your Bookmarks" 'bookmarks)