X-Git-Url: https://thelambdalab.xyz/gitweb/index.cgi?p=elpher.git;a=blobdiff_plain;f=elpher.el;h=0c4cd814d74540bf9810a6dd4476ec7d1a7a5201;hp=1d0b1fecf323ab7f491e547a22bf4f74f75dae23;hb=56973cf5d208fd12ae61b7f2036976beaf13a706;hpb=dd0904213175f960b53fdd42735596d9808b65cd diff --git a/elpher.el b/elpher.el index 1d0b1fe..0c4cd81 100644 --- a/elpher.el +++ b/elpher.el @@ -61,8 +61,8 @@ ;; Full instructions can be found in the Elpher info manual. ;; Elpher is under active development. Any suggestions for -;; improvements are welcome, and can be made on the official -;; project page, gopher://thelambdalab.xyz/elpher, or via the +;; improvements are welcome, and can be made on the official project +;; page, gopher://thelambdalab.xyz/1/projects/elpher, or via the ;; project mailing list at https://lists.sr.ht/~michel-slm/elpher. ;;; Code: @@ -129,6 +129,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.") @@ -138,12 +139,15 @@ ;; (eval-when-compile - (defvar bookmark-make-record-function) + (declare-function ansi-color-filter-apply "ansi-color") + (declare-function ansi-color-apply "ansi-color") (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)) + (defvar ansi-color-context) + (defvar bookmark-make-record-function) + (defvar mu4e~view-beginning-of-url-regexp) + (defvar thing-at-point-uri-schemes)) ;;; Customization group @@ -723,7 +727,7 @@ the host operating system and the local network capabilities.)" :hostname host :keylist (elpher-get-current-keylist address))) - (timer (elpher-get-network-timer + (timer (elpher-make-network-timer (lambda () (elpher-process-cleanup) (cond @@ -1671,26 +1675,35 @@ The result is rendered using RENDERER." "(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") + "The gopher home of the Elpher project is here:\n") (elpher-insert-index-record "The Elpher Project Page" (elpher-make-gopher-address ?1 "/projects/elpher/" "thelambdalab.xyz" 70)) - (insert "\n" - "** Refer to the ") (let ((help-string "RET,mouse-1: Open Elpher info manual (if available)")) - (insert-text-button "Elpher info manual" + (insert "\n" + "The following info documentation is available:\n" + " - ") + (insert-text-button "Elpher Manual" 'face 'link 'action (lambda (_) (interactive) (info "(elpher)")) 'follow-link t - 'help-echo help-string)) - (insert " for the full documentation. **\n") + 'help-echo help-string) + (insert "\n - ") + (insert-text-button "Changes introduced by the latest release" + 'face 'link + 'action (lambda (_) + (interactive) + (info "(elpher)News")) + 'follow-link t + 'help-echo help-string)) + (insert "\n") (insert (propertize - (concat " (This should be available if you have installed Elpher using\n" - " MELPA. Otherwise you will 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))) @@ -1746,7 +1759,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)))) @@ -1786,9 +1799,19 @@ record for the current elpher page." ;;;###autoload (defun elpher-bookmark-jump (bookmark) - "Go to a particular BOOKMARK." - (let* ((url (cdr (assq 'location bookmark)))) - (elpher-go url))) + "Handler used to open a bookmark using elpher. +The argument BOOKMARK is a bookmark record passed to the function. +This handler is responsible for loading the bookmark in some buffer, +then making that buffer the current buffer. It should not switch +to the buffer." + (let* ((url (cdr (assq 'location bookmark))) + (cleaned-url (string-trim url)) + (address (elpher-address-from-url cleaned-url)) + (page (elpher-make-page cleaned-url address))) + (elpher-with-clean-buffer + (elpher-visit-page page)) + (set-buffer (get-buffer elpher-buffer-name)) + nil)) (defun elpher-bookmark-link () "Bookmark the link at point. @@ -1839,6 +1862,36 @@ bookmark file and offer to import it." (rename-file old-bookmarks-file (concat old-bookmarks-file "-legacy")))) (call-interactively #'bookmark-bmenu-list)) +(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))) + ;; record + (eq (alist-get 'handler record) 'elpher-bookmark-jump) + )) + (bookmark-all-names)))) + (elpher-with-clean-buffer + (insert " ---- Elpher Bookmarks ---- \n\n") + (if names + (dolist (name names) + (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.") + (elpher-restore-pos)))) + +(defun elpher-show-bookmarks () + "Show elpher bookmarks." + (interactive) + (elpher-visit-page + (elpher-make-page "Elpher Bookmarks" + (elpher-make-special-address 'bookmarks)))) ;;; Integrations ;; @@ -2179,7 +2232,8 @@ 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 "B") 'elpher-open-bookmarks) (define-key map (kbd "!") 'elpher-set-gopher-coding-system) (define-key map (kbd "F") 'elpher-forget-current-certificate) (when (fboundp 'evil-define-key*) @@ -2211,7 +2265,8 @@ 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-open-bookmarks + (kbd "B") 'elpher-show-bookmarks (kbd "!") 'elpher-set-gopher-coding-system (kbd "F") 'elpher-forget-current-certificate)) map) @@ -2228,7 +2283,8 @@ functions which initialize the client, namely (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 (lambda () elpher--gemini-page-headings))) + (setq-local imenu-create-index-function (lambda () elpher--gemini-page-headings)) + (setq-local xterm-color-preserve-properties t)) (when (fboundp 'evil-set-initial-state) (evil-set-initial-state 'elpher-mode 'motion))