anchor.diff:       ;; if the menu type is a checklist
        (if (eq (.type menu) :checklist)
            ;; return all checked items in a list.
  +         ;; TODO: once we get rid of the checklist type, always return all checked items.
            (with-accessors ((items .items) (checklist .checklist)) menu
              (return-from select-item (loop for i from 0 below (length items) if (nth i checklist) collect (nth i items))))
   
  -         ;; else, if the menu type is selection, act on the current item.
  +         ;; else, if the menu type is a selection, act on the current item.
  +         ;; TODO: provide a current-item slot, so we dont have to get the current item every time.
            (let ((item (current-item menu)))
  +           ;; depending on the type of the item
              (typecase item
                ;; if we have just a normal string or a symbol, just return it.
                (symbol
  
positive.code:   "Return the currently selected item of the given menu."
    (nth (.current-item-number menu) (.items menu)))
  
  ;; test submenus, test this in t19c
  (defun select-item (menu)
    "Display a menu, let the user select an item, return the selected item.
  
  
negative.code:       (flet ((make-title-string (len)
                 (concatenate 'string "|~" (write-to-string (+ len 2)) ":@<~A~>|")))
          (add menu (format nil (make-title-string (length title)) title) :y 0 :x 2)))
      ;; todo: when we refresh a window with a subwin, we shouldnt have to refresh the subwin separately.
      ;; make refresh specialize on menu and decorated window in a way to do both.
      (refresh menu)
      (refresh sub-win)))
  
  ;; TODO: rename to draw. draw-menu is wrong, since it is a dialog, not really a menu.
  (defmethod draw-menu ((menu dialog-window))
    ;; first draw a menu
    ;; TODO: describe what exactly is drawn here and what in the parent method.
    (call-next-method)
  
    ;; then draw the message in the reserved space above the menu.
  