anchor.diff:          (:b "[SEARCH] ") (cl-gopher:display-string line))))
   
   (defmethod line->html ((line cl-gopher:html-file))
  +  (let ((selector (cl-gopher:selector line)))
  +    (spinneret:with-html-string
  +      (:a :class "button"
  +          :href (if (str:starts-with-p "URL:" selector)
  +                    (sera:slice selector 4)
  +                    selector)
  +          (cl-gopher:display-string line))
  +      (:br))))
  +
  +(defmethod line->html ((line cl-gopher:text-file))
     (spinneret:with-html-string
       (:a :class "button"
  -        :href (when (str:starts-with-p "URL:" (cl-gopher:selector line))
  -                (sera:slice (cl-gopher:selector line) 4))
  +        :href (cl-gopher:uri-for-gopher-line line)
           (cl-gopher:display-string line))
  -    (:br)))
  -
  -(defmethod line->html ((line cl-gopher:text-file))
  -  (spinneret:with-html-string
  -    (:a :class "button"
  -       :href (cl-gopher:uri-for-gopher-line line)
  -       (cl-gopher:display-string line))
       (:br)))
   
   (defun file-link->html (line)
  
positive.code: 
  (export-always 'line->html)
  (defgeneric line->html (line)
    (:documentation "Transform a gopher line to a reasonable HTML representation."))
  
  (export-always 'gopher-render)
  (defgeneric gopher-render (line)
  
negative.code:           "Error: " (cl-gopher:display-string line))))
  
  (defmethod line->html ((line cl-gopher:info-message))
    (let ((line (cl-gopher:display-string line)))
      (spinneret:with-html-string
        (if (or (str:emptyp line)
                (every #'sera:whitespacep line))
            (:br)
            (:pre line)))))
  
  (defmethod line->html ((line cl-gopher:submenu))
    (spinneret:with-html-string
  