From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 1044 invoked by alias); 21 Jan 2016 13:51:25 -0000 Mailing-List: contact zsh-workers-help@zsh.org; run by ezmlm Precedence: bulk X-No-Archive: yes List-Id: Zsh Workers List List-Post: List-Help: X-Seq: 37718 Received: (qmail 27363 invoked from network); 21 Jan 2016 13:51:24 -0000 X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on f.primenet.com.au X-Spam-Level: X-Spam-Status: No, score=0.6 required=5.0 tests=BAYES_00,TO_NO_BRKTS_PCNT autolearn=no autolearn_force=no version=3.4.0 Date: Thu, 21 Jan 2016 14:51:20 +0100 From: Vincent Lefevre To: zsh-workers@zsh.org Subject: Re: prompt update and TRAPCHLD Message-ID: <20160121135120.GC21104@cventin.lip.ens-lyon.fr> Mail-Followup-To: zsh-workers@zsh.org References: <20160114171631.GC12351@cventin.lip.ens-lyon.fr> <160114185941.ZM18307@torch.brasslantern.com> MIME-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: <160114185941.ZM18307@torch.brasslantern.com> X-Mailer-Info: https://www.vinc17.net/mutt/ User-Agent: Mutt/1.5.24-6551-vl-r83103 (2016-01-05) On 2016-01-14 18:59:41 -0800, Bart Schaefer wrote: > The right thing is to explicitly tell ZLE to update the prompt: > > TRAPCHLD() { > psvar[1]=$RANDOM > [[ -o zle ]] && zle reset-prompt > } There's something wrong with it: cventin:~> where TRAPCHLD <14:00:55 TRAPCHLD () { [[ -o zle ]] && zle reset-prompt } cventin:~> echo & <14:00:59 [1] 23998 [1] + done echo TRAPCHLD:zle: widgets can only be called when ZLE is active > Or perhaps your complaint is that the TRAP* function should run sooner? I think I was surprised when doing some tests. I thought that there was some race condition in my code because the TRAPCHLD was run too soon, but that's the opposite! So, the problem is something else. I've now a better view of what happens. I have something like: updprompt() { local njobs=$#jobstates echo "--> $njobs" > /dev/tty print -nP "\e]2;${njobs}\x07" > /dev/tty echo "--> $njobs" > /dev/tty } (the "echo ..." are mainly added for the test). precmd() { updprompt } TRAPCHLD() { if [[ -o interactive && -n $TTY ]] then updprompt; fi } When I type "echo &", in the command line, I generally get: cventin:~> echo & <14:45:58 [1] 29151 --> 1 --> 1 [1] + done echo --> 0 --> 0 with "0" in the terminal window title, but I sometimes get: cventin:~> echo & <14:45:59 [1] 29153 --> 1 [1] + done echo --> 0 --> 0 --> 1 with "1" in the terminal window title. Now, I don't understand how this is possible if TRAPCHLD is run after the prompt is redrawn, i.e. after updprompt has completed in precmd! -- Vincent Lefèvre - Web: 100% accessible validated (X)HTML - Blog: Work: CR INRIA - computer arithmetic / AriC project (LIP, ENS-Lyon)