Subject: Re: prompt update and TRAPCHLD
From: Bart Schaefer <[email-masked]>
To: [email-masked]
Date: Thu, 14 Jan 2016 18:59:41 -0800
List-Id: Zsh Workers List <zsh-workers.zsh.org>

On Jan 14,  6:16pm, Vincent Lefevre wrote:
} Subject: prompt update and TRAPCHLD
}
} There seems to be a bug in the prompt update. The change of psvar[1]
} in TRAPCHLD is not taken into account for the next prompt display,
} but for the following one.

That's because the prompt is being redrawn before TRAPCHILD executes.
If you change it to:

TRAPCHLD() { psvar[1]=$RANDOM; print "set $psvar[1]" }

You can see where the print output appears relative to the prompt:

18:50:09-% sleep 7 & sleep 5 & sleep 9 &
[1] 18276
[2] 18277
[3] 18278
18:50:11-% 
[2]  - done       sleep 5
18:50:16-% set 23539

[1]  - done       sleep 7
18:50:18-23539% set 5119

[3]  + done       sleep 9
18:50:20-5119% set 17622

The right thing is to explicitly tell ZLE to update the prompt:

TRAPCHLD() {
  psvar[1]=$RANDOM
  [[ -o zle ]] && zle reset-prompt
}  

Or perhaps your complaint is that the TRAP* function should run sooner?