anchor.diff:                                  (completion-item-end item))
            (insert-string point (completion-item-label item)))))
   
  +(defun create-completion-buffer (items)
  +  (let ((buffer (get-buffer-create "*Completion*")))
  +    (erase-buffer buffer)
  +    (let ((point (buffer-point buffer))
  +          (max-column 0))
  +      (dolist (item items)
  +        (insert-string point (completion-item-label item))
  +        (insert-string point " ")
  +        (insert-string point (completion-item-detail item))
  +        (setf max-column (max max-column (point-column point)))
  +        (with-point ((start (line-start (copy-point point :temporary))))
  +          (put-text-property start point :item item))
  +        (insert-character point #\newline))
  +      (buffer-start point)
  +      (loop
  +        (move-to-column point max-column t)
  +        (with-point ((start point)
  +                     (end point))
  +          (put-text-property (line-start start)
  +                             (line-end end)
  +                             :attribute *completion-attribute*))
  +        (line-offset point 1)
  +        (when (end-buffer-p point)
  +          (return)))
  +      (buffer-start point)
  +      (values buffer max-column))))
  +
   (defun run-completion (items)
     (if (uiop:length=n-p items 1)
         (completion-insert (current-point) (first items))
  -      (let ((buffer (get-buffer-create "*Completion*")))
  -        (erase-buffer buffer)
  -        (display-buffer buffer)
  -        (let ((point (buffer-point buffer)))
  -          (dolist (item items)
  -            (insert-string point (completion-item-label item))
  -            (insert-string point " ")
  -            (insert-string point (completion-item-detail item))
  -            (put-text-property (line-start (copy-point point :temporary)) point :item item)
  -            (insert-character point #\newline))
  -          (buffer-start point))
  -        (start-completion-mode buffer))))
  +      (multiple-value-bind (buffer max-column)
  +          (create-completion-buffer items)
  +        (setf *completion-window*
  +              (let ((x (+ (window-x (current-window)) 1))
  +                    (y (+ (window-y (current-window))
  +                          (count-lines (window-point (current-window))
  +                                       (window-view-point (current-window)))
  +                          1))
  +                    (width (+ 2 max-column))
  +                    (height (min (length items)
  +                                 (floor (window-height (current-window)) 2))))
  +                (make-floating-window buffer x y width height nil)))
  +        (start-completion-mode buffer)))
  +  t)
  
positive.code:   (when *completion-overlay*
      (delete-overlay *completion-overlay*))
    (completion-mode nil)
    (let ((window (completion-window)))
      (with-current-window window
        (quit-window window))))
  
  (define-command completion-self-insert () ()
    (unread-key-sequence (last-read-key-sequence))
  
negative.code: 
  (defvar *completion-overlay* nil)
  (defvar *completion-overlay-attribute* (make-attribute "blue" nil :reverse-p t))
  (defvar *completion-attribute* (make-attribute nil nil :reverse-p t))
  (defvar *completion-window* nil)
  
  (defun completion-buffer ()
    (get-buffer "*Completion*"))
  