Merge branch 'master' into manual
authorTim Vaughan <tgvaughan@gmail.com>
Sun, 23 Jun 2019 08:19:15 +0000 (10:19 +0200)
committerTim Vaughan <tgvaughan@gmail.com>
Sun, 23 Jun 2019 08:19:15 +0000 (10:19 +0200)
1  2 
elpher.el

diff --combined elpher.el
+++ b/elpher.el
@@@ -4,7 -4,7 +4,7 @@@
  
  ;; Author: Tim Vaughan <tgvaughan@gmail.com>
  ;; Created: 11 April 2019
- ;; Version: 1.4.2
+ ;; Version: 1.4.3
  ;; Keywords: comm gopher
  ;; Homepage: https://github.com/tgvaughan/elpher
  ;; Package-Requires: ((emacs "25"))
  
  ;;; Commentary:
  
 -;; Elpher aims to provide a practical gopher client for GNU Emacs.
 -;; It supports:
 +;; Elpher aims to provide a practical and friendly gopher client
 +;; for GNU Emacs.  It supports:
  
 -;; - intuitive keyboard and mouse-driven interface,
 +;; - an intuitive keyboard and mouse-driven interface,
  ;; - caching of visited sites (both content and cursor position),
  ;; - pleasant and configurable colouring of Gopher directories,
  ;; - direct visualisation of image files,
@@@ -45,9 -45,6 +45,9 @@@
  ;; Faces, caching and other options can be configured via
  ;; the Elpher customization group in Applications.
  
 +;; Elpher is under active development, and any suggestions for
 +;; improvements are welcome!
 +
  ;;; Code:
  
  (provide 'elpher)
@@@ -58,7 -55,7 +58,7 @@@
  ;;; Global constants
  ;;
  
- (defconst elpher-version "1.4.2"
+ (defconst elpher-version "1.4.3"
    "Current version of elpher.")
  
  (defconst elpher-margin-width 6
@@@ -466,9 -463,14 +466,14 @@@ The contents of the record are dictate
  
  (defvar elpher-selector-string)
  
- (defun elpher-get-selector (address after)
+ (defun elpher-get-selector (address after &optional propagate-error)
    "Retrieve selector specified by ADDRESS, then execute AFTER.
- The result is stored as a string in the variable ‘elpher-selector-string’."
+ The result is stored as a string in the variable ‘elpher-selector-string’.
+ Usually errors result in an error page being displayed.  This is only
+ appropriate if the selector is to be directly viewed.  If PROPAGATE-ERROR
+ is non-nil, this message is not displayed.  Instead, the error propagates
+ up to the calling function."
    (setq elpher-selector-string "")
    (when (elpher-address-use-tls-p address)
        (if (gnutls-available-p)
                                         (elpher-address-host address)
                                         (elpher-address-port address)
                                         :type (if elpher-use-tls 'tls 'plain))))
+         (set-process-coding-system proc 'binary)
          (set-process-filter proc
                              (lambda (proc string)
                                (setq elpher-selector-string
             (setq elpher-use-tls nil)
             (elpher-get-selector address after))
         (elpher-process-cleanup)
-        (elpher-with-clean-buffer
-         (insert (propertize "\n---- ERROR -----\n\n" 'face 'error)
-                 "Failed to connect to " (elpher-get-address-url address) ".\n"
-                 (propertize "\n----------------\n\n" 'face 'error)
-                 "Press 'u' to return to the previous page."))))))
+        (if propagate-error
+            (error the-error)
+          (elpher-with-clean-buffer
+           (insert (propertize "\n---- ERROR -----\n\n" 'face 'error)
+                   "Failed to connect to " (elpher-get-address-url address) ".\n"
+                   (propertize "\n----------------\n\n" 'face 'error)
+                   "Press 'u' to return to the previous page.")))))))
  
  ;; Index retrieval
  
@@@ -707,13 -712,17 +715,17 @@@ calls, as is necessary if the match is 
                                         "gopher.file"))))
        (message "Downloading...")
        (setq elpher-download-filename filename)
-       (elpher-get-selector address
-                             (lambda (proc event)
-                               (let ((coding-system-for-write 'binary))
-                                 (with-temp-file elpher-download-filename
-                                   (insert elpher-selector-string)
-                                   (message (format "Download complate, saved to file %s."
-                                                    elpher-download-filename)))))))))
+       (condition-case the-error
+           (elpher-get-selector address
+                                (lambda (proc event)
+                                  (let ((coding-system-for-write 'binary))
+                                    (with-temp-file elpher-download-filename
+                                      (insert elpher-selector-string)
+                                      (message (format "Download complate, saved to file %s."
+                                                       elpher-download-filename)))))
+                                t)
+         (error
+          (error "Error downloading %s" elpher-download-filename))))))
  
  ;; URL retrieval
  
@@@ -1053,7 -1062,7 +1065,7 @@@ host, selector and port.
        (error "No link selected"))))
  
  (defun elpher-bookmarks ()
 -  "Visit bookmarks."
 +  "Visit bookmarks page."
    (interactive)
    (switch-to-buffer "*elpher*")
    (elpher-visit-node
    "Keymap for gopher client.")
  
  (define-derived-mode elpher-mode special-mode "elpher"
 -  "Major mode for elpher, an elisp gopher client.")
 +  "Major mode for elpher, an elisp gopher client.
 +
 +This mode is automatically enabled by the interactive
 +functions which initialize the gopher client, namely
 +`elpher', `elpher-go' and `elpher-bookmarks'.")
  
  (when (fboundp 'evil-set-initial-state)
    (evil-set-initial-state 'elpher-mode 'motion))