Backfill read-answer for Emacs 26.1
[elpher.git] / elpher.el
index c003248..c7be956 100644 (file)
--- a/elpher.el
+++ b/elpher.el
@@ -1271,6 +1271,11 @@ that the response was malformed."
          (error "Gemini server response unknown: %s %s"
                 response-code response-meta))))))
 
+(unless (fboundp 'read-answer)
+  (defun read-answer (question answers)
+    "Backfill for the new read-answer code."
+    (completing-read question (mapcar 'identity answers))))
+
 (defun elpher-choose-client-certificate ()
   "Prompt for a client certificate to use to establish a TLS connection."
   (let* ((read-answer-short t))
@@ -1487,7 +1492,7 @@ width defined by `elpher-gemini-max-fill-width'."
                      (propertize text-line 'face 'elpher-gemini-quoted))
                     (t text-line))
             text-line))
-         (adaptive-fill-mode nil))
+         (adaptive-fill-mode t))
     (insert (elpher-process-text-for-display processed-text-line))
     (newline)))
 
@@ -1857,9 +1862,21 @@ paramter elpher, where link is self-contained."
 
 ;; Use elpher to open gopher, finger and gemini links
 (with-eval-after-load 'browse-url
-  (add-to-list
-   'browse-url-default-handlers
-   '("^\\(gopher\\|finger\\|gemini\\)://" . elpher-browse-url-elpher)))
+  ;; For recent version of `browse-url' package
+  (if (boundp 'browse-url-default-handlers)
+      (add-to-list
+       'browse-url-default-handlers
+       '("^\\(gopher\\|finger\\|gemini\\)://" . elpher-browse-url-elpher))
+    ;; Patch browse-url-default-browser for older ones
+    (advice-add 'browse-url-default-browser :before-while
+                (lambda (url &rest _args)
+                  (let ((scheme (downcase (car (split-string url ":" t)))))
+                    (if (member scheme '("gemini" "gopher" "finger"))
+                        ;; `elpher-go' always returns nil, which will stop the
+                        ;; advice chain here in a before-while
+                        (elpher-go url)
+                      ;; chain must continue, then return t.
+                      t))))))
 
 ;; Avoid byte compilation warnings.
 (eval-when-compile