# prompt segments for bash SEGMENT_DEFAULT_BG='default' SEGMENT_DEFAULT_FG='default' CURRENT_BG='NONE' lprompt_segment() { local real_bg real_fg fake_bg [[ -n $1 ]] && real_bg="$1" || real_bg='default' [[ -n $2 ]] && real_fg="$2" || real_fg='default' if [[ $CURRENT_BG == 'default' ]]; then fake_bg=$SEGMENT_DEFAULT_BG else fake_bg=$CURRENT_BG fi # resolve colors ansi_sgr_index "bg-$real_bg" real_bg="${bg[$?]}" ansi_sgr_index $fake_bg fake_bg="${fg[$?]}" ansi_sgr_index $real_fg real_fg="${fg[$?]}" if [[ $CURRENT_BG != 'NONE' && $1 != $CURRENT_BG ]]; then echo -n " \[$real_bg$fake_bg\]$SEGMENT_SEPARATOR\[$real_fg\] " else echo -n "\[$real_bg$real_fg\] " fi CURRENT_BG=$1 shift shift [[ -n "$*" ]] && echo -n "$*" } # End the prompt, closing any open segments prompt_end() { local $real_bg; local $real_fg; local $fake_bg; real_bg="default" real_fg="default" if [[ -n $CURRENT_BG ]]; then fake_bg=$CURRENT_BG fi # resolve colors ansi_sgr_index "bg-$real_bg" real_bg="${bg[$?]}" ansi_sgr_index $fake_bg fake_bg="${fg[$?]}" ansi_sgr_index $real_fg real_fg="${fg[$?]}" if [[ -n $CURRENT_BG ]]; then echo -n " \[$real_bg$fake_bg\]$SEGMENT_SEPARATOR" else echo -n "\[$real_bg\]" fi echo -n "\[$real_fg\]" CURRENT_BG='' } # vim: ft=bash