anchor.diff:  (defgeneric adjust-for-redrawing (gravity popup-window)
     (:method (gravity popup-window)))
   
  -(defgeneric compute-popup-window-position (gravity source-window width height))
  +(defgeneric compute-popup-window-rectangle (gravity source-window width height))
   
   (defclass gravity ()
     ((offset-x :initarg :offset-x :reader gravity-offset-x :initform 0)
  
positive.code:                          (+ x +border-size+)
                           (+ y +border-size+))))
  
  (defmethod compute-popup-window-position :around ((gravity gravity) source-window width height)
    (multiple-value-bind (x y width height)
        (call-next-method)
      (values (+ x (gravity-offset-x gravity))
  
negative.code:       (setf w (min width disp-w)))
      (values x y w h)))
  
  (defmethod compute-popup-window-rectangle ((gravity gravity-top) source-window width height)
    (let* ((x (- (floor (display-width) 2)
                        (floor width 2)))
           (y (+ (window-y source-window) 1)))
      (values x y width height)))
  
  (defmethod compute-popup-window-rectangle ((gravity gravity-topright) source-window width height)
    (let* ((b2 (* +border-size+ 2))
           (win-x (window-x source-window))
           (win-y (window-y source-window))
  