(defcustom elpher-open-urls-with-eww nil
"If non-nil, open URL selectors using eww.
-Otherwise, use the system browser via the BROWSE-URL function."
+Otherwise, use the system browser via the `browse-url' function."
:type '(boolean))
(defcustom elpher-use-header t
;;; Integrations
;;
+;;; Org
+
+;; Avoid byte compilation warnings.
+(eval-when-compile
+ (declare-function org-link-store-props "ol")
+ (declare-function org-link-set-parameters "ol"))
+
(defun elpher-org-export-link (link description format protocol)
"Export a LINK with DESCRIPTION for the given PROTOCOL and FORMAT.
url
(format "%s (%s)" desc url))))))
-;; Avoid byte compilation warnings.
-(declare-function org-link-store-props "ol")
(defun elpher-org-store-link ()
"Store link to an `elpher' page in Org."
(when (eq major-mode 'elpher-mode)
(defun elpher-org-follow-link (link protocol)
"Visit a LINK for the given PROTOCOL.
-PROTOCOL may be one of gemini, gopher or finger. This method also support old
-paramter elpher, where link is self-contained."
+PROTOCOL may be one of gemini, gopher or finger. This method also
+supports the old protocol elpher, where the link is self-contained."
(let ((url (if (equal protocol "elpher")
(string-remove-prefix "elpher:" link)
(format "%s:%s" protocol link))))
(elpher-go url)))
-;; Avoid byte compilation warnings.
-(declare-function org-link-set-parameters "ol")
(with-eval-after-load 'org
(org-link-set-parameters
"elpher"
(elpher-org-export-link link description format "finger"))
:follow (lambda (link _arg) (elpher-org-follow-link link "finger"))))
+;;; Browse URL
+
+;; Avoid byte compilation warnings.
+(eval-when-compile
+ (defvar thing-at-point-uri-schemes))
+
;;;###autoload
(defun elpher-browse-url-elpher (url &rest _args)
"Browse URL using Elpher. This function is used by `browse-url'."
(elpher-go url))
;; Use elpher to open gopher, finger and gemini links
-(with-eval-after-load 'browse-url
- ;; 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
- (defvar thing-at-point-uri-schemes)
- (defvar mu4e~view-beginning-of-url-regexp))
+;; 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-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)))))
;; Register "gemini://" as a URI scheme so `browse-url' does the right thing
(with-eval-after-load 'thingatpt
(add-to-list 'thing-at-point-uri-schemes "gemini://"))
+;;; Mu4e:
+
+(eval-when-compile
+ (defvar mu4e~view-beginning-of-url-regexp))
+
(with-eval-after-load 'mu4e-view
;; Make mu4e aware of the gemini world
(setq mu4e~view-beginning-of-url-regexp