anchor.diff:  
   (defun move-to-previous-virtual-line-n (point window n)
     (assert (eq (point-buffer point) (window-buffer window)))
  -  (let* ((off-x      (point-charpos point))
  -         (n1         n)
  -         (first-line t)
  -         (pos-ring   (make-array (1+ n))) ; ring buffer of wrapping position
  -         (pos-size   (1+ n))
  -         (pos-count  0)
  -         (pos-next   0)
  -         (pos-last   0))
  +  (let ((off-x      (point-charpos point))
  +        (n1         n)
  +        (first-line t)
  +        (pos-ring   (make-array (1+ n))) ; ring buffer of wrapping position
  +        (pos-size   (1+ n))
  +        (pos-count  0)
  +        (pos-next   0)
  +        (pos-last   0))
       (when (<= n 0)
         (return-from move-to-previous-virtual-line-n point))
       (unless (variable-value 'truncate-lines :default (point-buffer point))
  
positive.code: (defun window-offset-view (window)
    (cond ((point< (window-buffer-point window)
                   (window-view-point window))
           (min -1 (- (window-cursor-y window))))
          ((let ((n (- (window-cursor-y window)
                       (- (window-%height window)
                          (if (window-use-modeline-p window) 2 1)))))
  
negative.code:   (if (point< (window-buffer-point window)
                (window-view-point window))
        ;; sometimes one line larger value is returned (incomplete)
        (- (+ (window-cursor-y-not-wrapping window)
              (window-wrapping-offset window
                                      (window-buffer-point window)
                                      (window-view-point window))))
        ;; always true value is returned
        (+ (window-cursor-y-not-wrapping window)
           (window-wrapping-offset window
  