Prevents indenting gemini lines prefixed only with spaces.
[elpher.git] / elpher.el
index 3145d69..694d8af 100644 (file)
--- a/elpher.el
+++ b/elpher.el
@@ -5,7 +5,7 @@
 
 ;; 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"))
@@ -70,7 +70,7 @@
 ;;; Global constants
 ;;
 
-(defconst elpher-version "3.3.0"
+(defconst elpher-version "3.3.2"
   "Current version of elpher.")
 
 (defconst elpher-margin-width 6
   (declare-function org-link-store-props "ol")
   (declare-function org-link-set-parameters "ol")
   (defvar ansi-color-context)
+  (defvar xterm-color--current-fg)
+  (defvar xterm-color--current-bg)
   (defvar bookmark-make-record-function)
   (defvar mu4e~view-beginning-of-url-regexp)
   (defvar eww-use-browse-url)
@@ -423,7 +425,17 @@ For gopher addresses this is a combination of the selector type and selector."
 
 (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."
@@ -628,7 +640,9 @@ previously-visited pages,unless NO-HISTORY is non-nil."
        ;; 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)
@@ -1506,21 +1520,20 @@ treatment that a separate function is warranted."
              (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.
@@ -1571,7 +1584,7 @@ width defined by `elpher-gemini-max-fill-width'."
             text-line))
          (fill-prefix (if line-prefix
                           (make-string (length (match-string 0 text-line)) ?\s)
-                        nil)))
+                        "")))
     (insert (elpher-process-text-for-display processed-text-line))
     (newline)))
 
@@ -1605,6 +1618,7 @@ width defined by `elpher-gemini-max-fill-width'."
     (buffer-string))))
 
 (defun elpher-build-current-imenu-index ()
+  "Build imenu index for current elpher buffer."
   (save-excursion
     (goto-char (point-min))
     (let ((match nil)