** OPEN Add history browsing
+
+** OPEN Download/rendering progress feedback
+ Particularly for large files or complicated pages, elpher can
+ take a few seconds or more to generate a response. Thhis is
+ frustrating for users, who are left staring at a blinking
+ cursor.
+ A small amount of feedback could help with this.
+
* Bugs
-
+
* Completed improvements
** CLOSED Turn on lexical scoping
occasionally pop up in termal windows. Lets leave it for now.
** CLOSED Implement Finger support
+
+** CLOSED Improve download performance
+ This is actually easy to fix - the major problem at the moment is
+ the braindead way the incrementally-retrieved data is recorded:
+ (setq result-string (concat result-string next-bit)).
+ This is O(N^2). Yuck!
+
+ Okay, replacing this really does improve things. Large gemini
+ downloads now seem occur at rates I'd expect.
* Closed issues
(let* ((kill-buffer-query-functions nil)
(port (elpher-address-port address))
(host (elpher-address-host address))
- (selector-string "")
+ (selector-string-parts nil)
(proc (open-network-stream "elpher-process"
nil
(if force-ipv4 (dns-query host) host)
(set-process-filter proc
(lambda (_proc string)
(cancel-timer timer)
- (setq selector-string
- (concat selector-string string))))
+ (setq selector-string-parts
+ (cons string selector-string-parts))))
(set-process-sentinel proc
(lambda (_proc event)
(condition-case the-error
"\r\n"))))
(t
(cancel-timer timer)
- (funcall renderer selector-string)
+ (funcall renderer (apply #'concat
+ (reverse selector-string-parts)))
(elpher-restore-pos)))
(error
(elpher-network-error address the-error))))))
(port (let ((given-port (elpher-address-port address)))
(if (> given-port 0) given-port 79)))
(host (elpher-address-host address))
- (selector-string "")
+ (selector-string-parts nil)
(proc (open-network-stream "elpher-process"
nil
(if force-ipv4 (dns-query host) host)
(set-process-filter proc
(lambda (_proc string)
(cancel-timer timer)
- (setq selector-string
- (concat selector-string string))))
+ (setq selector-string-parts
+ (cons string selector-string-parts))))
(set-process-sentinel proc
(lambda (_proc event)
(condition-case the-error
(concat user "\r\n"))))
(t
(cancel-timer timer)
- (funcall renderer selector-string)
+ (funcall renderer (apply #'concat
+ (reverse selector-string-parts)))
(elpher-restore-pos)))))))
(error
(elpher-network-error address the-error))))))