Zsh Mailing List Archive
Messages sorted by:
Reverse Date,
Date,
Thread,
Author
PATCH: select behaving strange in 3.1.4 (2)
- X-seq: zsh-workers 4390
 
- From: Peter Stephenson <pws@xxxxxxxxxxxxxxxxx>
 
- To: zsh-workers@xxxxxxxxxxxxxxx
 
- Subject: PATCH: select behaving strange in 3.1.4 (2)
 
- Date: Fri, 18 Sep 1998 17:14:49 +0200
 
- In-reply-to: "Goran Larsson"'s message of "Wed, 16 Sep 1998 00:14:47 DFT."             <m0zJ3N1-000X3MC@xxxxxxxxxxxxxxxxx> 
 
Goran Larsson wrote:
> $ cat select_weirdness
> #!/usr/local/bin/zsh
> 
> PROMPT3="What now?"
> select junk in A B C; do
>         echo $junk
> done
> $ 
...
(for ^D problem, see my previous patch)
...
> Even more weird is that by entering this another anomaly shows up:
> 
> $ . ./select_weirdness
> 1) A  2) B  3) C
> What now?^C                                        <-- enter control-C
> $ 
> $ . ./select_weirdness
> 1) A  2) B  3) C
> What now?2                                         <-- enter 2
> B
> What now?^D                                        <-- enter control-D
> zsh: do you wish to see all 1120 possibilities? n  <-- enter n
> What now?^C                                        <-- enter control-C
> 
> At this point control-C has stopped working.
The cause, you'll be interested to hear, is that at this point
the variable simple_pline is now zero so that the signal handler won't
set errflag.
simple_pline is supposed to test whether the shell is running with a
series of pipelines in front (i.e. as `cmd | builtin_commands'), in
which case the interrupt behaviour changes.  Unfortunately, I think
only Sven ever understood this stuff.  The best I can think of doing
is restoring simple_pline to its original value instead of
automatically zeroing it when the pipeline in question finishes, and
that's what this patch does.  It seems to work, but I wouldn't be too
surprised if there were side effects.
*** Src/exec.c.ctrlc	Sun May 31 12:28:46 1998
--- Src/exec.c	Fri Sep 18 17:02:09 1998
***************
*** 710,715 ****
--- 710,716 ----
  {
      int ipipe[2], opipe[2];
      int pj, newjob;
+     int old_simple_pline = simple_pline;
      static int lastwj;
  
      if (!l->left)
***************
*** 874,880 ****
  	    lastval = !lastval;
      }
      if (!pline_level)
! 	simple_pline = 0;
      return lastval;
  }
  
--- 875,881 ----
  	    lastval = !lastval;
      }
      if (!pline_level)
! 	simple_pline = old_simple_pline;
      return lastval;
  }
  
-- 
Peter Stephenson <pws@xxxxxxxxxxxxxxxxx>       Tel: +39 050 844536
WWW:  http://www.ifh.de/~pws/
Gruppo Teorico, Dipartimento di Fisica
Piazza Torricelli 2, 56100 Pisa, Italy
Messages sorted by:
Reverse Date,
Date,
Thread,
Author