X-Git-Url: https://thelambdalab.xyz/gitweb/index.cgi?p=elpher.git;a=blobdiff_plain;f=elpher.el;h=2e3c5ec7468531356c74c75be812c69abdfbb49f;hp=d68a71874863a5a74f103b6641c44530d7fa2ad1;hb=7b52709ddf798fe53db3855eef52ca8862e7700d;hpb=9d28cdcbac0acb9ddcac68084fea7394e51c038a diff --git a/elpher.el b/elpher.el index d68a718..2e3c5ec 100644 --- a/elpher.el +++ b/elpher.el @@ -20,7 +20,7 @@ ;; Author: Tim Vaughan ;; Created: 11 April 2019 -;; Version: 3.2.1 +;; Version: 3.2.2 ;; Keywords: comm gopher ;; Homepage: https://thelambdalab.xyz/elpher ;; Package-Requires: ((emacs "27.1")) @@ -85,7 +85,7 @@ ;;; Global constants ;; -(defconst elpher-version "3.2.1" +(defconst elpher-version "3.2.2" "Current version of elpher.") (defconst elpher-margin-width 6 @@ -225,7 +225,7 @@ Otherwise, \\[elpher-show-bookmarks] will visit a special elpher bookmark page within which all of the standard elpher keybindings are active." :type '(boolean)) -(defcustom elpher-start-page "about:welcome" +(defcustom elpher-start-page-url "about:welcome" "Specify the page displayed initially by elpher. The default welcome screen is \"about:welcome\", while the bookmarks list is \"about:bookmarks\". You can also specify local files via \"file:\". @@ -482,9 +482,9 @@ If no address is defined, returns 0. (This is for compatibility with the URL li (list display-string address)) (defun elpher-make-start-page () - "Create the welcome page." + "Create the start page." (elpher-make-page "Start Page" - (elpher-address-from-url elpher-start-page))) + (elpher-address-from-url elpher-start-page-url))) (defun elpher-page-display-string (page) "Retrieve the display string corresponding to PAGE." @@ -498,6 +498,13 @@ If no address is defined, returns 0. (This is for compatibility with the URL li "Set the address corresponding to PAGE to NEW-ADDRESS." (setcar (cdr page) new-address)) +(defun elpher-page-from-url (url) + "Create a page with address and display string defined by URL. +The URL is unhexed prior to its use as a display string to improve +readability." + (elpher-make-page (elpher-decode (url-unhex-string url)) + (elpher-address-from-url url))) + (defvar elpher-current-page nil "The current page for this Elpher buffer.") @@ -575,7 +582,7 @@ previously-visited pages,unless NO-HISTORY is non-nil." (defun elpher-update-header () "If `elpher-use-header' is true, display current page info in window header." - (if elpher-use-header + (if (and elpher-use-header elpher-current-page) (let* ((display-string (elpher-page-display-string elpher-current-page)) (sanitized-display-string (replace-regexp-in-string "%" "%%" display-string)) (address (elpher-page-address elpher-current-page)) @@ -651,8 +658,7 @@ away CRs and any terminating period." (insert string) (goto-char (point-min)) (while (re-search-forward elpher-url-regex nil t) - (let ((page (elpher-make-page (substring-no-properties (match-string 0)) - (elpher-address-from-url (match-string 0))))) + (let ((page (elpher-page-from-url (substring-no-properties (match-string 0))))) (make-text-button (match-beginning 0) (match-end 0) 'elpher-page page @@ -1047,9 +1053,7 @@ displayed. The _WINDOW argument is currently unused." (when button (let* ((page (button-get button 'elpher-page)) (address (elpher-page-address page))) - (format "mouse-1, RET: open '%s'" (if (elpher-address-about-p address) - address - (elpher-address-to-url address)))))))) + (format "mouse-1, RET: open '%s'" (elpher-address-to-url address))))))) (defun elpher-insert-index-record (display-string &optional address) "Function to insert an index record into the current buffer. @@ -1715,11 +1719,12 @@ Assumes UTF-8 encoding for all text files." (let ((help-string "RET,mouse-1: Open bookmark list")) (insert-text-button "bookmark list" 'face 'link - 'action (lambda (_) - (interactive) - (call-interactively #'elpher-show-bookmarks)) + 'action #'elpher-click-link 'follow-link t - 'help-echo help-string)) + 'help-echo #'elpher--page-button-help + 'elpher-page + (elpher-make-page "Elpher Bookmarks" + (elpher-make-about-address 'bookmarks)))) (insert ".\n") (insert (propertize "(Bookmarks from legacy elpher-bookmarks files will be automatically imported.)\n" @@ -1858,8 +1863,7 @@ 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))) + (page (elpher-page-from-url cleaned-url))) (elpher-with-clean-buffer (elpher-visit-page page)) (set-buffer (get-buffer elpher-buffer-name)) @@ -2094,8 +2098,7 @@ When run interactively HOST-OR-URL is read from the minibuffer." (interactive "sGopher or Gemini URL: ") (let ((trimmed-host-or-url (string-trim host-or-url))) (unless (string-empty-p trimmed-host-or-url) - (let* ((address (elpher-address-from-url trimmed-host-or-url)) - (page (elpher-make-page trimmed-host-or-url address))) + (let ((page (elpher-page-from-url trimmed-host-or-url))) (switch-to-buffer elpher-buffer-name) (elpher-with-clean-buffer (elpher-visit-page page)) @@ -2109,7 +2112,7 @@ When run interactively HOST-OR-URL is read from the minibuffer." (unless (elpher-address-about-p address) (elpher-address-to-url address))))) (unless (string-empty-p (string-trim url)) - (elpher-visit-page (elpher-make-page url (elpher-address-from-url url)))))) + (elpher-visit-page (elpher-page-from-url url))))) (defun elpher-redraw () "Redraw current page."