- (define-key map [mouse-1] link-function)
- (define-key map (kbd "RET") link-function)
- (propertize string
- 'mouse-face 'highlight
- 'help-echo (concat "mouse-1: " mouse-help)
- 'keymap map)))
-
-(defun elopher-format-record (display-string margin-key color &optional getter help-text)
- (elopher-type-margin margin-key)
- (insert (propertize
- (if getter
- (elopher-make-clickable display-string
- getter
- help-text)
- display-string)
- 'face `(foreground-color . ,color)))
- (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)
+ (define-key map (kbd "<tab>") 'elopher-next-link)
+ (define-key map (kbd "<S-tab>") 'elopher-prev-link)
+ (define-key map (kbd "u") 'elopher-pop-history)
+ (define-key map (kbd "g") 'elopher-go)
+ (define-key map (kbd "r") 'elopher-reload)
+ (when (require 'evil nil t)
+ (evil-define-key 'normal map
+ (kbd "C-]") 'elopher-follow-closest-link
+ (kbd "C-t") 'elopher-pop-history
+ (kbd "u") 'elopher-pop-history
+ (kbd "g") 'elopher-go
+ (kbd "r") 'elopher-reload))
+ map))
+ ;; "Keymap for gopher client.")
+
+(define-derived-mode elopher-mode special-mode "elopher"
+ "Major mode for elopher, an elisp gopher client.")
+
+
+;;; Index rendering
+;;
+
+(defun elopher-insert-index (string)
+ "Inserts the index corresponding to STRING into the current buffer."
+ (dolist (line (split-string string "\r\n"))
+ (elopher-insert-index-record line)))
+
+(defun elopher-insert-margin (&optional type-name)
+ (if type-name
+ (insert (format (concat "%" (number-to-string elopher-margin-width) "s"
+ (concat
+ (propertize "[" 'face '(foreground-color . "blue"))
+ (propertize type-name 'face '(foreground-color . "white"))
+ (propertize "]" 'face '(foreground-color . "blue"))))))
+ (insert (make-string elopher-margin-width ?\s))))
+
+(defun elopher-insert-index-record (line)
+ "Inserts the index record corresponding to LINE into the current buffer."