From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 29616 invoked from network); 18 Sep 2008 12:17:03 -0000 X-Spam-Checker-Version: SpamAssassin 3.2.5 (2008-06-10) on f.primenet.com.au X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.2.5 Received: from news.dotsrc.org (HELO a.mx.sunsite.dk) (130.225.247.88) by ns1.primenet.com.au with SMTP; 18 Sep 2008 12:17:03 -0000 Received-SPF: none (ns1.primenet.com.au: domain at sunsite.dk does not designate permitted sender hosts) Received: (qmail 69673 invoked from network); 18 Sep 2008 12:16:57 -0000 Received: from sunsite.dk (130.225.247.90) by a.mx.sunsite.dk with SMTP; 18 Sep 2008 12:16:57 -0000 Received: (qmail 19892 invoked by alias); 18 Sep 2008 12:16:49 -0000 Mailing-List: contact zsh-workers-help@sunsite.dk; run by ezmlm Precedence: bulk X-No-Archive: yes X-Seq: 25684 Received: (qmail 19875 invoked from network); 18 Sep 2008 12:16:48 -0000 Received: from bifrost.dotsrc.org (130.225.254.106) by sunsite.dk with SMTP; 18 Sep 2008 12:16:48 -0000 Received: from cluster-d.mailcontrol.com (unknown [217.69.20.190]) by bifrost.dotsrc.org (Postfix) with ESMTPS id AE0F280308BA for ; Thu, 18 Sep 2008 14:16:13 +0200 (CEST) Received: from cameurexb01.EUROPE.ROOT.PRI ([193.128.72.68]) by rly12d.srv.mailcontrol.com (MailControl) with ESMTP id m8ICFAwS014258 for ; Thu, 18 Sep 2008 13:15:45 +0100 Received: from news01 ([10.103.143.38]) by cameurexb01.EUROPE.ROOT.PRI with Microsoft SMTPSVC(6.0.3790.3959); Thu, 18 Sep 2008 13:13:25 +0100 Date: Thu, 18 Sep 2008 13:13:20 +0100 From: Peter Stephenson To: "Zsh hackers list" Subject: Re: PATCH: source file info from PS4 Message-ID: <20080918131320.2d7f88f4@news01> In-Reply-To: <6cd6de210809170939p968d36bufda419592a10cb45@mail.gmail.com> References: <6005.1221576641@csr.com> <6cd6de210809170939p968d36bufda419592a10cb45@mail.gmail.com> Organization: CSR X-Mailer: Claws Mail 3.5.0 (GTK+ 2.12.8; i386-redhat-linux-gnu) Mime-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit X-OriginalArrivalTime: 18 Sep 2008 12:13:25.0639 (UTC) FILETIME=[F3AF2170:01C91987] X-Scanned-By: MailControl A-08-50-14 (www.mailcontrol.com) on 10.68.0.122 X-Virus-Scanned: ClamAV 0.92.1/8278/Thu Sep 18 13:35:40 2008 on bifrost X-Virus-Status: Clean On Wed, 17 Sep 2008 12:39:36 -0400 "Rocky Bernstein" wrote: > On Tue, Sep 16, 2008 at 10:50 AM, Peter Stephenson wrote: > > > Now we have logic for finding the source file and corresponding line > > number of executed code, this adds the prompt escapes %x and %I which > > are like %N and %i but for the file where the code was defined. > > Looks like this has problems when used inside trap DEBUG. What's happening here is that the current shell logic doesn't update line numbers when inside a trap, even inside nested functions. The idea is that you're interested in the line number of what triggered the trap; this is particularly true of a DEBUG trap where you might want to examine LINENO to see what's going on in the code you're debugging, and you're much less likely to be interested in the line number inside the trap itself. So the obvious fix is to make the prompt code I added take account of this. Another possibility would be to make traps respect the EVALLINENO option, so that you would get the local line numbers. However, I think that's less useful. It's possible the same problem affects some of the other new features. In particular I think funcstack line number info for eval commands inside traps is going to get thoroughly confused. I think the simplest fix would be not to add funcstack info for eval in this case; this is sort of plausible since it's like the case where eval isn't keep track of its own line numbers, where we don't add funcstack info, and we don't add funcstack info for a trap which is like an eval without its own line number. Otherwise it's not currently obvious to me what the fix would be. It might be a good idea to add special variables ZSH_SOURCE_LINENO and ZSH_SOURCE_FILE as more readable alternatives to ${(%):-%I} and ${(%):-%x}. Index: Src/prompt.c =================================================================== RCS file: /cvsroot/zsh/zsh/Src/prompt.c,v retrieving revision 1.54 diff -u -r1.54 prompt.c --- Src/prompt.c 16 Sep 2008 15:07:16 -0000 1.54 +++ Src/prompt.c 18 Sep 2008 11:55:04 -0000 @@ -726,7 +726,8 @@ stradd(Rstring); break; case 'I': - if (funcstack && funcstack->tp != FS_SOURCE) { + if (funcstack && funcstack->tp != FS_SOURCE && + (!intrap || trapisfunc)) { /* * We're in a function or an eval with * EVALLINENO. Calculate the line number in @@ -749,7 +750,8 @@ bp += strlen(bp); break; case 'x': - if (funcstack && funcstack->tp != FS_SOURCE) + if (funcstack && funcstack->tp != FS_SOURCE && + (!intrap || trapisfunc)) promptpath(funcstack->filename ? funcstack->filename : "", arg, 0); else -- Peter Stephenson Software Engineer CSR PLC, Churchill House, Cambridge Business Park, Cowley Road Cambridge, CB4 0WZ, UK Tel: +44 (0)1223 692070