X-Git-Url: https://thelambdalab.xyz/gitweb/index.cgi?a=blobdiff_plain;f=elopher.el;h=871e2b25ff62be98771c472ea2af20092222d47b;hb=6eed0576c76f93c66e63f5cfaf71bb38cde19060;hp=9d4542897eb34ed4ca8742aa040eb3212f6c99bb;hpb=cedb1704c16e68b97cb0aa26429ac7cf092b12fb;p=elpher.git diff --git a/elopher.el b/elopher.el index 9d45428..871e2b2 100644 --- a/elopher.el +++ b/elopher.el @@ -35,44 +35,48 @@ 'help-echo (concat "mouse-1: " mouse-help) 'keymap map))) -(defun elopher-format-i (display-string) - (elopher-type-margin) - (insert (propertize display-string 'face '(foreground-color . "white"))) - (insert "\n")) - -(defun elopher-format-0 (display-string selector hostname port) - (elopher-type-margin "T") +(defun elopher-format-record (display-string margin-key color &optional getter help-text) + (elopher-type-margin margin-key) (insert (propertize - (elopher-make-clickable display-string - `(lambda () (interactive) - (elopher-get-text ,hostname ,port ,selector)) - (format "open \"%s\" on %s port %s" - selector hostname port)) - 'face '(foreground-color . "gray"))) + (if getter + (elopher-make-clickable display-string + getter + help-text) + display-string) + 'face `(foreground-color . ,color))) (insert "\n")) -(defun elopher-format-1 (display-string selector hostname port) - (elopher-type-margin "/") - (insert (propertize - (elopher-make-clickable display-string - `(lambda () (interactive) - (elopher-get-index ,hostname ,port ,selector)) - (format "follow link to \"%s\" on %s port %s" - selector hostname port)) - 'face '(foreground-color . "cyan"))) - (insert "\n")) +(defun elopher-make-getter (func address) + (let ((selector (car address)) + (hostname (cadr address)) + (port (caddr address))) + `(lambda () + (interactive) + (,func ,hostname ,port ,selector)))) + +(defun elopher-make-help (address) + (let ((selector (car address)) + (hostname (cadr address)) + (port (caddr address))) + (format "open \"%s\" on %s port %s" + selector hostname port))) (defun elopher-process-record (line) (let* ((type (elt line 0)) (fields (split-string (substring line 1) "\t")) - (g-display-string (elt fields 0)) - (g-selector (elt fields 1)) - (g-hostname (elt fields 2)) - (g-port (elt fields 3))) + (display-string (elt fields 0)) + (selector (elt fields 1)) + (hostname (elt fields 2)) + (port (elt fields 3)) + (address (list selector hostname port))) (pcase type - (?i (elopher-format-i g-display-string)) - (?0 (elopher-format-0 g-display-string g-selector g-hostname g-port)) - (?1 (elopher-format-1 g-display-string g-selector g-hostname g-port))))) + (?i (elopher-format-record display-string nil "white")) + (?0 (elopher-format-record display-string "T" "gray" + (elopher-make-getter 'elopher-get-text address) + (elopher-make-help address))) + (?1 (elopher-format-record display-string "/" "cyan" + (elopher-make-getter 'elopher-get-index address) + (elopher-make-help address)))))) (defvar elopher-incomplete-record "") @@ -97,6 +101,7 @@ (defun elopher-get-index (host &optional port path) (switch-to-buffer "*elopher*") (erase-buffer) + (setq elopher-incomplete-record "") (make-network-process :name "elopher-process" :host host @@ -111,12 +116,14 @@ (set-marker marker 0 (current-buffer))) (save-excursion (goto-char marker) - (insert string) + (dolist (line (split-string string "\r")) + (insert line)) (set-marker marker (point)))))) (defun elopher-get-text (host port selector) (switch-to-buffer "*elopher*") (erase-buffer) + (setq elopher-incomplete-record "") (make-network-process :name "elopher-process" :host host @@ -129,8 +136,8 @@ (interactive) (elopher-get-index (read-from-minibuffer "Gopher host: ") 70)) -(elopher-get-index "cosmic.voyage") -;; (elopher-get-index "gopher.floodgap.com") +;; (elopher-get-index "cosmic.voyage") +(elopher-get-index "gopher.floodgap.com") ;; (elopher-get-index "maurits.id.au") (defun elopher-quit ()