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

From: Jim Porter <[email-masked]>
Date: Sun, 8 Sep 2024 17:59:49 -0700

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'...