;; Author: Tim Vaughan <plugd@thelambdalab.xyz>
;; Created: 11 April 2019
-;; Version: 3.3.0
+;; Version: 3.3.2
;; Keywords: comm gopher
;; Homepage: https://thelambdalab.xyz/elpher
;; Package-Requires: ((emacs "27.1"))
;;; Global constants
;;
-(defconst elpher-version "3.3.0"
+(defconst elpher-version "3.3.2"
"Current version of elpher.")
(defconst elpher-margin-width 6
(defun elpher-address-host (address)
"Retrieve host from ADDRESS object."
- (url-host address))
+ (let ((host-pre (url-host address)))
+ ;; The following strips out square brackets which sometimes enclose IPv6
+ ;; addresses. Doing this here rather than at the parsing stage may seem
+ ;; weird, but this lets us way we avoid having to muck with both URL parsing
+ ;; and reconstruction. It's also more efficient, as this method is not
+ ;; called during page rendering.
+ (if (and (> (length host-pre) 2)
+ (eq (elt host-pre 0) ?\[)
+ (eq (elt host-pre (- (length host-pre) 1)) ?\]))
+ (substring host-pre 1 (- (length host-pre) 1))
+ host-pre)))
(defun elpher-address-user (address)
"Retrieve user from ADDRESS object."
;; avoid resetting buffer-local variables
(elpher-mode))
(let ((inhibit-read-only t)
- (ansi-color-context nil)) ;; clean ansi interpreter state
+ (ansi-color-context nil)) ;; clean ansi interpreter state (also next 2 lines)
+ (setq-local xterm-color--current-fg nil)
+ (setq-local xterm-color--current-bg nil)
(setq-local network-security-level
(default-value 'network-security-level))
(erase-buffer)
(type (if address (elpher-address-type address) nil))
(type-map-entry (cdr (assoc type elpher-type-map)))
(fill-prefix (make-string (+ 1 (length elpher-gemini-link-string)) ?\s)))
- (insert elpher-gemini-link-string)
- (if type-map-entry
- (let* ((face (elt type-map-entry 3))
- (display-string (or given-display-string
- (elpher-address-to-iri address)))
- (page (elpher-make-page display-string
- address)))
- (insert-text-button display-string
- 'face face
- 'elpher-page page
- 'action #'elpher-click-link
- 'follow-link t
- 'help-echo #'elpher--page-button-help))
- (insert (propertize display-string 'face 'elpher-unknown)))
- (newline)))))
+ (when type-map-entry
+ (insert elpher-gemini-link-string)
+ (let* ((face (elt type-map-entry 3))
+ (display-string (or given-display-string
+ (elpher-address-to-iri address)))
+ (page (elpher-make-page display-string
+ address)))
+ (insert-text-button display-string
+ 'face face
+ 'elpher-page page
+ 'action #'elpher-click-link
+ 'follow-link t
+ 'help-echo #'elpher--page-button-help))
+ (newline))))))
(defun elpher-gemini-insert-header (header-line)
"Insert header described by HEADER-LINE into a text/gemini document.
(buffer-string))))
(defun elpher-build-current-imenu-index ()
+ "Build imenu index for current elpher buffer."
(save-excursion
(goto-char (point-min))
(let ((match nil)