Start page now has direct link to bookmarks page.
[elpher.git] / elpher.el
index cf2d99e..eaa1123 100644 (file)
--- a/elpher.el
+++ b/elpher.el
@@ -4,7 +4,7 @@
 
 ;; Author: Tim Vaughan <tgvaughan@gmail.com>
 ;; Created: 11 April 2019
-;; Version: 2.3.4
+;; Version: 2.3.5
 ;; Keywords: comm gopher
 ;; Homepage: https://github.com/tgvaughan/elpher
 ;; Package-Requires: ((emacs "26"))
@@ -65,7 +65,7 @@
 ;;; Global constants
 ;;
 
-(defconst elpher-version "2.3.4"
+(defconst elpher-version "2.3.5"
   "Current version of elpher.")
 
 (defconst elpher-margin-width 6
@@ -88,7 +88,7 @@
     (gemini elpher-get-gemini-node elpher-render-gemini "gem" elpher-gemini)
     (telnet elpher-get-telnet-node nil "tel" elpher-telnet)
     (other-url elpher-get-other-url-node nil "url" elpher-other-url)
-    ((special bookmarks) elpher-get-bookmarks-node nil)
+    ((special bookmarks) elpher-get-bookmarks-node nil "/" elpher-index)
     ((special start) elpher-get-start-node nil))
   "Association list from types to getters, renderers, margin codes and index faces.")
 
@@ -426,11 +426,13 @@ unless PRESERVE-PARENT is non-nil."
   (if elpher-use-header
       (let* ((display-string (elpher-node-display-string elpher-current-node))
              (address (elpher-node-address elpher-current-node))
-             (url-string (if (elpher-address-special-p address)
-                             ""
-                           (concat "  -  " (elpher-address-to-url address) "")))
-             (header (replace-regexp-in-string "%" "%%" (concat display-string
-                                                                url-string))))
+             (tls-string (if (and (not (elpher-address-special-p address))
+                                  (member (elpher-address-protocol address)
+                                          '("gophers" "gemini")))
+                             " [TLS encryption]"
+                           ""))
+             (header (concat display-string
+                             (propertize tls-string 'face 'bold))))
         (setq header-line-format header))))
 
 (defmacro elpher-with-clean-buffer (&rest args)
@@ -518,8 +520,9 @@ up to the calling function."
                               (setq elpher-selector-string
                                     (concat elpher-selector-string string))))
         (set-process-sentinel proc after)
-        (process-send-string proc
-                             (concat (elpher-gopher-address-selector address) "\n")))
+        (let ((inhibit-eol-conversion t))
+          (process-send-string proc
+                               (concat (elpher-gopher-address-selector address) "\r\n"))))
     (error
      (if (and (consp the-error)
               (eq (car the-error) 'gnutls-error)
@@ -593,7 +596,9 @@ once they are retrieved from the gopher server."
 (defun elpher-node-button-help (node)
   "Return a string containing the help text for a button corresponding to NODE."
   (let ((address (elpher-node-address node)))
-    (format "mouse-1, RET: open '%s'" (elpher-address-to-url address))))
+    (format "mouse-1, RET: open '%s'" (if (elpher-address-special-p address)
+                                          address
+                                        (elpher-address-to-url address)))))
 
 (defun elpher-insert-index-record (display-string &optional address)
   "Function to insert an index record into the current buffer.
@@ -653,7 +658,7 @@ If ADDRESS is not supplied or nil the record is rendered as an
     (insert string)
     (goto-char (point-min))
     (while (re-search-forward elpher-url-regex nil t)
-      (let ((node (elpher-make-node (match-string 0)
+      (let ((node (elpher-make-node (substring-no-properties (match-string 0))
                                     (elpher-address-from-url (match-string 0)))))
           (make-text-button (match-beginning 0)
                             (match-end 0)
@@ -775,9 +780,10 @@ The response is rendered using the rendering function RENDERER."
 The response is stored in the variable ‘elpher-gemini-response’."
   (setq elpher-gemini-response "")
   (if (not (gnutls-available-p))
-      (error "Cannot retrieve TLS selector: GnuTLS not available")
+      (error "Cannot establish gemini connection: GnuTLS not available")
     (condition-case the-error
         (let* ((kill-buffer-query-functions nil)
+               (network-security-level 'medium)
                (proc (open-network-stream "elpher-process"
                                           nil
                                           (elpher-address-host address)
@@ -789,8 +795,9 @@ The response is stored in the variable ‘elpher-gemini-response’."
                                 (setq elpher-gemini-response
                                       (concat elpher-gemini-response string))))
           (set-process-sentinel proc after)
-          (process-send-string proc
-                               (concat (elpher-address-to-url address) "\r\n")))
+          (let ((inhibit-eol-conversion t))
+            (process-send-string proc
+                                 (concat (elpher-address-to-url address) "\r\n"))))
       (error
        (error "Error initiating connection to server")))))
 
@@ -1047,6 +1054,9 @@ For instance, the filename /a/b/../c/./d will reduce to /a/c/d"
            "Alternatively, select the following item and enter some search terms:\n")
    (elpher-insert-index-record "Veronica-2 Gopher Search Engine"
                                (elpher-make-gopher-address ?7 "/v2/vs" "gopher.floodgap.com" 70))
+   (insert "\n"
+           "This page contains your bookmarked sites (also visit with B):\n")
+   (elpher-insert-index-record "Your Bookmarks" 'bookmarks)
    (insert "\n"
            "** Refer to the ")
    (let ((help-string "RET,mouse-1: Open Elpher info manual (if available)"))
@@ -1210,7 +1220,7 @@ If ADDRESS is already bookmarked, update the label only."
     (message "No current site.")))
 
 (defun elpher-toggle-tls ()
-  "Toggle TLS encryption mode."
+  "Toggle TLS encryption mode for gopher."
   (interactive)
   (setq elpher-use-tls (not elpher-use-tls))
   (if elpher-use-tls