X-Git-Url: https://thelambdalab.xyz/gitweb/index.cgi?p=elpher.git;a=blobdiff_plain;f=elpher.el;h=1d0b1fecf323ab7f491e547a22bf4f74f75dae23;hp=0888870b9553bd77417b483f7f7bb4e61fdff3fb;hb=dd0904213175f960b53fdd42735596d9808b65cd;hpb=643f0bc0617e043190bbcd55579f39902bb1cd91 diff --git a/elpher.el b/elpher.el index 0888870..1d0b1fe 100644 --- a/elpher.el +++ b/elpher.el @@ -92,13 +92,13 @@ (lambda (s) (let ((_xterm-color-render nil)) (xterm-color-filter s))) - 'ansi-color-filter-apply) + #'ansi-color-filter-apply) "A function to filter out ANSI escape sequences.") (defalias 'elpher-color-apply (if (fboundp 'xterm-color-filter) - 'xterm-color-filter - 'ansi-color-apply) + #'xterm-color-filter + #'ansi-color-apply) "A function to apply ANSI escape sequences.") ;;; Global constants @@ -389,11 +389,6 @@ requiring gopher-over-TLS." "Create an ADDRESS object corresponding to the given special address symbol TYPE." type) -(defun elpher-make-start-page () - "Create the start page." - (elpher-make-page "Elpher Start Page" - (elpher-make-special-address 'start))) - (defun elpher-address-to-url (address) "Get string representation of ADDRESS, or nil if ADDRESS is special." (if (elpher-address-special-p address) @@ -493,6 +488,11 @@ If no address is defined, returns 0. (This is for compatibility with the URL li "Create a page with DISPLAY-STRING and ADDRESS." (list display-string address)) +(defun elpher-make-start-page () + "Create the start page." + (elpher-make-page "Elpher Start Page" + (elpher-make-special-address 'start))) + (defun elpher-page-display-string (page) "Retrieve the display string corresponding to PAGE." (elt page 0)) @@ -600,7 +600,8 @@ previously-visited pages,unless NO-HISTORY is non-nil." (unless (eq major-mode 'elpher-mode) ;; avoid resetting buffer-local variables (elpher-mode)) - (let ((inhibit-read-only t)) + (let ((inhibit-read-only t) + (ansi-color-context nil)) ;; clean ansi interpreter state (setq-local network-security-level (default-value 'network-security-level)) (erase-buffer) @@ -677,6 +678,15 @@ ERROR can be either an error object or a string." (if (timerp elpher-network-timer) (cancel-timer elpher-network-timer))) +(defun elpher-make-network-timer (thunk) + "Creates a timer to run the THUNK after `elpher-connection-timeout' seconds. +This is just a wraper around `run-at-time' which additionally sets the +buffer-local variable `elpher-network-timer' to allow +`elpher-process-cleanup' to also clear the timer." + (let ((timer (run-at-time elpher-connection-timeout nil thunk))) + (setq-local elpher-network-timer timer) + timer)) + (defun elpher-get-host-response (address default-port query-string response-processor &optional use-tls force-ipv4) "Generic function for retrieving data from ADDRESS. @@ -713,19 +723,7 @@ the host operating system and the local network capabilities.)" :hostname host :keylist (elpher-get-current-keylist address))) - (proc (if socks (socks-open-network-stream "elpher-process" nil host service) - (make-network-process :name "elpher-process" - :host host - :family (and force-ipv4 'ipv4) - :service service - :buffer nil - :nowait t - :tls-parameters - (and use-tls - (cons 'gnutls-x509pki - (apply #'gnutls-boot-parameters - gnutls-params)))))) - (timer (run-at-time elpher-connection-timeout nil + (timer (elpher-get-network-timer (lambda () (elpher-process-cleanup) (cond @@ -747,7 +745,19 @@ the host operating system and the local network capabilities.)" response-processor nil force-ipv4)) (t - (elpher-network-error address "Connection time-out."))))))) + (elpher-network-error address "Connection time-out.")))))) + (proc (if socks (socks-open-network-stream "elpher-process" nil host service) + (make-network-process :name "elpher-process" + :host host + :family (and force-ipv4 'ipv4) + :service service + :buffer nil + :nowait t + :tls-parameters + (and use-tls + (cons 'gnutls-x509pki + (apply #'gnutls-boot-parameters + gnutls-params))))))) (setq elpher-network-timer timer) (set-process-coding-system proc 'binary 'binary) (set-process-query-on-exit-flag proc nil) @@ -804,6 +814,7 @@ the host operating system and the local network capabilities.)" (if use-tls (apply #'gnutls-negotiate :process proc gnutls-params)) (funcall (process-sentinel proc) proc "open\n"))) (error + (elpher-process-cleanup) (error "Error initiating connection to server"))))) @@ -1457,7 +1468,6 @@ treatment that a separate function is warranted." (insert (propertize display-string 'face 'elpher-unknown))) (insert "\n")))) -;; buffer-local (defvar elpher--gemini-page-headings nil "List of headings on the page.")