Mercurial > dotfiles
view .shell.d/99.prompt.zsh @ 380:0ceb8554801e
zsh: make vcs info in prompt async
Roughly cribbed from [0], but I'm hoping to rework this soon to use
the zsh async library that shouldn't require a tempfile.
0: http://www.anishathalye.com/2015/02/07/an-asynchronous-shell-prompt/
author | Augie Fackler <raf@durin42.com> |
---|---|
date | Thu, 10 Mar 2016 18:56:28 -0500 |
parents | 02b635053e8f |
children | 491cd0cedeee |
line wrap: on
line source
# Magic prompt with colors # username in blue if not root # username in red if root - time in pink w/ # DANGER replacing the date # failed jobs print exit status in the RPS1 with yellow text setopt prompt_subst preexec () { currJob="`echo $3 | cut -d ' ' -f 1 | head -n 1`" if [[ "$TERM" == "screen" ]]; then hostUser="%10<...<%~%<<" print -Pn "\ek[$hostUser $currJob]\e\\" else if [[ "$FANCYTYPE" == "YES" ]]; then hostUser="%n@%m: %2~" print -Pn "\e]0;$hostUser [$currJob]\a" fi fi } PROMPT_TMP="${HOME}/.augie-zsh-tmp-prompt" function right_side_prompt() { branch=`vcs_current_branch` if [ $? = 0 ] ; then echo -n $branch > "$PROMPT_TMP" kill -s USR1 $$ fi } function TRAPUSR1() { rps_branch=$(cat "$PROMPT_TMP") zle && zle reset-prompt } function precmd () { rps_branch="$(date '+%D %H:%M')" right_side_prompt &! } if [ "x`whoami`" = "xroot" ] ; then PS1=$'%{\e];%n@%m: %2~ [zsh]\a%}[%m:%3~] %{\e[31m%}%n%{\e[0m%}%# ' if [[ "$TERM" == "screen" ]] ; then PS1=$'%{\ek[%2~ zsh]\e\\%}[%m:%3~] %{\e[31m%}%n%{\e[0m%}%# ' fi RPS1=$'%{\e[1;35m%}[DANGER %t]%{\e[0m%}%(?..%{\e[1;33m%} %?%{\e[1;0m%})' else PS1=$'%{\e];%n@%m: %2~ [zsh]\a%}[%m:%3~] %{\e[34m%}%n%{\e[0m%}%# ' if [[ "$TERM" == "screen" ]]; then PS1=$'%{\ek[%2~ zsh]\e\\%}[%m:%3~] %{\e[34m%}%n%{\e[0m%}%# ' fi RPS1=$'[$rps_branch]%(?..%{\e[1;33m%} %?%{\e[0m%})' fi export FANCYTYPE="NO" for ok in rxvt rxvt-unicode xterm xterm-256color xterm-color screen ; do if [ "$TERM" = "$ok" ] ; then export FANCYTYPE="YES" fi done if [ $FANCYTYPE = "NO" ] ; then prompt='[%m:%3~] %n%# ' RPS1=$'[%W %t]' fi if [[ $TERM == "dumb" ]]; then # in emacs # for tramp to not hang, need the following. cf: # http://www.emacswiki.org/emacs/TrampMode unsetopt zle unsetopt prompt_cr unsetopt prompt_subst unfunction precmd unfunction preexec fi #nonfancy no-frills prompt - disabled (same as the "non-fancy" one above) #prompt='[%m:%3~] %n%# ' #RPS1=$'[%W %t]'