@@ -133,6 +133,7 @@ MODEL is the LLM model used."
133133 (overlay-put ov 'eca-rewrite--id id)
134134 (overlay-put ov 'eca-rewrite--original-text text)
135135 (overlay-put ov 'eca-rewrite--new-text nil )
136+ (overlay-put ov 'eca-rewrite--new-text-acc " " )
136137 (overlay-put ov 'eca-rewrite--temp-buffer (generate-new-buffer " *eca-rewrite*" ))
137138 (overlay-put ov 'eca-rewrite--path path)
138139 (overlay-put ov 'eca-rewrite--prompt prompt)
@@ -287,7 +288,7 @@ MODEL is the model used."
287288 (pcase eca-rewrite-diff-tool
288289 ('simple-diff (eca-rewrite--simple-diff ov))
289290 ('ediff (eca-rewrite--ediff ov))
290- (_ (user-error (format " Unknown diff tool for `eca-rewrite-diff-tool' : %s " eca-rewrite-diff-tool)))))
291+ (_ (user-error (concat " Unknown diff tool: " eca-rewrite-diff-tool)))))
291292
292293(defun eca-rewrite--retry (ov session )
293294 " Retry rewrite overlay OV for SESSION."
@@ -346,25 +347,27 @@ PATH is the optional file path."
346347
347348(defun eca-rewrite--add-text (ov text )
348349 " Add TEXT as the rewritten content to overlay OV.
349- This updates the overlay's associated temporary buffer with the new text,
350- sets overlay properties, and ensures display reflects the latest content."
351- (let ((ov-buf (overlay-buffer ov))
352- (temp-buf (overlay-get ov 'eca-rewrite--temp-buffer )))
350+ This replaces the overlay preview entirely with the accumulated new text,
351+ so shorter rewrites don't leave leftover original text in the overlay."
352+ (let* ((ov-buf (overlay-buffer ov))
353+ (temp-buf (overlay-get ov 'eca-rewrite--temp-buffer ))
354+ (mode (and ov-buf (buffer-local-value 'major-mode ov-buf)))
355+ (acc (concat (overlay-get ov 'eca-rewrite--new-text-acc ) text)))
356+ (overlay-put ov 'eca-rewrite--new-text-acc acc)
353357 (with-current-buffer temp-buf
354- (let ((inhibit-modification-hooks nil )
355- (inhibit-read-only t ))
356- (when (= 0 (buffer-size ))
357- (buffer-disable-undo )
358- (insert-buffer-substring ov-buf (overlay-start ov) (overlay-end ov))
359- (delay-mode-hooks (funcall (buffer-local-value 'major-mode ov-buf)))
360- (add-text-properties (point-min ) (point-max ) '(face shadow font-lock-face shadow ))
361- (goto-char (point-min )))
362- (insert text)
363- (unless (eobp )
364- (ignore-errors (delete-char (length text))))
358+ (let ((inhibit-read-only t )
359+ (inhibit-modification-hooks t ))
360+ (erase-buffer )
361+ (insert acc)
362+ (when mode
363+ (delay-mode-hooks (funcall mode)))
365364 (font-lock-ensure ))
366- (overlay-put ov 'eca-rewrite--new-text (buffer-string ))
367- (overlay-put ov 'display (buffer-string )))))
365+ (let ((plain (buffer-substring-no-properties (point-min ) (point-max )))
366+ (propertized (buffer-substring (point-min ) (point-max ))))
367+ (overlay-put ov 'eca-rewrite--new-text plain)
368+ ; ; Display only the rewritten content; the overlay spans the entire
369+ ; ; original region, so any leftover original text is fully hidden.
370+ (overlay-put ov 'display propertized)))))
368371
369372; ; Public
370373
0 commit comments