On Feb 17, 1:05am, Teto wrote:
}
} I would like to display the prompt as soon as I know if the folder is
} a git repo or not so that I can enter commands in the prompt. I would
} like zsh to retrieve that info (number of commtis ahead of upstream
} etc...) in background and update my prompt when the information
} becomes available.
}
} has anyone some code for that, I couldn't find anything ?
Hmm. Something like this:
autoload -Uz vcs_info
vcs_update_info () {
eval $(read -rE -u$1) # Receive and run typeset
zle -F $1 # Remove the handler
exec {1}>&- # Close the descriptor
zle reset-prompt
}
zle -N vcs_update_info
chpwd() {
if zle -l vcs_update_info
then
typeset -g vcs_info_msg_0_= vcs_info_fd=
fi
}
precmd() {
if zle -l vcs_update_info
then
# NO_monitor / disown is to silence background job notices
setopt localoptions NO_monitor
coproc {
sleep 1 # Assure disown runs first
vcs_info # Populate vcs_info_msg_0_
typeset -p vcs_info_msg_0_ # Send typeset to parent
}
disown %${(k)^jobtexts[(R)*vcs_info*]}
exec {vcs_info_fd}<&p # Get descriptor for handler
zle -F -w $vcs_info_fd vcs_update_info
fi
}
Then set up your prompts to include $vcs_info_msg_0_ as you normally
would.
Aside to zsh-workers: It's generally a good thing that the coproc
mechanism now uses the job tables, etc., but it would be nice if it
could be made to shut up about the jobs starting/finishing without
having to disable the monitor and notify options entirely.