anchor.diff:      (obj)
     (list (url-element/addr obj)))
   
  -(defun insert-message-to-channel (channel msg)
  -  (receptacle:sorted-list-insert (channel/messages channel) msg)
  +(defun redisplay-channel-content (channel)
     (let* ((frame (channel/frame channel))
            (pane (clim:find-pane-named frame 'channel-content)))
       (when (eq (potato-frame/active-channel frame) channel)
         (clim:redisplay-frame-pane frame pane))))
  +
  +(defun insert-message-to-channel (channel msg)
  +  (receptacle:sorted-list-insert (channel/messages channel) msg)
  +  (redisplay-channel-content channel))
   
   (defun send-message-selected (gadget)
     (declare (ignore gadget))
  
positive.code:         (clim:execute-frame-command frame `(send-message ,channel ,text))
          (setf (clim:gadget-value pane) "")))))
  
  (defun load-history-and-update (channel conn frame)
    (let ((messages (loop
                      with result = (potato-client:message-history (channel/id channel) :connection conn :format "json")
                      for msg-json in (st-json:getjso "messages" result)
                      collect (make-message-from-json channel msg-json))))
      (with-call-in-event-handler frame
        (dolist (msg messages)
          (insert-message-to-channel channel msg))
        (when (eq (potato-frame/active-channel frame) channel)
          (clim:redisplay-frame-pane frame (clim:find-pane-named frame 'channel-content))))))
  
  (define-potato-frame-command (switch-to-channel-frame :name "Switch to channel")
      ((obj 'channel))
  
negative.code:             (cid (channel/id obj)))
          (lparallel:future
            (potato-client:subscribe-to-channel cid :connection conn)
            (load-history-and-update obj conn)
            (update-users-from-channel (channel/users obj) conn cid))))))
  
  (define-potato-frame-command (send-message :name "Send message")
  