[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
bug#71819: Incorrect substitution when undo replacing regexps
From: |
Juri Linkov |
Subject: |
bug#71819: Incorrect substitution when undo replacing regexps |
Date: |
Sun, 30 Jun 2024 19:25:11 +0300 |
User-agent: |
Gnus/5.13 (Gnus v5.13) Emacs/31.0.50 (x86_64-pc-linux-gnu) |
>> I encountered a bug when replacing regular expressions.
>> If you [u]ndo a previous change during the replacement process, subsequent
>> changes to the \2 substitution
>> will use the old undone result.
>>
>> Text:
>> ---
>> Aaaaa. Bbbb.
>> Ccccc. Dddd.
>> Eeeee. Ffff.
>> Ggggg. Hhhh.
>> ---
>> Input regexp: \([.]\) \([A-Z]\)
>> Output regexp: \1 \2
>> Bug:
>> 1. Copy the text above to the buffer.
>> 2. Enter the regular expressions to the interactive regexp replacement
>> [C-M-%].
>> 3. Click [y] twice until the Ffff is highlighted.
>> 4. Cancel the previous replacement via [u].
>> 5. Continue replacing [y] until the end.
>> 6. Notice that all sentences except the first and second now begin with an
>> incorrect letter D, which is not
>> implied by the entered regexp, it should be F and H, as if it had been
>> replaced, but without being undoed in
>> the middle of the process.
>> Output:
>> ---
>> Aaaaa. Bbbb.
>> Ccccc. Dddd.
>> Eeeee. Dfff.
>> Ggggg. Dhhh.
>> ---
>
> This is a regression between Emacs 26 and Emacs 27, perhaps as a side
> effect of fixing bug#36328. Juri, could you please take a look?
This is caused by the commit 30c4f35a6fc8 that introduced these lines:
(when regexp-flag
(setq next-replacement (nth 4 elt)))
Maybe Tino knows how to fix this (Cc'ed).