anchor.diff:                              (setq redraw-flag t))))
                      (setf y y2))))
                 (t
  +               ;; バッファの末尾まできたときの処理
                  (fill (screen-old-lines screen) nil :start i)
                  (charms/ll:wmove (screen-%scrwin screen) y 0)
                  (charms/ll:wclrtobot (screen-%scrwin screen))
  
positive.code:                     (fat-equalp str #1#)                  ; 表示しようとしている文字列が以前に表示する行と内容が同じで
                      (/= (- pos-y start-linum) i)          ; その行がカーソルの位置ではないなら真
                      )
                 (if (buffer-truncate-lines buffer)
                     (let ((n (count i wrap-lines)))
                       (when (and (< 0 n) (<= y cury))
                         (incf cury n))
                       (incf y n)
                       (dotimes (_ n)
                         (push i (screen-wrap-lines screen))))))
                (str
                 (when (zerop (fat-length str))
                   (charms/ll:wmove (screen-%scrwin screen) y 0)
                   (charms/ll:wclrtoeol (screen-%scrwin screen)))
                 (setf (aref (screen-old-lines screen) i) str)
                 (let (y2)
                   (multiple-value-setq (curx cury y2)
                                        (funcall disp-line-fun
                                                 screen start-charpos curx cury pos-x y str))
                   (when (buffer-truncate-lines buffer)
                     (charms/ll:wclrtoeol (screen-%scrwin screen))
                     (let ((offset (- y2 y)))
                       (cond ((< 0 offset)
                              (setq redraw-flag t)
                              (dotimes (_ offset)
  
negative.code:              #'disp-line)))
      (let ((wrap-lines (screen-wrap-lines screen))
            ;; wrap-linesという変数は物理行の単位でどの行が折り返されたかを覚えておくためのもの
            ;; 以前折り返した位置はwrap-linesから探して、今から折り返す位置はscreen-wrap-linesに記録していく
            )
        (setf (screen-wrap-lines screen) nil)
        (loop
  