anchor.diff:        (setf (mark-line top-line-mark) (display-line-line new-top-line))
               (mark-charpos top-line-mark) (display-line-start new-top-line))))
   
  +(defun minibuffer-rows ()
  +  (if (eql (current-buffer *editor*) *minibuffer*)
  +    (1+ (truncate (line-number (last-line *minibuffer*)) 10000))
  +    1))
  +
  +(defvar *mode-line-buffer* (make-instance 'buffer))
   (defun render-mode-line ()
  -  (let* ((buffer (current-buffer *editor*))
  -         (minibuffer-rows (if (eql buffer *minibuffer*)
  -                            (1+ (truncate (line-number (last-line buffer)) 10000))
  -                            1))
  -         (modeline-buffer (get-buffer-create " *Modeline*"))
  -         (modeline-string (buffer-property buffer 'modeline)))
  -    (insert modeline-buffer
  +  (let* ((buffer (current-buffer *editor*)))
  +    (insert *mode-line-buffer*
         (format nil " [~A] ~A L~S C~S    (~A)" 
            (if (buffer-modified buffer) "*" " ")
            (buffer-property buffer 'name)
  
positive.code:                     (setf (aref current-screen y) line)
                      (check-pending-input))))
                ;; render the messages line
            (let ((line (previous-line (last-line (get-buffer-create "*Messages*")))))
              (when line
                (render-display-line line
                  (lambda (l) (blit-display-line l (1+ (window-rows)))))))))
            (render-mode-line)
            ;; Prune the cache.
            (setf (display-line-cache *editor*) (subseq (display-line-cache *editor*) 0 (* (window-rows) 4))))
  
negative.code:             (return-from redisplay nil))
            ;; Compare against the current screen, blitting when needed.
            (if (eql buffer *minibuffer*)
              (let ((minibuffer-rows (minibuffer-rows)))
                (do ((y 0 (incf y)))
                    ((= y minibuffer-rows))
                  (let ((line (aref new-screen y)))
  