GNU/Emacs and Gemini
Gemini and Org mode
Improve some default settings and keybinding of this Gemini browser.
(with-eval-after-load 'elpher
;; Remove trailing whitespace warnings
(add-hook 'elpher-mode-hook
#'(lambda () (setq-local show-trailing-whitespace nil)))
;; (elpher-address-to-url (elpher-page-address elpher-current-page))
(define-key elpher-mode-map (kbd "b") #'elpher-bookmark-current)
(define-key elpher-mode-map (kbd "f") #'elpher-jump)
(define-key elpher-mode-map (kbd "G") #'elpher-go-current)
(define-key elpher-mode-map (kbd "k") #'(lambda () (interactive)(quit-window t)))
(define-key elpher-mode-map (kbd "p") #'elpher-root-dir)
(define-key elpher-mode-map (kbd "v") #'elpher-info-link)
(define-key elpher-mode-map (kbd "<delete>") #'elpher-back)
(define-key elpher-mode-map (kbd "DEL") #'elpher-back))
Associate gemini, gopher and finger org links with elpher.
;; ‘thing-at-point’ is a lib used by mu4e for exemple
(with-eval-after-load 'thingatpt
;; This list already support gopher scheme
(add-to-list 'thing-at-point-uri-schemes "gemini://"))
;; Make mu4e aware of the gemini world
(with-eval-after-load 'mu4e-view
(setq mu4e~view-beginning-of-url-regexp
"\\(?:https?\\|gemini\\|gopher\\)://\\|mailto:"))
;; Finally make gemini, gopher, etc. open with Elpher
(setq browse-url-browser-function
#'(lambda (url &rest args)
(let ((scheme (downcase (car (split-string url ":" t)))))
(if (member scheme '("gemini" "gopher"))
(elpher-go url)
(browse-url-default-browser url args)))))
(defun elpher-org-export-link (link description format protocol)
"Export a LINK with DESCRIPTION for the given PROTOCOL and FORMAT.
FORMAT is an org export backend. DESCRIPTION may be nil. PROTOCOL may be one
of gemini, gopher or finger."
(let* ((url (format "%s:%s" protocol link))
(desc (or description url)))
(pcase format
(`gemini (format "=> %s %s" url desc))
(`html (format "<a href=\"%s\">%s</a>" url desc))
(`latex (format "\\href{%s}{%s}" url desc))
(_ (if (not description)
url
(format "%s (%s)" desc url))))))
(defun elpher-org-follow-link (link protocol)
"Visit a LINK for the given PROTOCOL.
PROTOCOL may be one of gemini, gopher or finger."
(elpher-go (format "%s:%s" protocol link)))
(with-eval-after-load 'org
(org-link-set-parameters
"gemini"
:export #'(lambda (link description format _plist)
(elpher-org-export-link link description format "gemini"))
:follow #'(lambda (link _arg) (elpher-org-follow-link link "gemini")))
(org-link-set-parameters
"gopher"
:export #'(lambda (link description format _plist)
(elpher-org-export-link link description format "gopher"))
:follow #'(lambda (link _arg) (elpher-org-follow-link link "gopher")))
(org-link-set-parameters
"finger"
:export #'(lambda (link description format _plist)
(elpher-org-export-link link description format "finger"))
:follow #'(lambda (link _arg) (elpher-org-follow-link link "finger"))))
Gemini mode
I maintain a little fork of gemini-mode to improve preformatted or quote blocks, and make links active (open either in elpher or edit targetted file).
My fork of gemini-mode.el (HTTPS)
--
📅
📝 Étienne Pflieger with GNU/Emacs 29.4 (Org mode 9.7.11)
🏡 Back to home
🚀 Propelled by fronde