GNU bug report logs - #54733
Match again in perform-replace

Previous Next

Package: emacs;

Reported by: Juri Linkov <juri <at> jurta.org>

Date: Tue, 5 Apr 2022 17:41:02 UTC

Severity: normal

Full log


Message #23 received at 54733 <at> debbugs.gnu.org (full text, mbox):

From: Juri Linkov <juri <at> jurta.org>
To: Dmitry Gutov <dgutov <at> yandex.ru>
Cc: 54733 <at> debbugs.gnu.org
Subject: Re: bug#54733: Match again in perform-replace
Date: Wed, 22 Jun 2022 10:36:39 +0300
>>> +				(replace-search search-string limit
>>> +						regexp-flag delimited-flag
>>> +						case-fold-search backward))
>>
>> I don't know this code too well, but perhaps SEARCH_STRING here should be
>> anchored with something like "\\=" at the beginning?
>>
>> Otherwise the search can succeed here even if the next match is not
>> here. Not sure how important that is, though.
>
> I'm afraid that prepending "\\=" might break a complex regexp somehow.

Another variant without modifying the original regexp is still to call
replace-search, but afterwards check if it stayed at the old position
with something like

  (let ((old-pos (point)))
    (and (replace-search ...)
	 (eq (match-beginning 0) old-pos)))

Less efficient, but looking-at is a real problem since it's incompatible
with search functions.  This is one of the problems faced in bug#14013
where isearch matches `C-M-r ^' outside of positions handled by the
search function because `isearch-search-and-update' uses a hack with
looking-at.  This is a long-standing flaw in isearch that needs to be fixed.
Any uses of looking-at in search/replace should be substituted
with an equivalent code that relies on the search function.




This bug report was last modified 2 years and 351 days ago.

Previous Next


GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997,2003 nCipher Corporation Ltd, 1994-97 Ian Jackson.