The Lambda Lab
/
projects
/
elpher.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Report error on unsupported selector type.
[elpher.git]
/
elpher.el
diff --git
a/elpher.el
b/elpher.el
index
deb7fe8
..
ea95aee
100644
(file)
--- a/
elpher.el
+++ b/
elpher.el
@@
-7,7
+7,7
@@
;; Version: 1.4.6
;; Keywords: comm gopher
;; Homepage: https://github.com/tgvaughan/elpher
;; Version: 1.4.6
;; Keywords: comm gopher
;; Homepage: https://github.com/tgvaughan/elpher
-;; Package-Requires: ((emacs "2
5
"))
+;; Package-Requires: ((emacs "2
6
"))
;; This file is not part of GNU Emacs.
;; This file is not part of GNU Emacs.
@@
-50,9
+50,15
@@
;;; Code:
(provide 'elpher)
;;; Code:
(provide 'elpher)
+
+;;; Dependencies
+;;
+
(require 'seq)
(require 'pp)
(require 'shr)
(require 'seq)
(require 'pp)
(require 'shr)
+(require 'url-util)
+
;;; Global constants
;;
;;; Global constants
;;
@@
-209,21
+215,22
@@
before attempting to connect to the server."
(selector (elpher-address-selector address))
(bare-host (elpher-address-host address))
(port (elpher-address-port address)))
(selector (elpher-address-selector address))
(bare-host (elpher-address-host address))
(port (elpher-address-port address)))
- (let ((host (if (string-match-p ":" bare-host)
- (concat "[" bare-host "]")
- bare-host)))
- (if (and (equal type ?h)
- (string-prefix-p "URL:" selector))
- (elt (split-string selector "URL:") 1)
- (concat "gopher"
- (if (elpher-address-use-tls-p address) "s" "")
- "://"
- host
- (if (equal port 70)
- ""
- (format ":%d" port))
- "/" (string type)
- selector)))))
+ (url-encode-url
+ (let ((host (if (string-match-p ":" bare-host)
+ (concat "[" bare-host "]")
+ bare-host)))
+ (if (and (equal type ?h)
+ (string-prefix-p "URL:" selector))
+ (elt (split-string selector "URL:") 1)
+ (concat "gopher"
+ (if (elpher-address-use-tls-p address) "s" "")
+ "://"
+ host
+ (if (equal port 70)
+ ""
+ (format ":%d" port))
+ "/" (string type)
+ selector))))))
;; Node
;; Node
@@
-297,8
+304,12
@@
unless PRESERVE-PARENT is non-nil."
(if getter
(funcall getter)
(let* ((address (elpher-node-address node))
(if getter
(funcall getter)
(let* ((address (elpher-node-address node))
- (type (elpher-address-type address)))
- (funcall (car (alist-get type elpher-type-map))))))
+ (type (elpher-address-type address))
+ (type-record (alist-get type elpher-type-map)))
+ (if (listp type-record)
+ (funcall (car type-record))
+ (elpher-visit-parent-node)
+ (error "Unsupported gopher selector type '%c'" type)))))
(defun elpher-visit-parent-node ()
"Visit the parent of the current node."
(defun elpher-visit-parent-node ()
"Visit the parent of the current node."
@@
-554,9
+565,11
@@
calls, as is necessary if the match is performed by `string-match'."
(type (if (> (length type-and-selector) 1)
(elt type-and-selector 1)
?1))
(type (if (> (length type-and-selector) 1)
(elt type-and-selector 1)
?1))
- (selector (if (> (length type-and-selector) 1)
- (substring type-and-selector 2)
- ""))
+ (selector (decode-coding-string
+ (url-unhex-string
+ (if (> (length type-and-selector) 1)
+ (substring type-and-selector 2)
+ "")) 'utf-8))
(use-tls (string= protocol "gophers"))
(address (elpher-make-address type selector host port use-tls)))
(elpher-make-node url address))
(use-tls (string= protocol "gophers"))
(address (elpher-make-address type selector host port use-tls)))
(elpher-make-node url address))