;; Author: Tim Vaughan <plugd@thelambdalab.xyz>
;; Created: 11 April 2019
-;; Version: 2.11.0
+;; Version: 3.0.0
;; Keywords: comm gopher
-;; Homepage: https://alexschroeder.ch/cgit/elpher
+;; Homepage: https://thelambdalab.xyz/elpher
;; Package-Requires: ((emacs "27.1"))
;; This file is not part of GNU Emacs.
;; Elpher is under active development. Any suggestions for
;; improvements are welcome, and can be made on the official
-;; project page, https://alexschroeder.ch/cgit/elpher.
+;; project page, gopher://thelambdalab.xyz/elpher, or via the
+;; project mailing list at https://lists.sr.ht/~michel-slm/elpher.
;;; Code:
;;; Global constants
;;
-(defconst elpher-version "2.11.0"
+(defconst elpher-version "3.0.0"
"Current version of elpher.")
(defconst elpher-margin-width 6
"List of headings on the page.")
+;;; Declarations to avoid compiler warnings.
+;;
+
+(eval-when-compile
+ (defvar bookmark-make-record-function)
+ (declare-function bookmark-store "bookmark")
+ (declare-function org-link-store-props "ol")
+ (declare-function org-link-set-parameters "ol")
+ (defvar thing-at-point-uri-schemes)
+ (defvar mu4e~view-beginning-of-url-regexp))
+
+
;;; Customization group
;;
" - RET/mouse-1: open item under cursor\n"
" - m/M: select an item on current page by name (autocompletes) or number\n"
" - u/mouse-3/U: return to previous page or to the start page\n"
- " - o/O: visit different selector or the root menu of the current server\n"
" - g: go to a particular address (gopher, gemini, finger)\n"
+ " - o/O: open a different address selector or the root menu of the current server\n"
" - d/D: download item under cursor or current page\n"
" - i/I: info on item under cursor or current page\n"
" - c/C: copy URL representation of item under cursor or current page\n"
(elpher-make-gopher-address ?7 "/v2/vs" "gopher.floodgap.com" 70))
(elpher-insert-index-record "Gemini Search Engine (geminispace.info)"
(elpher-address-from-url "gemini://geminispace.info/search"))
+ (insert "\n"
+ "Your bookmarks are stored in your ")
+ (let ((help-string "RET,mouse-1: Open Emacs bookmark list"))
+ (elpher--insert-text-button "Emacs bookmark list"
+ 'face 'link
+ 'action (lambda (_)
+ (interactive)
+ (call-interactively #'bookmark-bmenu-list))
+ 'follow-link t
+ 'help-echo help-string))
+ (insert ".\n")
+ (insert (propertize
+ "(Bookmarks from legacy elpher-bookmarks files will be automatically imported.)\n"
+ 'face 'shadow))
(insert "\n"
"For Elpher release news or to leave feedback, visit:\n")
(elpher-insert-index-record "The Elpher Project Page"
;;; 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.
(format "%s:%s" protocol link))))
(elpher-go url)))
-(with-eval-after-load 'org
+(defun elpher-org-mode-integration ()
+ "Set up `elpher' integration for `org-mode'."
(org-link-set-parameters
"elpher"
:store #'elpher-org-store-link
(elpher-org-export-link link description format "finger"))
:follow (lambda (link _arg) (elpher-org-follow-link link "finger"))))
-;;; Browse URL
+(add-hook 'org-mode-hook #'elpher-org-mode-integration)
-;; Avoid byte compilation warnings.
-(eval-when-compile
- (defvar thing-at-point-uri-schemes))
+;;; Browse URL
;;;###autoload
(defun elpher-browse-url-elpher (url &rest _args)
;;; 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
- "\\(?:https?\\|gopher\\|finger\\|gemini\\)://\\|mailto:"))
+;; Make mu4e aware of the gemini world
+(setq mu4e~view-beginning-of-url-regexp
+ "\\(?:https?\\|gopher\\|finger\\|gemini\\)://\\|mailto:")
;;; Interactive procedures
;;
(define-key map (kbd "^") 'elpher-back)
(define-key map [mouse-3] 'elpher-back)
(define-key map (kbd "U") 'elpher-back-to-start)
- (define-key map (kbd "O") 'elpher-root-dir)
(define-key map (kbd "g") 'elpher-go)
(define-key map (kbd "o") 'elpher-go-current)
+ (define-key map (kbd "O") 'elpher-root-dir)
(define-key map (kbd "s") 'elpher-history)
(define-key map (kbd "S") 'elpher-history-all)
(define-key map (kbd "r") 'elpher-redraw)
(kbd "^") 'elpher-back
[mouse-3] 'elpher-back
(kbd "U") 'elpher-back-to-start
- (kbd "o") 'elpher-go
- (kbd "O") 'elpher-go-current
+ (kbd "g") 'elpher-go
+ (kbd "o") 'elpher-go-current
+ (kbd "O") 'elpher-root-dir
(kbd "r") 'elpher-redraw
(kbd "R") 'elpher-reload
(kbd "T") 'elpher-toggle-tls
(setq-local elpher-history nil)
(setq-local elpher-buffer-name (buffer-name))
(setq-local bookmark-make-record-function #'elpher-bookmark-make-record)
- (setq-local imenu-create-index-function #'elpher--gemini-page-headings))
+ (setq-local imenu-create-index-function (lambda () elpher--gemini-page-headings)))
(when (fboundp 'evil-set-initial-state)
(evil-set-initial-state 'elpher-mode 'motion))