help-gnu-emacs
[Top][All Lists]
Advanced

[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


reply via email to

[Prev in Thread] Current Thread [Next in Thread]