[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
bug#34214: 25.3; minibuffer function help in lisp modes changes match-da
Miguel V. S. Frasson
bug#34214: 25.3; minibuffer function help in lisp modes changes match-data
Thu, 13 Aug 2020 14:14:05 -0300
The "documented" behavior is in Elisp
Reference, but not in doc-strings of functions that rely on match data.
So they are not so easily spotted by non-experienced users.
bug teached me a lesson, because it took me a lot of time to realize how
volatile match-data is, changed even by a helper mode like eldoc.
it is so easy to avoid interference into user experience in this case,
adding convenience, just by saving match data inside eldoc...
a helper mode be able to "confuse" non-experienced users because it could rely on
"documented" behavior? If so, why does Emacs have disabled commands, if
they are also documented?
tags 34214 + notabug
Philipp Stephani <email@example.com> writes:
>> Programming an Emacs lisp program that uses match-data, debugging pieces
>> by hand, I realized that managing matchs was a nightmare. At first I
>> thought that navigation commands like C-a or C-M-f were messing
>> match-data (as one could think they use searching). It could be. But
>> for sure, that very handy help line that shows function arguments are
>> messing match data, making difficult to program Emacs lisp.
>> What I expect:
>> No unnecessary side-effects like change match-data should happen while
>> simply navigating through code. Lisp modes should protect searches on
>> background with save-match-data, because it makes a nightmare to
>> evaluate code by hand.
> Any function is allowed to change the match data, see
> "Notice that all functions are allowed to overwrite the match data
> unless they're explicitly documented not to do so.".
> In general you almost always want to immediately bind the match
> results to variables, like so:
> (when (string-match "f" "foo")
> (let ((match (match-string 0 "foo")))
> Evaluating the entire 'when' form will then work as intended.
Agreed, I don't think there's a bug here. This is just how this works,
and is documented to work.
Any other opinions?