zshrc.color() { local IFS=";" echo -n "\e[$*m" } zshrc.set_bullet() { zshrc.set_bullet.text_height() { local X=11 Y=1 i [ $zshrc_bullet_powerline ] && ((X++)) ((X+=${#zshrc_bullet})) for ((i = 0; i < ${#1}; i++)); [[ ${1:$i:1} == $'\n' ]] || (( ++X == COLUMNS )) && {X=0; ((Y++))} echo $Y } zshrc_bullet="$1" zshrc_bullet_attr="$(zshrc.color 48 5 $2 38 5 $3)" zshrc_bullet_powerline=1 local PL [ $zshrc_bullet_powerline ] && PL="%{$(zshrc.color 0 38 5 $2)%}" PS1="%{$(zshrc.color 48 5 $2 38 5 $3)%} $1 $PL%{$(zshrc.color)%} " preexec() { local SAVE=$'\e'7 RESTORE=$'\e'8 local UP=$'\e'"[$(zshrc.set_bullet.text_height $1)A" echo -n "$SAVE\r$UP" echo -n "${zshrc_bullet_attr}$(date +%H:%M:%S)" echo -n "$RESTORE\e[m" } } zshrc.set_bullet ♥ 111 33