From: plugd Date: Thu, 29 Jul 2021 10:08:05 +0000 (+0200) Subject: Merge. X-Git-Tag: v3.2.0~13 X-Git-Url: https://thelambdalab.xyz/gitweb/index.cgi?p=elpher.git;a=commitdiff_plain;h=3035057fb699a56b7ea89108d26d046213ee5cd0;hp=-c Merge. --- 3035057fb699a56b7ea89108d26d046213ee5cd0 diff --combined elpher.el index 50d4e87,cfa13b9..f47dfa0 --- a/elpher.el +++ b/elpher.el @@@ -19,7 -19,7 +19,7 @@@ ;; Author: Tim Vaughan ;; Created: 11 April 2019 -;; Version: 3.0.0 +;; Version: 3.1.0 ;; Keywords: comm gopher ;; Homepage: https://thelambdalab.xyz/elpher ;; Package-Requires: ((emacs "27.1")) @@@ -73,18 -73,19 +73,18 @@@ ;; (require 'seq) -(require 'pp) (require 'shr) (require 'url-util) (require 'subr-x) -(require 'dns) (require 'nsm) (require 'gnutls) (require 'socks) +(require 'bookmark) ;;; Global constants ;; -(defconst elpher-version "3.0.0" +(defconst elpher-version "3.1.0" "Current version of elpher.") (defconst elpher-margin-width 6 @@@ -109,7 -110,6 +109,7 @@@ (telnet elpher-get-telnet-page nil "tel" elpher-telnet) (other-url elpher-get-other-url-page nil "url" elpher-other-url) ((special start) elpher-get-start-page nil "E" elpher-index) + ((special bookmarks) elpher-get-bookmarks-page nil "E" elpher-index) ((special history) elpher-get-history-page nil "E" elpher-index) ((special visited-pages) elpher-get-visited-pages-page nil "E" elpher-index)) "Association list from types to getters, renderers, margin codes and index faces.") @@@ -127,8 -127,7 +127,8 @@@ (defvar ansi-color-context) (defvar bookmark-make-record-function) (defvar mu4e~view-beginning-of-url-regexp) - (defvar thing-at-point-uri-schemes)) + (defvar thing-at-point-uri-schemes) + (defvar xterm-color-preserve-properties)) ;;; Customization group @@@ -216,12 -215,6 +216,12 @@@ some servers which do not support IPv6 Otherwise, the SOCKS proxy is only used for connections to onion services." :type '(boolean)) +(defcustom elpher-use-emacs-bookmark-menu nil + "If non-nil, elpher will only use the native Emacs bookmark menu. +Otherwise, \\[elpher-show-bookmarks] will visit a special elpher bookmark +page within which all of the standard elpher keybindings are active." + :type '(boolean)) + ;; Face customizations (defgroup elpher-faces nil @@@ -587,7 -580,6 +587,7 @@@ previously-visited pages,unless NO-HIST (defmacro elpher-with-clean-buffer (&rest args) "Evaluate ARGS with a clean *elpher* buffer as current." + (declare (debug (body))) ;; Allow edebug to step through body `(with-current-buffer elpher-buffer-name (unless (eq major-mode 'elpher-mode) ;; avoid resetting buffer-local variables @@@ -722,7 -714,7 +722,7 @@@ ERROR can be either an error object or (cancel-timer elpher-network-timer))) (defun elpher-make-network-timer (thunk) - "Creates a timer to run the THUNK after `elpher-connection-timeout' seconds. + "Create a timer to run the THUNK after `elpher-connection-timeout' seconds. This is just a wraper around `run-at-time' which additionally sets the buffer-local variable `elpher-network-timer' to allow `elpher-process-cleanup' to also clear the timer." @@@ -1673,12 -1665,12 +1673,12 @@@ The result is rendered using RENDERER. (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")) - (insert-text-button "Emacs bookmark list" + (let ((help-string "RET,mouse-1: Open bookmark list")) + (insert-text-button "bookmark list" 'face 'link 'action (lambda (_) (interactive) - (call-interactively #'elpher-open-bookmarks)) + (call-interactively #'elpher-show-bookmarks)) 'follow-link t 'help-echo help-string)) (insert ".\n") @@@ -1713,8 -1705,8 +1713,8 @@@ 'help-echo help-string)) (insert "\n") (insert (propertize - (concat " (These documents should be available if you have installed Elpher \n" - " using MELPA. Otherwise you may have to install the manual yourself.)\n") + (concat "(These documents should be available if you have installed Elpher \n" + " using MELPA. Otherwise you may have to install the manual yourself.)\n") 'face 'shadow)) (elpher-restore-pos))) @@@ -1758,7 -1750,7 +1758,7 @@@ This is rendered using `elpher-get-visi (defun elpher-display-history-links (pages title) "Show all PAGES in an Elpher buffer with a given TITLE." - (let* ((title-line (concat "---- " title " ----")) + (let* ((title-line (concat " ---- " title " ----")) (footer-line (make-string (length title-line) ?-))) (elpher-with-clean-buffer (insert title-line "\n\n") @@@ -1769,8 -1761,8 +1769,8 @@@ (address (elpher-page-address page))) (elpher-insert-index-record display-string address)))) (insert "No history items found.\n")) - (insert "\n" footer-line "\n" - "Select and entry or press 'u' to return to the previous page.") + (insert "\n " footer-line "\n" + "Select an entry or press 'u' to return to the previous page.") (elpher-restore-pos)))) @@@ -1845,6 -1837,7 +1845,6 @@@ To bookmark the link at point use \\[el (read-file-name "Old Elpher bookmarks: " user-emacs-directory nil t "elpher-bookmarks")))) - (require 'bookmark) (dolist (bookmark (with-temp-buffer (insert-file-contents file) (read (current-buffer)))) @@@ -1856,38 -1849,10 +1856,38 @@@ (bookmark-store display-string (cdr record) t))) (bookmark-save)) -(defun elpher-open-bookmarks () +(defun elpher-get-bookmarks-page (renderer) + "Getter which displays the history page (RENDERER must be nil)." + (when renderer + (elpher-visit-previous-page) + (error "Command not supported for bookmarks page")) + (elpher-with-clean-buffer + (insert " ---- Elpher Bookmarks ---- \n\n") + (bookmark-maybe-load-default-file) + (dolist (bookmark (bookmark-maybe-sort-alist)) + (when (eq #'elpher-bookmark-jump (alist-get 'handler (cdr bookmark))) + (let* ((name (car bookmark)) + (url (alist-get 'location (cdr bookmark))) + (address (elpher-address-from-url url))) + (elpher-insert-index-record name address)))) + (when (<= (line-number-at-pos) 3) + (insert "No bookmarked pages found.\n")) + (insert "\n --------------------------\n\n" + "Select an entry or press 'u' to return to the previous page.\n\n" + "Bookmarks can be renamed or deleted via the ") + (insert-text-button "Emacs bookmark menu" + 'action (lambda (_) + (interactive) + (call-interactively #'bookmark-bmenu-list)) + 'follow-link t + 'help-echo "RET,mouse-1: open Emacs bookmark menu") + (insert (substitute-command-keys + ",\nwhich can also be opened from anywhere using '\\[bookmark-bmenu-list]'.")) + (elpher-restore-pos))) + +(defun elpher-show-bookmarks () "Display the current list of elpher bookmarks. -This is just a call to `bookmark-bmenu-list', but we also check for a legacy -bookmark file and offer to import it." +This will also check for a legacy bookmark file and offer to import it." (interactive) (let ((old-bookmarks-file (or (and (boundp 'elpher-bookmarks-file) elpher-bookmarks-file) @@@ -1898,11 -1863,7 +1898,11 @@@ "\" found. Import now?"))) (elpher-bookmark-import old-bookmarks-file) (rename-file old-bookmarks-file (concat old-bookmarks-file "-legacy")))) - (call-interactively #'bookmark-bmenu-list)) + (if elpher-use-emacs-bookmark-menu + (call-interactively #'bookmark-bmenu-list) + (elpher-visit-page + (elpher-make-page "Elpher Bookmarks" + (elpher-make-special-address 'bookmarks))))) ;;; Integrations @@@ -2017,6 -1978,12 +2017,12 @@@ supports the old protocol elpher, wher (setq mu4e~view-beginning-of-url-regexp "\\(?:https?\\|gopher\\|finger\\|gemini\\)://\\|mailto:") + ;;; eww: + + ;; Let elpher handle gemini, gopher links in eww buffer. + (setq eww-use-browse-url + "\\`mailto:\\|\\(\\`gemini\\|\\`gopher\\|\\`finger\\)://") + ;;; Interactive procedures ;; @@@ -2244,7 -2211,7 +2250,7 @@@ When run interactively HOST-OR-URL is r (define-key map (kbd "C") 'elpher-copy-current-url) (define-key map (kbd "a") 'elpher-bookmark-link) (define-key map (kbd "A") 'elpher-bookmark-current) - (define-key map (kbd "B") 'elpher-open-bookmarks) + (define-key map (kbd "B") 'elpher-show-bookmarks) (define-key map (kbd "!") 'elpher-set-gopher-coding-system) (define-key map (kbd "F") 'elpher-forget-current-certificate) (when (fboundp 'evil-define-key*) @@@ -2276,7 -2243,7 +2282,7 @@@ (kbd "C") 'elpher-copy-current-url (kbd "a") 'elpher-bookmark-link (kbd "A") 'elpher-bookmark-current - (kbd "B") 'elpher-open-bookmarks + (kbd "B") 'elpher-show-bookmarks (kbd "!") 'elpher-set-gopher-coding-system (kbd "F") 'elpher-forget-current-certificate)) map)