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"))))
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)