summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarc Cornellà <marc.cornella@live.com>2019-02-06 11:55:38 +0100
committerMarc Cornellà <marc.cornella@live.com>2019-02-06 11:57:28 +0100
commit052493b1ba71fe7e13554e57571fe4c793d53c3c (patch)
tree264a84c5c1a36acd1b30b8d5f5d0a8456d26f697
parent851899e59ea71ce8fbae738ec7aeb7a967585977 (diff)
downloadzsh-052493b1ba71fe7e13554e57571fe4c793d53c3c.tar.gz
zsh-052493b1ba71fe7e13554e57571fe4c793d53c3c.tar.bz2
zsh-052493b1ba71fe7e13554e57571fe4c793d53c3c.zip
z: refresh $RANDOM's value outside subshell
This change references `$RANDOM` outside the subshell to refresh it for the next subshell invocation. Otherwise, subsequent runs of the function get the same value and, if run simultaneously, they may clobber each others' temp .z files. This is due to how zsh distributes RANDOM values when running inside a subshell: subshells that reference RANDOM will result in identical pseudo-random values unless the value of RANDOM is referenced or seeded in the parent shell in between subshell invocations See: http://zsh.sourceforge.net/Doc/Release/Parameters.html#index-RANDOM
-rw-r--r--plugins/z/z.sh6
1 files changed, 6 insertions, 0 deletions
diff --git a/plugins/z/z.sh b/plugins/z/z.sh
index 4fc75dc6a..5fe6d5266 100644
--- a/plugins/z/z.sh
+++ b/plugins/z/z.sh
@@ -222,10 +222,16 @@ if type compctl >/dev/null 2>&1; then
if [ "$_Z_NO_RESOLVE_SYMLINKS" ]; then
_z_precmd() {
(_z --add "${PWD:a}" &)
+ # Reference $RANDOM to refresh its value inside the subshell
+ # Otherwise, multiple runs get the same value
+ : $RANDOM
}
else
_z_precmd() {
(_z --add "${PWD:A}" &)
+ # Reference $RANDOM to refresh its value inside the subshell
+ # Otherwise, multiple runs get the same value
+ : $RANDOM
}
fi
[[ -n "${precmd_functions[(r)_z_precmd]}" ]] || {