anchor.diff:           (mezzanine.supervisor:fifo-push (make-instance 'server-line-event :line line) fifo)))))
   
   (defvar *top-level-commands* (make-hash-table :test 'equal))
  -
  -(defmacro define-command (name (irc text) &body body)
  -  `(setf (gethash ',(string-upcase (string name))
  -                  *top-level-commands*)
  -         (lambda (,irc ,text)
  -           (declare (system:lambda-name (irc-command ,name)))
  -           ,@body)))
  +(defvar *top-level-command-doc* (make-hash-table :test 'equal))
  +
  +(defmacro define-command (name (irc text) docstring &body body)
  +  `(progn
  +     (setf (gethash ',(string-upcase (string name))
  +                    *top-level-command-doc*)
  +           ',docstring)
  +     (setf (gethash ',(string-upcase (string name))
  +                    *top-level-commands*)
  +           (lambda (,irc ,text)
  +             (declare (system:lambda-name (irc-command ,name)))
  +             ,@body))))
   
   (define-command quit (irc text)
  +  "QUIT [message]
  +  Disconnect and close IRC."
     (when (irc-connection irc)
       (buffered-format (irc-connection irc) "QUIT :~A~%" text))
     (throw 'quit nil))
   
   (define-command raw (irc text)
  +  "RAW <text>
  +  Send TEXT directly to the server without parsing."
     (when (irc-connection irc)
       (write-string text (irc-connection irc))
       (terpri (irc-connection irc))))
   
   (define-command eval (irc text)
  +  "EVAL <code>
  +  Read and evaluate CODE, printing the result in the display pane."
     (let ((*standard-output* (display-pane irc)))
       (format t "~&[eval] ~A~%" text)
       (eval (read-from-string text))
       (fresh-line)))
   
   (define-command say (irc text)
  +  "SAY <text>
  +  Send a message to the current channel."
     (cond ((and (irc-connection irc) (current-channel irc))
            (format (display-pane irc) "~&[~A]<~A> ~A" (current-channel irc) (nickname irc) text)
            (buffered-format (irc-connection irc) "PRIVMSG ~A :~A~%"
  
positive.code:         (t (error "Not connected."))))
  
  (define-command chan (irc text)
    (when (irc-connection irc)
      (if (find text (joined-channels irc) :test 'string-equal)
          (setf (current-channel irc) text)
          (error "Not joined to channel ~A." text))))
  
  (define-command part (irc text)
    (when (and (irc-connection irc) (current-channel irc))
      (buffered-format (irc-connection irc) "PART ~A :~A~%" (current-channel irc) text)
      (setf (joined-channels irc) (remove (current-channel irc) (joined-channels irc)))
      (setf (current-channel irc) (first (joined-channels irc)))))
  
  (defclass irc-client ()
    ((%fifo :initarg :fifo :reader fifo)
  
negative.code:         (t (error "Not connected or not joined to a channel."))))
  
  (define-command me (irc text)
    "ACTION <text>
    Send a CTCP ACTION to the current channel."
    (cond ((and (irc-connection irc) (current-channel irc))
           (format (display-pane irc) "~&[~A]* ~A ~A" (current-channel irc) (nickname irc) text)
           (buffered-format (irc-connection irc) "PRIVMSG ~A :~AACTION ~A~A~%"
  