all messages for Emacs-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
* Macro aborts even though regexp instance exists
@ 2012-10-22 20:39 Swami Tota Ram Shankar
  0 siblings, 0 replies; 4+ messages in thread
From: Swami Tota Ram Shankar @ 2012-10-22 20:39 UTC (permalink / raw)
  To: help-gnu-emacs

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.




^ permalink raw reply	[flat|nested] 4+ messages in thread

* Macro aborts even though regexp instance exists
@ 2012-10-22 20:39 Swami Tota Ram Shankar
  2012-10-24 15:23 ` Stefan Monnier
  2012-10-24 15:23 ` Stefan Monnier
  0 siblings, 2 replies; 4+ messages in thread
From: Swami Tota Ram Shankar @ 2012-10-22 20:39 UTC (permalink / raw)
  To: bug-gnu-emacs

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.




^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: Macro aborts even though regexp instance exists
  2012-10-22 20:39 Swami Tota Ram Shankar
@ 2012-10-24 15:23 ` Stefan Monnier
  2012-10-24 15:23 ` Stefan Monnier
  1 sibling, 0 replies; 4+ messages in thread
From: Stefan Monnier @ 2012-10-24 15:23 UTC (permalink / raw)
  To: bug-gnu-emacs

> 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.
[...]
> to the original position when OR is entered and proceeds forward from
> there, but perhaps, the macro aborts.

Indeed, that's a problem: the macro aborts because macros abort not only
on error but also when `ding' is called.

> Any solutions?

You can work around the problem in this particular case as follows:
first do C-s M-r ONE\|TWO RET, and then record your macro using C-u C-s
C-s to recall the last regexp used, so it gets inserted "all at once"
without going through the problematic intermediate state (which is not
when it gets to \ but rather when it gets to ON or ONE and it doesn't
match anything).  Maybe isearch-search shouldn't call ding when the
match fails and we're matching regexps (and the match failed because of
a new char being added to search regexp, rather than because the user
hit C-s to jump to the next match).

Please M-x report-emacs-bug,


        Stefan


^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: Macro aborts even though regexp instance exists
  2012-10-22 20:39 Swami Tota Ram Shankar
  2012-10-24 15:23 ` Stefan Monnier
@ 2012-10-24 15:23 ` Stefan Monnier
  1 sibling, 0 replies; 4+ messages in thread
From: Stefan Monnier @ 2012-10-24 15:23 UTC (permalink / raw)
  To: help-gnu-emacs

> 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.
[...]
> to the original position when OR is entered and proceeds forward from
> there, but perhaps, the macro aborts.

Indeed, that's a problem: the macro aborts because macros abort not only
on error but also when `ding' is called.

> Any solutions?

You can work around the problem in this particular case as follows:
first do C-s M-r ONE\|TWO RET, and then record your macro using C-u C-s
C-s to recall the last regexp used, so it gets inserted "all at once"
without going through the problematic intermediate state (which is not
when it gets to \ but rather when it gets to ON or ONE and it doesn't
match anything).  Maybe isearch-search shouldn't call ding when the
match fails and we're matching regexps (and the match failed because of
a new char being added to search regexp, rather than because the user
hit C-s to jump to the next match).

Please M-x report-emacs-bug,


        Stefan


^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2012-10-24 15:23 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-10-22 20:39 Macro aborts even though regexp instance exists Swami Tota Ram Shankar
  -- strict thread matches above, loose matches on Subject: below --
2012-10-22 20:39 Swami Tota Ram Shankar
2012-10-24 15:23 ` Stefan Monnier
2012-10-24 15:23 ` Stefan Monnier

Code repositories for project(s) associated with this external index

	https://git.savannah.gnu.org/cgit/emacs.git
	https://git.savannah.gnu.org/cgit/emacs/org-mode.git

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.