#Based on themes/jonathan.mjh.zsh-theme. function theme_precmd { local TERMWIDTH (( TERMWIDTH = ${COLUMNS} - 1 )) ### # Truncate the path if it's too long. PR_FILLBAR="" PR_PWDLEN="" local promptsize=${#${(%):-%n@:%l()()}} local pwdsize=${#${(%):-%~%m}} if [[ "$promptsize + $pwdsize" -gt $TERMWIDTH ]]; then ((PR_PWDLEN=$TERMWIDTH - $promptsize)) else PR_FILLBAR="\${(l.(($TERMWIDTH - ($promptsize + $pwdsize)))..${PR_HBAR}.)}" fi } setopt extended_glob theme_preexec () { if [[ "$TERM" == "screen" ]]; then local CMD=${1[(wr)^(*=*|sudo|-*)]} echo -n "\ek$CMD\e\\" fi } setprompt () { ### # Need this so the prompt will work. setopt prompt_subst ### # See if we can use colors. autoload colors zsh/terminfo if [[ "$terminfo[colors]" -ge 8 ]]; then colors fi for color in RED GREEN YELLOW BLUE MAGENTA CYAN WHITE GREY; do eval PR_$color='%{$terminfo[bold]$fg[${(L)color}]%}' eval PR_LIGHT_$color='%{$fg[${(L)color}]%}' (( count = $count + 1 )) done PR_NO_COLOUR="%{$terminfo[sgr0]%}" ### # Modify Git prompt ZSH_THEME_GIT_PROMPT_PREFIX=" on %{$fg[green]%}" ZSH_THEME_GIT_PROMPT_SUFFIX="%{$reset_color%}" ZSH_THEME_GIT_PROMPT_DIRTY="" ZSH_THEME_GIT_PROMPT_CLEAN="" ZSH_THEME_GIT_PROMPT_ADDED="%{$fg[green]%} A" ZSH_THEME_GIT_PROMPT_MODIFIED="%{$fg[blue]%} M" ZSH_THEME_GIT_PROMPT_DELETED="%{$fg[red]%} D" ZSH_THEME_GIT_PROMPT_RENAMED="%{$fg[magenta]%} R" ZSH_THEME_GIT_PROMPT_UNMERGED="%{$fg[yellow]%} !M" ZSH_THEME_GIT_PROMPT_UNTRACKED="%{$fg[white]%} !T" #Shameless git stuff: ZSH_THEME_HG_PROMPT_PREFIX=$ZSH_THEME_GIT_PROMPT_PREFIX ZSH_THEME_HG_PROMPT_SUFFIX=$ZSH_THEME_GIT_PROMPT_SUFFIX ZSH_THEME_HG_PROMPT_SHA_BEFORE=$ZSH_THEME_GIT_PROMPT_SHA_BEFORE ZSH_THEME_HG_PROMPT_SHA_AFTER=$ZSH_THEME_GIT_PROMPT_SHA_AFTER ZSH_THEME_HG_PROMPT_UNTRACKED=$ZSH_THEME_GIT_PROMPT_UNTRACKED ZSH_THEME_HG_PROMPT_ADDED=$ZSH_THEME_GIT_PROMPT_ADDED ZSH_THEME_HG_PROMPT_MODIFIED=$ZSH_THEME_GIT_PROMPT_MODIFIED ZSH_THEME_HG_PROMPT_RENAMED=$ZSH_THEME_GIT_PROMPT_RENAMED ZSH_THEME_HG_PROMPT_DELETED=$ZSH_THEME_GIT_PROMPT_DELETED ZSH_THEME_HG_PROMPT_UNMERGED=$ZSH_THEME_GIT_PROMPT_UNMERGED ### # See if we can use extended characters to look nicer. typeset -A altchar set -A altchar ${(s..)terminfo[acsc]} PR_SET_CHARSET="%{$terminfo[enacs]%}" PR_SHIFT_IN="%{$terminfo[smacs]%}" PR_SHIFT_OUT="%{$terminfo[rmacs]%}" PR_HBAR=${altchar[q]:--} PR_ULCORNER=${altchar[l]:--} PR_LLCORNER=${altchar[m]:--} PR_LRCORNER=${altchar[j]:--} PR_URCORNER=${altchar[k]:--} ### # Decide if we need to set titlebar text. case $TERM in xterm*) PR_TITLEBAR=$'%{\e]0;%(!.-=*[ROOT]*=- | .)%n@%m:%~ | ${COLUMNS}x${LINES} | %y\a%}' ;; screen) PR_TITLEBAR=$'%{\e_screen \005 (\005t) | %(!.-=[ROOT]=- | .)%n@%m:%~ | ${COLUMNS}x${LINES} | %y\e\\%}' ;; *) PR_TITLEBAR='' ;; esac ### # Decide whether to set a screen title if [[ "$TERM" == "screen" ]]; then PR_STITLE=$'%{\ekzsh\e\\%}' else PR_STITLE='' fi ### # Finally, the prompt. LB=\[ RB=\] PROMPT='$PR_SET_CHARSET$PR_STITLE${(e)PR_TITLEBAR}\ $PR_GREY$LB\ $PR_YELLOW%(!.%SROOT%s.%n)$PR_GREY@$PR_LIGHT_MAGENTA%m$PR_GREY:$PR_GREEN%$PR_PWDLEN<...<%~%<<\ $PR_GREY$RB$PR_SHIFT_IN${(e)PR_FILLBAR}$PR_HBAR$PR_SHIFT_OUT\ $PR_GREY$LB$PR_GREEN%l\ $PR_GREY$RB$PR_CYAN\ $PR_LIGHT_GREY$LB\ $PR_LIGHT_CYAN%D{%H:%M:%S}\ %{$reset_color%}`hg_prompt_info``git_prompt_info``git_prompt_status``hg_prompt_status`$PR_GREY$RB $PR_GREEN%#$PR_NO_COLOUR ' # display exitcode on the right when >0 return_code="%{$fg[red]%}%? ↵ %{$reset_color%}" RPROMPT=' $return_code$PR_GREY\ {$PR_YELLOW%D{%a %e %b}$PR_NO_COLOUR' PS2='$PR_CYAN$PR_SHIFT_IN$PR_HBAR$PR_SHIFT_OUT\ $PR_BLUE$PR_SHIFT_IN$PR_HBAR$PR_SHIFT_OUT(\ $PR_LIGHT_GREEN%_$PR_BLUE)$PR_SHIFT_IN$PR_HBAR$PR_SHIFT_OUT\ $PR_CYAN$PR_SHIFT_IN$PR_HBAR$PR_SHIFT_OUT$PR_NO_COLOUR ' } setprompt autoload -U add-zsh-hook add-zsh-hook precmd theme_precmd add-zsh-hook preexec theme_preexec