;; Author: Tim Vaughan <plugd@thelambdalab.xyz>
;; Created: 11 April 2019
-;; Version: 2.11.0
+;; Version: 3.0.0
;; Keywords: comm gopher
;; Homepage: https://thelambdalab.xyz/elpher
;; Package-Requires: ((emacs "27.1"))
;;; Global constants
;;
-(defconst elpher-version "2.11.0"
+(defconst elpher-version "3.0.0"
"Current version of elpher.")
(defconst elpher-margin-width 6
(defvar elpher--gemini-page-headings nil
"List of headings on the page.")
+
;;; Declarations to avoid compiler warnings.
;;
Otherwise, the SOCKS proxy is only used for connections to onion services."
:type '(boolean))
-(defcustom elpher-number-links nil
- "If non-nil, number links in pages when rendering.
-Links can be followed numerically by pressing `M' and entering by the link number."
- :type '(boolean))
-
;; Face customizations
(defgroup elpher-faces nil
unless NO-HISTORY is non-nil."
(elpher-save-pos)
(elpher-process-cleanup)
- (elpher-reset-link-number-counter)
(unless (or no-history
(equal (elpher-page-address elpher-current-page)
(elpher-page-address page)))
address
(elpher-address-to-url address))))))))
-(defvar elpher--link-number-counter 0
- "Used to number links on elpher pages.")
-(defun elpher-reset-link-number-counter ()
- "Reset the link number counter."
- (setq-local elpher--link-number-counter 0))
-
-(defun elpher--insert-text-button (label &rest properties)
- "Insert a potentially-numbered button into the current buffer.
-The text for the button is provided by LABEL, while the button
-properties in PROPERTIES are as per `insert-text-button'."
-
- (if elpher-number-links
- (setq-local elpher--link-number-counter (+ elpher--link-number-counter 1)))
- (let ((pref (if elpher-number-links
- (concat "[" (number-to-string elpher--link-number-counter) "] ")
- "")))
- (apply #'insert-text-button (cons (concat pref label) properties))))
-
(defun elpher-insert-index-record (display-string &optional address)
"Function to insert an index record into the current buffer.
The contents of the record are dictated by DISPLAY-STRING and ADDRESS.
(filtered-display-string (elpher-color-filter-apply display-string))
(page (elpher-make-page filtered-display-string address)))
(elpher-insert-margin margin-code)
- (elpher--insert-text-button filtered-display-string
- 'face face
- 'elpher-page page
- 'action #'elpher-click-link
- 'follow-link t
- 'help-echo #'elpher--page-button-help))
+ (insert-text-button filtered-display-string
+ 'face face
+ 'elpher-page page
+ 'action #'elpher-click-link
+ 'follow-link t
+ 'help-echo #'elpher--page-button-help))
(pcase type
('nil ;; Information
(elpher-insert-margin)
(let* ((face (elt type-map-entry 3))
(filtered-display-string (elpher-color-filter-apply display-string))
(page (elpher-make-page filtered-display-string address)))
- (elpher--insert-text-button filtered-display-string
- 'face face
- 'elpher-page page
- 'action #'elpher-click-link
- 'follow-link t
- 'help-echo #'elpher--page-button-help))
+ (insert-text-button filtered-display-string
+ 'face face
+ 'elpher-page page
+ 'action #'elpher-click-link
+ 'follow-link t
+ 'help-echo #'elpher--page-button-help))
(insert (propertize display-string 'face 'elpher-unknown)))
(insert "\n"))))
" - 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"
(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-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"
(insert "\n"
"** Refer to the ")
(let ((help-string "RET,mouse-1: Open Elpher info manual (if available)"))
- (elpher--insert-text-button "Elpher info manual"
- 'face 'link
- 'action (lambda (_)
- (interactive)
- (info "(elpher)"))
- 'follow-link t
- 'help-echo help-string))
+ (insert-text-button "Elpher info manual"
+ 'face 'link
+ 'action (lambda (_)
+ (interactive)
+ (info "(elpher)"))
+ 'follow-link t
+ 'help-echo help-string))
(insert " for the full documentation. **\n")
(insert (propertize
(concat " (This should be available if you have installed Elpher using\n"
(goto-char (button-start b))
(button-activate b)))))))
-(defun elpher-jump-to-number (n)
- "Jump to directory entry number N."
- (interactive "nDirectory item/link number: ")
- (let* ((link-map (reverse (elpher-build-link-map))))
- (if link-map
- (if (<= 1 n (length link-map))
- (let ((b (cdr (elt link-map (- n 1)))))
- (goto-char (button-start b))
- (button-activate b))
- (error "No link with that number")))))
-
(defun elpher-root-dir ()
"Visit root of current server."
(interactive)
(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)
(define-key map (kbd "d") 'elpher-download)
(define-key map (kbd "D") 'elpher-download-current)
(define-key map (kbd "m") 'elpher-jump)
- (define-key map (kbd "M") 'elpher-jump-to-number)
(define-key map (kbd "i") 'elpher-info-link)
(define-key map (kbd "I") 'elpher-info-current)
(define-key map (kbd "c") 'elpher-copy-link-url)
(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
(kbd "d") 'elpher-download
(kbd "D") 'elpher-download-current
(kbd "m") 'elpher-jump
- (kbd "M") 'elpher-jump-to-number
(kbd "i") 'elpher-info-link
(kbd "I") 'elpher-info-current
(kbd "c") 'elpher-copy-link-url