anchor.diff:  
   (defun isearch-end ()
     (isearch-reset-overlays (current-buffer))
  +  (buffer-unbound (current-buffer) 'isearch-redisplay-string)
     (setq *isearch-prev-string* *isearch-string*)
     (isearch-mode nil)
     t)
   
  +(defun isearch-redisplay-inactive (&optional (window (current-window)))
  +  (alexandria:when-let ((string
  +                         (buffer-value (window-buffer window)
  +                                       'isearch-redisplay-string)))
  +    (isearch-update-buffer (buffer-start-point (window-buffer window))
  +                           string)))
  +
   (define-command isearch-finish () ()
  -  (isearch-update-buffer (buffer-start-point (current-buffer))
  -                         *isearch-string*
  -                         (buffer-start-point (current-buffer))
  -                         (buffer-nlines (current-buffer)))
  +  (setf (buffer-value (current-buffer) 'isearch-redisplay-string) *isearch-string*)
  +  (add-hook *window-scroll-functions* 'isearch-redisplay-inactive)
     (setq *isearch-prev-string* *isearch-string*)
     (isearch-mode nil))
   
  
positive.code: 
  
  (defun isearch-update-display ()
    (when (mode-active-p (current-buffer) 'isearch-mode)
      (isearch-update-minibuffer))
    (isearch-update-buffer (current-point)))
  
  (defun isearch-update-minibuffer ()
    (message-without-log "~A~A" *isearch-prompt* *isearch-string*))
  
negative.code:     (when str
        (setq *isearch-string* str)
        (isearch-update-display))))
  
  (defun isearch-add-char (c)
    (setq *isearch-string*
  