;; Copyright (C) 2021 Omar Polo <op@omarpolo.com>
;; Copyright (C) 2021 Noodles! <nnoodle@chiru.no>
;; Copyright (C) 2020-2021 Alex Schroeder <alex@gnu.org>
+;; Copyright (C) 2020 Zhiwei Chen <chenzhiwei03@kuaishou.com>
+;; Copyright (C) 2020 condy0919 <condy0919@gmail.com>
;; Copyright (C) 2020 Alexis <flexibeast@gmail.com>
;; Copyright (C) 2020 Étienne Deparis <etienne@depar.is>
;; Copyright (C) 2020 Simon Nicolussi <sinic@sinic.name>
;;; Internal variables
;;
-(defvar elpher--gemini-page-links '()
- "Internal variable containing list of links on page.")
+;; buffer-local
+(defvar elpher--gemini-page-headings nil
+ "List of headings on the page.")
+
+(defvar elpher--gemini-page-links nil
+ "List of links on the page.")
(defvar elpher--gemini-page-links-cache (make-hash-table :test 'equal)
- "Internal variable containing hash of addresses and page links.")
+ "Hash of addresses and page links.")
;;; Customization group
;;
:type '(file))
(defcustom elpher-default-url-type "gopher"
- "Default URL type to assume if not explicitly given."
+ "Default URL type (i.e. scheme) to assume if not explicitly given."
:type '(choice (const "gopher")
(const "gemini")))
(/ (* fill-column
(font-get (font-spec :name (face-font 'default)) :size))
(font-get (font-spec :name (face-font face)) :size)) fill-column)))
+ (setq elpher--gemini-page-headings (cons (cons header (point))
+ elpher--gemini-page-headings))
(unless (display-graphic-p)
(insert (make-string level ?#) " "))
(insert (propertize header 'face face))
(defun elpher-render-gemini-map (data _parameters)
"Render DATA as a gemini map file, PARAMETERS is currently unused."
(elpher-with-clean-buffer
+ (setq elpher--gemini-page-headings nil)
(let ((preformatted nil)
(link-counter 1))
(auto-fill-mode 1)
(elpher-gemini-insert-link line)))
((string-prefix-p "#" line) (elpher-gemini-insert-header line))
(t (elpher-gemini-insert-text line)))))
+ (setq elpher--gemini-page-headings (nreverse elpher--gemini-page-headings))
(elpher-cache-content
(elpher-page-address elpher-current-page)
(buffer-string))
"Alternatively, select a search engine and enter some search terms:\n")
(elpher-insert-index-record "Gopher Search Engine (Veronica-2)"
(elpher-make-gopher-address ?7 "/v2/vs" "gopher.floodgap.com" 70))
- (elpher-insert-index-record "Gemini Search Engine (GUS)"
- (elpher-address-from-url "gemini://gus.guru/search"))
+ (elpher-insert-index-record "Gemini Search Engine"
+ (elpher-address-from-url "gemini://geminispace.info"))
(insert "\n"
"This page contains your bookmarked sites (also visit with B):\n")
(elpher-insert-index-record "Your Bookmarks" 'bookmarks)
;; Use elpher to open gopher, finger and gemini links
(when (boundp 'browse-url-default-handlers)
(add-to-list 'browse-url-default-handlers
- '("^\\(gopher\\|finger\\|gemini\\)://" . browse-url-elpher)))
+ '("^\\(gopher\\|finger\\|gemini\\)://" . browse-url-elpher))))
+
+(with-eval-after-load "thingatpt"
;; Register "gemini://" as a URI scheme so `browse-url' does the right thing
(add-to-list 'thing-at-point-uri-schemes "gemini://"))
(kbd "C-") 'elpher-follow-current-link
(kbd "C-t") 'elpher-back
(kbd "u") 'elpher-back
+ (kbd "-") 'elpher-back
+ (kbd "^") 'elpher-back
(kbd "U") 'elpher-back-to-start
[mouse-3] 'elpher-back
- (kbd "g") 'elpher-go
- (kbd "o") 'elpher-go-current
+ (kbd "o") 'elpher-go
+ (kbd "O") 'elpher-go-current
(kbd "r") 'elpher-redraw
(kbd "R") 'elpher-reload
(kbd "T") 'elpher-toggle-tls
(kbd ".") 'elpher-view-raw
(kbd "d") 'elpher-download
(kbd "D") 'elpher-download-current
- (kbd "m") 'elpher-jump
+ (kbd "J") 'elpher-jump
(kbd "i") 'elpher-info-link
(kbd "I") 'elpher-info-current
(kbd "c") 'elpher-copy-link-url
This mode is automatically enabled by the interactive
functions which initialize the gopher client, namely
`elpher', `elpher-go' and `elpher-bookmarks'."
+ (setq-local elpher--gemini-page-headings nil)
(setq-local elpher-current-page nil)
(setq-local elpher-history nil)
- (setq-local elpher-buffer-name (buffer-name)))
+ (setq-local elpher-buffer-name (buffer-name))
+
+ (setq-local imenu-create-index-function
+ (lambda ()
+ elpher--gemini-page-headings)))
(when (fboundp 'evil-set-initial-state)
(evil-set-initial-state 'elpher-mode 'motion))