anchor.diff:                        +min-width+))
            (disp-h (max (- (display-height) b2)
                         +min-height+))
  +         (width  (max (+ width *extra-width-margin*)
  +                      +min-width+))
  +         (height (max height
  +                      +min-height+))
            (x (+ (window-x source-window)
                  (window-cursor-x source-window)))
  -         (y (+ (window-y source-window)
  -               (window-cursor-y source-window)
  -               1))
  -         (w (max (+ width *extra-width-margin*)
  -                 +min-width+))
  -         (h (max height
  -                 +min-height+)))
  +         (y (alexandria:clamp
  +             (+ (window-y source-window)
  +                (window-cursor-y source-window)
  +                1)
  +             0
  +             (1- (display-height))))
  +         (w width)
  +         (h height))
       ;; calc y and h
       (when (> (+ y height) disp-h)
         (decf h (- (+ y height) disp-h)))
  
positive.code:   (multiple-value-bind (x y width height)
        (compute-popup-window-position (popup-window-gravity popup-window)
                                       (popup-window-source-window popup-window)
                                       (window-width popup-window)
                                       (window-height popup-window))
      (lem::window-set-size popup-window width height)
      (lem::window-set-pos popup-window
                           (+ x +border-size+)
  
negative.code:     :reader popup-window-gravity)
     (source-window
      :initarg :source-window
      :reader popup-window-source-window)
     (base-width
      :initarg :base-width
      :reader popup-window-base-width)
     (base-height
      :initarg :base-height
      :reader popup-window-base-height))
    (:default-initargs
     :border +border-size+))
  
  