anchor.diff:  reposition the pane if point is outside the visible area."
     (with-accessors ((buffer buffer) (top top) (bot bot)
                      (point point)) (view drei-pane)
  -    (let ((nb-lines-in-pane (nb-lines-in-pane drei-pane)))
  -      (beginning-of-line top)
  -      (end-of-line bot)
  -      (when (or (mark< point top)
  -                (>= (number-of-lines-in-region top point)
  -                    nb-lines-in-pane))
  -        (reposition-pane drei-pane))))
  -  (adjust-pane-bot drei-pane))
  +    (beginning-of-line top)
  +    (when (or (mark< point top)
  +              (mark> point bot))
  +      (reposition-pane drei-pane))))
   
   (defun page-down (view)
     (with-accessors ((top top) (bot bot)) view
  
positive.code: ;;;
  ;;; Drei pane redisplay.
  
  (defun nb-lines-in-pane (pane)
    (let* ((medium (sheet-medium pane))
  	 (style (medium-text-style medium))
  	 (height (text-style-height style medium)))
      (multiple-value-bind (x y w h) (bounding-rectangle* pane)
        (declare (ignore x y w))
        (max 1 (floor h (+ height (stream-vertical-spacing pane)))))))
  
  (defun adjust-pane-bot (drei-pane)
    "Make the region on display fit the size of the pane as closely
  as possible by adjusting bot leaving top intact."
    (let* ((nb-lines-in-pane (nb-lines-in-pane drei-pane))
           (view (view drei-pane)))
      (with-accessors ((top top) (bot bot)) view
        (setf (offset bot) (offset top))
        (end-of-line bot)
        (loop until (end-of-buffer-p bot)
           repeat (1- nb-lines-in-pane)
           do (forward-object bot)
           (end-of-line bot)))))
  
  (defun reposition-pane (drei-pane)
    "Try to put point close to the middle of the pane by moving top
  half a pane-size up."
    (let ((nb-lines-in-pane (nb-lines-in-pane drei-pane))
          (view (view drei-pane)))
      (with-accessors ((top top) (point point)) view
        (setf (offset top) (offset point))
        (beginning-of-line top)
        #+nil(loop do (beginning-of-line top)
           repeat (floor nb-lines-in-pane 2)
           until (beginning-of-buffer-p top)
           do (decf (offset top))
  
negative.code:               (incf cursor-y line-height))
           when (or (>= (y2 (line-dimensions line)) pane-height)
                    (= (line-end-offset line) (size (buffer view))))
           return (progn
                    (setf (offset (bot view)) (line-end-offset line))
                    (clear-stale-lines pane view))))))
  
  (defun offset-in-stroke-position (stream view stroke offset)
    "Calculate the position in device units of `offset' in
  