Subject: Re: bug#72952: 30.0.90; Want way to break out of Eshell for loop

From: Sean Whitton <[email-masked]>
Date: Thu, 12 Sep 2024 11:04:06 +0100

Hello,

On Sun 08 Sep 2024 at 05:59pm -07, Jim Porter wrote:

> On 9/2/2024 1:26 AM, Sean Whitton wrote:
>> X-debbugs-cc: [email-masked]
>> I am trying to run a series of tests like this:
>>      % for test in tests/tests/tagupl* { tests/using-intree $test }
>> I want the command to give up as soon as one of the tests fails.  But I
>> don't think there is any way to break out of the loop?  In POSIX sh, you
>> could use 'break'.
>
> I actually have a patch sitting in my pile of branches that does this, but it
> needs a fair bit more work to get right. The main thing it needs is to keep
> 'break' from bubbling up too far (e.g. if you run an Eshell script from inside
> a loop, 'break' at the top level of the script shouldn't break out of the
> parent loop).
>
> Another way to do something like this would be to embrace the Lispy-ness of
> Eshell and add a command-form for 'throw' and 'catch'. Something like:
>
>   catch my-tag {
>     for i in *.el {
>      do-stuff
>      if something-or-other { throw my-tag }
>     }
>   }
>
> Or even support both 'throw'/'catch' *and* 'break'...

Heh.  throw/catch seems like overkill to me but supporting both would be
cool!

-- 
Sean Whitton