[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Macro aborts even though regexp instance exists - Serious Bug
From: |
Dan Espen |
Subject: |
Re: Macro aborts even though regexp instance exists - Serious Bug |
Date: |
Fri, 30 Nov 2012 17:55:13 -0500 |
User-agent: |
Gnus/5.13 (Gnus v5.13) Emacs/23.3 (gnu/linux) |
dkcombs@panix.com (David Combs) writes:
> In article <mailman.11579.1351050855.855.help-gnu-emacs@gnu.org>,
> Kevin Rodgers <kevin.d.rodgers@gmail.com> wrote:
>>On 10/22/12 2:40 PM, Swami Tota Ram Shankar wrote:
>>> Hi emacs users,
>>>
>>> I write a simple macro which works, however, it fails in a particular
>>> case.
>>>
>>> C-s
>>> M-r
>>>
>>> to get into isearch-forward-regexp
>>>
>>> and give a regexp like
>>>
>>> ONE\|TWO
>>>
>>> It works for every TWO and ONE as long as there is a ONE ahead of TWO.
>>> In the last instance, no ONE exists after TWO and it fails.
>>>
>>> \|<=> OR or disjunction.
>>>
>>> Any solutions?
>>>
>>> This is such a fundamental issue that I think its a bug. When the C-s
>>> M-r is used outside the macro definition, the cursor gladly returns
>>> to the original position when OR is entered and proceeds forward from
>>> there, but perhaps, the macro aborts.
>>
>>It is not a bug: when ONE fails to match the buffer, C-s (which is designed
>>for interactive use, obviously) signals an error, which terminates the macro
>>execution.
>>
>>That's because there is no way for C-s to know that you _might_ type \|TWO
>>after ONE.
>>
>>So the solution is to make sure that the regexp is not complete after ONE:
>>C-s \(ONE\|TWO\)
>>
>>> I guess, this can lead to a lot of confusion and time wastage, if the
>>> user is unaware of this and most likely to neglect it because its
>>> contrary to normal usage.
>>
>>Yes, there is a lot of confusion and wasted time when a user is not aware
>>of how to use a program.
>>
>>> I include more newsgroups because of the seriousness of this bug.
>>
>>Whatever :-)
>
> (1) THANKS FOR THAT HINT/WARNING/INFO!
>
> (2) "when a user is not aware of how to use a program": I don't know
> that this thread really falls under that. Although your solution
> and especially the reason for it "obvious" -- but only once you've
> seen it. It's actually a little subtle.
>
> AND I believe it's so important (and easy to get wrong) that
> it should be added to the emacs manual (in macros) AND to
> any much-used cheat-sheets -- plus the wiki, of course.
>
> Perhaps you (as one of the real gurus around here) could write
> a paragraph and example and ask the developers to put it into
> the right places.
A keyboard macro is terminated by anything that rings the bell.
I can't seem to find that in the emacs help though.
I would have expected to see it in "^h k M-x (".
Also, my bell hasn't rung in a long time, looking around, I have the
built in speaker disabled. So:
(setq ring-bell-function (lambda ()
(play-sound-file "/home/dan/audio/tap2.au")))
--
Dan Espen