anchor.diff:    (check-type start integer)
     (check-type end integer)
     (check-type buffer-start integer)
  +  ;; Since this is a CLIM-specified function, we have to make sure the
  +  ;; input-buffer-array is taken into consideration, because some
  +  ;; input-editor-command might call this function and expect the
  +  ;; changes to be reflected in the array it holds. Also, if changes
  +  ;; have been made to the array, they need to be propagated to the
  +  ;; buffer before we do anything.
  +  (synchronize-drei-buffer stream)
     (let* ((drei (drei-instance stream))
            (new-contents (subseq new-input start end))
            (old-contents (buffer-sequence (buffer drei)
  
positive.code:       (unless equal
          (setf (offset begin-mark) buffer-start)
          (delete-region begin-mark (stream-scan-pointer stream))
          (insert-sequence begin-mark new-contents))
        (update-syntax (buffer drei) (syntax (buffer drei)))
        (display-drei drei)
        (when (or rescan (not equal))
          (queue-rescan stream)))))
  
  (defun present-acceptably-to-string (object type view for-context-type)
    "Return two values - a string containing the printed
  
negative.code:   (declare (ignore start-position))
    ;; We ignore `start-position', because it would be more work to
    ;; figure out what to redraw than to just redraw everything.
    ;; We assume that this function is mostly called from non-Drei-aware
    ;; code, and thus synchronise the input-editor-array with the Drei
    ;; buffer before redisplaying.
    (update-drei-buffer stream)
    (display-drei (drei-instance stream)))
  
  (defmethod erase-input-buffer ((stream drei-input-editing-mixin)
                                 &optional (start-position 0))
    (declare (ignore start-position))
    ;; No-op, just to save older CLIM programs from dying.
    nil)
  
  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  ;;; 
  