Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Macro aborts even though regexp instance exists - Serious Bug

11 views
Skip to first unread message

Swami Tota Ram Shankar

unread,
Oct 22, 2012, 4:40:42 PM10/22/12
to
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.

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.

I include more newsgroups because of the seriousness of this bug.

Kevin Rodgers

unread,
Oct 23, 2012, 11:54:19 PM10/23/12
to help-gn...@gnu.org
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 :-)

--
Kevin Rodgers
Denver, Colorado, USA


gnui...@hotmail.com

unread,
Oct 24, 2012, 10:55:46 PM10/24/12
to
thanks

David Combs

unread,
Nov 30, 2012, 4:57:50 PM11/30/12
to
In article <mailman.11579.1351050...@gnu.org>,
(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.

Thanks again for the pointer!

David

Dan Espen

unread,
Nov 30, 2012, 5:55:13 PM11/30/12
to
> (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

Doug Lewan

unread,
Dec 3, 2012, 9:33:14 AM12/3/12
to Dan Espen, help-gn...@gnu.org
There's also the variable `visible-bell' if ringing the bell isn't appropriate for you.

,Doug

Dan Espen

unread,
Dec 3, 2012, 11:22:06 AM12/3/12
to
Doug Lewan <do...@shubertticketing.com> writes:

>> -----Original Message-----
>> From: help-gnu-emacs-bounces+dougl=shuberttic...@gnu.org
>> [mailto:help-gnu-emacs-bounces+dougl=shuberttic...@gnu.org] On
>> Behalf Of Dan Espen
>> Sent: Friday, 2012 November 30 17:55
>> To: help-gn...@gnu.org
>> Subject: Re: Macro aborts even though regexp instance exists - Serious
>> Bug
>> ...
>> 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")))
>>
> There's also the variable `visible-bell' if ringing the bell isn't
> appropriate for you.

Yes. tried it. Even adjusting the colors, I find it too jarring.
A low volume tapping sound fills the bill for me.

I miss the XEmacs feature which had sounds for each error type:

(setq sound-alist
(append
'((default :sound hammer)
(undefined-key :sound drum)
(undefined-click :sound drum)
(command-error :sound bass)
(no-completion :sound drip)
(y-or-n-p :sound slap)
(yes-or-no-p :sound yeep)
(isearch-failed :sound drum :volume 70)
(isearch-quit :sound yeep)
(auto-save-error :sound whip :volume 75))
sound-alist)))

--
Dan Espen
0 new messages