anchor.diff:                 (write-char ch (input-pane irc)))))))
   
   (defmethod dispatch-event (irc (event server-disconnect-event))
  -  (format (display-pane irc) "~&Disconnected."))
  +  (format (display-pane irc) "~&Disconnected from server.")
  +  (close (irc-connection irc))
  +  (setf (irc-connection irc) nil
  +        (receive-thread irc) nil)
  +  (setf (mezzanine.gui.widgets:frame-title (frame irc)) (format nil "IRC"))
  +  (mezzanine.gui.widgets:draw-frame (frame irc))
  +  (mezzanine.gui.compositor:damage-window (window irc)
  +                                          0 0
  +                                          (mezzanine.gui.compositor:width (window irc))
  +                                          (mezzanine.gui.compositor:height (window irc))))
   
   (defmethod dispatch-event (irc (event server-line-event))
     (let ((line (line event)))
  
positive.code:          (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)))
  
  (define-command quit (irc text)
    (when (irc-connection irc)
      (buffered-format (irc-connection irc) "QUIT :~A~%" text))
    (throw 'quit nil))
  
  (define-command raw (irc text)
    (when (irc-connection irc)
      (write-string text (irc-connection irc))
      (terpri (irc-connection irc))))
  
  (define-command eval (irc text)
    (let ((*standard-output* (display-pane irc)))
      (format t "~&[eval] ~A~%" text)
      (eval (read-from-string text))
      (fresh-line)))
  
  (define-command say (irc text)
    (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~%"
  
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~%"
  