Subject: Persistent Highlighting Issue with query-replace using "act-and-show" Option

From: Gabriele Nicolardi <[email-masked]>
Date: Sat, 8 Jun 2024 09:29:41 +0200

Hi,
I’ve encountered a potential bug in Emacs when using the |query-replace| 
(via |perform-replace|) functions. When performing text replacements 
across a buffer and choosing to replace but not immediately move the 
point (using the |,| |act-and-show| option), the function does replace 
the text as expected but fails to update the highlighting to the region 
containing the replacement.

*Steps to Reproduce:*

 1.

    Open a buffer with the following content:

    |String to be replaced. Another string. String to be replaced.
    Another string. End |

 2.

    Run the following command:

    |(query-replace "String to be replaced." "Replacement." nil
    (point-min) (point-max)) |

 3.

    When prompted to replace a match, use the |,| (|act-and-show|)
    option to replace the text but pause moving to the next match.

*Expected Behavior:*
After a replacement is made and before moving to the next match, the 
highlighted region of the replaced text should be “updated” to fit the 
replaced text.

*Actual Behavior:*
The highlighting remains on the matched region. This issue can be 
visually confirmed in the following animation:
View Animation on Imgur <https://imgur.com/a/BxVwVff>

*Visual Evidence:*

  * Highlight *before* using |act-and-show| (match):

  * Highlight *after* using |act-and-show| while paused (replacement):

As demonstrated, the highlighted region post-replacement does not 
correspond to any current match, which is misleading and might affect 
further editing decisions.

Best regards,

Gabriele Nicolardi

​