anchor.diff:     ((and n (minusp n))
       (next-line (- n)))
      (t
  -    (%next-line-before)
  +    (%next-line-before n)
       (if (dotimes (_ (or n 1) t)
             (if (head-line-p *current-window* (window-cur-linum))
                 (return)
  
positive.code:    ((and n (minusp n))
      (prev-line (- n)))
     (t
      (%next-line-before)
      (if (dotimes (_ (or n 1) t)
            (if (tail-line-p *current-window* (window-cur-linum))
                (return nil)
  
negative.code:   t)
  
  (let ((tmp-column))
    (defun %update-tmp-column ()
      (setq tmp-column
            (str-width (buffer-line-string
                        (window-buffer)
                        (window-cur-linum))
                       0
                       (window-cur-col))))
    (defun %next-line-before (arg)
      (when (null arg)
        (when-interrupted-flag
         :next-line
         (%update-tmp-column))))
    (defun %get-goal (string width)
      (let ((w 0))
        (do ((i 0 (1+ i)))
            ((>= i (length string))
             (length string))
          (let ((c (aref string i)))
            (setq w (char-width c w))
            (when (< width w)
              (return i))))))
    (defun %next-line-after (arg)
      (cond
       (arg (beginning-of-line))
       (t
        (let ((col (%get-goal (buffer-line-string
                               (window-buffer)
                               (window-cur-linum))
                              tmp-column)))
          (when col
            (setf (window-cur-col) col)))
        (check-type (window-cur-col)
                    (integer 0 #.most-positive-fixnum))))))
  
  