X-Git-Url: https://thelambdalab.xyz/gitweb/index.cgi?p=elpher.git;a=blobdiff_plain;f=elpher.el;h=fb71b3d52066755c371d184b1343a96082ff25bf;hp=ef20de034e71f891beccc6fea904db443244f512;hb=5b4ad44db249c7bce8f2c18a16043ee3ddc77f55;hpb=3d2817e533e03d2d0eb9e0dd5d573083127bc055 diff --git a/elpher.el b/elpher.el index ef20de0..fb71b3d 100644 --- a/elpher.el +++ b/elpher.el @@ -110,6 +110,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.") @@ -215,6 +216,12 @@ some servers which do not support IPv6 can take a long time to time-out." 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 @@ -1665,12 +1672,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")) + (let ((help-string "RET,mouse-1: Open bookmark list")) (insert-text-button "Emacs 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") @@ -1762,7 +1769,7 @@ This is rendered using `elpher-get-visited-pages-page' via `elpher-type-map'." (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.") + "Select an entry or press 'u' to return to the previous page.") (elpher-restore-pos)))) @@ -1849,10 +1856,40 @@ To bookmark the link at point use \\[elpher-bookmark-link]." (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")) + (let* ((names (seq-filter (lambda (name) + (let ((record (bookmark-get-bookmark-record name))) + (eq (alist-get 'handler record) 'elpher-bookmark-jump))) + (bookmark-all-names)))) + (elpher-with-clean-buffer + (insert " ---- Elpher Bookmarks ---- \n\n") + (if names + (dolist (name (sort names #'string<)) + (when names + (let* ((url (alist-get 'location (bookmark-get-bookmark-record name))) + (address (elpher-address-from-url url))) + (elpher-insert-index-record name address)))) + (insert "No bookmarked pages found.\n")) + (insert "\n --------------------------\n\n" + "Select an entry or press 'u' to return to the previous page.\n\n") + (insert "To rename or delete bookmark entries, open your bookmark list\n" + "using 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 " via '\\[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) @@ -1863,7 +1900,11 @@ bookmark file and offer to import it." "\" 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 @@ -2205,7 +2246,7 @@ When run interactively HOST-OR-URL is read from the minibuffer." (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*) @@ -2237,7 +2278,7 @@ When run interactively HOST-OR-URL is read from the minibuffer." (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)