X-Git-Url: https://thelambdalab.xyz/gitweb/index.cgi?p=elpher.git;a=blobdiff_plain;f=elpher.el;h=f2397e997befc6a57a7b6689f9f7d86828eb3c7a;hp=dfd139bec31ee234f8ec67ec4c173f7e4e7529f0;hb=81e107a26924747c10c671882032d341ca6d77c4;hpb=03387286db913a90c9e7cd889b0152cb7de39f67 diff --git a/elpher.el b/elpher.el index dfd139b..f2397e9 100644 --- a/elpher.el +++ b/elpher.el @@ -6,6 +6,7 @@ ;; Copyright (C) 2021 Omar Polo ;; Copyright (C) 2021 Noodles! ;; Copyright (C) 2021 Abhiseck Paira +;; Copyright (C) 2021 Daniel Semyonov ;; Copyright (C) 2020-2021 Alex Schroeder ;; Copyright (C) 2020 Zhiwei Chen ;; Copyright (C) 2020 condy0919 @@ -1568,7 +1569,6 @@ This function uses Emacs' auto-fill to wrap text sensibly to a maximum width defined by `elpher-gemini-max-fill-width'." (string-match (rx (: line-start - (* (any " \t")) (optional (group (or (: "*" (+ (any " \t"))) (: ">" (* (any " \t")))))))) @@ -1586,10 +1586,7 @@ width defined by `elpher-gemini-max-fill-width'." (propertize text-line 'face 'elpher-gemini-quoted)) (t text-line)) text-line)) - (adaptive-fill-mode t) - ;; fill-prefix is important for adaptive-fill-mode: without - ;; it, multi-line list items are not indented correct - (fill-prefix (if (match-string 1 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)) @@ -1598,8 +1595,9 @@ width defined by `elpher-gemini-max-fill-width'." (defun elpher-render-gemini-map (data _parameters) "Render DATA as a gemini map file, PARAMETERS is currently unused." (elpher-with-clean-buffer - (let ((preformatted nil)) - (auto-fill-mode 1) + (auto-fill-mode 1) + (let ((preformatted nil) + (adaptive-fill-mode nil)) ;Prevent automatic setting of fill-prefix (setq-local fill-column (min (window-width) elpher-gemini-max-fill-width)) (dolist (line (split-string data "\n")) (cond @@ -2103,17 +2101,20 @@ supports the old protocol elpher, where the link is self-contained." '("^\\(gopher\\|finger\\|gemini\\)://" . elpher-browse-url-elpher)) ;; Patch `browse-url-browser-function' for older ones. The value of ;; that variable is `browse-url-default-browser' by default, so - ;; that's the function that gets advised. - (advice-add browse-url-browser-function :before-while - (lambda (url &rest _args) - "Handle gemini, gopher, and finger schemes using Elpher." - (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))))) + ;; that's the function that gets advised. If the value is an alist, + ;; however, we don't know what to do. Better not interfere? + (when (and (symbolp browse-url-browser-function) + (fboundp browse-url-browser-function)) + (advice-add browse-url-browser-function :before-while + (lambda (url &rest _args) + "Handle gemini, gopher, and finger schemes using Elpher." + (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)))))) ;; Register "gemini://" as a URI scheme so `browse-url' does the right thing (with-eval-after-load 'thingatpt @@ -2160,7 +2161,8 @@ When run interactively HOST-OR-URL is read from the minibuffer." (unless (string-empty-p trimmed-host-or-url) (let ((page (elpher-page-from-url trimmed-host-or-url (elpher-get-default-url-scheme)))) - (switch-to-buffer elpher-buffer-name) + (unless (get-buffer-window elpher-buffer-name t) + (switch-to-buffer elpher-buffer-name)) (elpher-with-clean-buffer (elpher-visit-page page)) nil)))) ; non-nil value is displayed by eshell @@ -2280,8 +2282,12 @@ When run interactively HOST-OR-URL is read from the minibuffer." (defun elpher-info-page (page) "Display URL of PAGE in minibuffer." - (let ((address (elpher-page-address page))) - (message "%s" (elpher-address-to-url address)))) + (let* ((address (elpher-page-address page)) + (url (elpher-address-to-url address)) + (iri (elpher-address-to-iri address))) + (if (equal url iri) + (message "%s" url) + (message "%s (Raw: %s)" iri url)))) (defun elpher-info-link () "Display information on page corresponding to link at point."