diff --git a/bash/ansi_colors b/bash/ansi_colors deleted file mode 100644 index b5de7de..0000000 --- a/bash/ansi_colors +++ /dev/null @@ -1,66 +0,0 @@ -# defaults -local Z="\[\033[0m\]" # reset (zero) all attributes -local N="\[\033[0;39m\]" # reset fg to default (none) -local BGN="\[\033[0;49m\]" # reset bg to default (none) - -# normal colors -local K="\[\033[30m\]" # black -local R="\[\033[31m\]" # red -local G="\[\033[32m\]" # green -local Y="\[\033[33m\]" # yellow -local B="\[\033[34m\]" # blue -local M="\[\033[35m\]" # magenta -local C="\[\033[36m\]" # cyan -local W="\[\033[37m\]" # white - -# bright/bold colors -local BK="\[\033[1;30m\]" # black -local BR="\[\033[1;31m\]" # red -local BG="\[\033[1;32m\]" # greed -local BY="\[\033[1;33m\]" # yellow -local BB="\[\033[1;34m\]" # blue -local BM="\[\033[1;35m\]" # magenta -local BC="\[\033[1;36m\]" # cyan -local BW="\[\033[1;37m\]" # white - -# normal background colors -local BGK="\[\033[40m\]" # black -local BGR="\[\033[41m\]" # red -local BGG="\[\033[42m\]" # green -local BGY="\[\033[43m\]" # yellow -local BGB="\[\033[44m\]" # blue -local BGM="\[\033[45m\]" # magenta -local BGC="\[\033[46m\]" # cyan -local BGW="\[\033[47m\]" # white - -# transform color variables, if asked -for var in $color_vars; do - case "${!var}" in - "black") declare $var="$K";; - "red") declare $var="$R";; - "green") declare $var="$G";; - "yellow") declare $var="$Y";; - "blue") declare $var="$B";; - "magenta") declare $var="$M";; - "cyan") declare $var="$C";; - "white") declare $var="$W";; - "default") declare $var="$N";; - esac -done - -# transform background color variables, if asked -for var in $bg_color_vars; do - case "${!var}" in - "black") declare $var="$BGK";; - "red") declare $var="$BGR";; - "green") declare $var="$BGG";; - "yellow") declare $var="$BGY";; - "blue") declare $var="$BGB";; - "magenta") declare $var="$BGM";; - "cyan") declare $var="$BGC";; - "white") declare $var="$BGW";; - "default") declare $var="$BGN";; - esac -done - -# vim: ft=sh diff --git a/bash/colors b/bash/colors new file mode 100644 index 0000000..51328ba --- /dev/null +++ b/bash/colors @@ -0,0 +1,115 @@ +ansi_sgr_index() { + case "$1" in + none) return 00;; + bold) return 01;; + faint) return 02;; + standout) return 03;; + underline) return 04;; + blink) return 05;; + #fast-blink) return 06;; + reverse) return 07;; + conceal) return 08;; + #strikethrough) return 09;; + + #font-default) return 10;; + #font-first) return 11;; + #font-second) return 12;; + #font-third) return 13;; + #font-fourth) return 14;; + #font-fifth) return 15;; + #font-sixth) return 16;; + #font-seventh) return 17;; + #font-eighth) return 18;; + #font-ninth) return 19;; + + #gothic) return 20;; + #double-underline) return 21;; + normal) return 22;; + no-standout) return 23;; + no-underline) return 24;; + no-blink) return 25;; + #proportional) return 26;; + no-reverse) return 27;; + no-conceal) return 28;; + #no-strikethrough) return 29;; + + black) return 30;; + red) return 31;; + green) return 32;; + yellow) return 33;; + blue) return 34;; + magenta) return 35;; + cyan) return 36;; + white) return 37;; + #iso-8316-6) return 38;; + default) return 39;; + + fg-black) return 30;; + fg-red) return 31;; + fg-green) return 32;; + fg-yellow) return 33;; + fg-blue) return 34;; + fg-magenta) return 35;; + fg-cyan) return 36;; + fg-white) return 37;; + #fg-iso-8316-6) return 38;; + fg-default) return 39;; + + bg-black) return 40;; + bg-red) return 41;; + bg-green) return 42;; + bg-yellow) return 43;; + bg-blue) return 44;; + bg-magenta) return 45;; + bg-cyan) return 46;; + bg-white) return 47;; + #bg-iso-8316-6) return 48;; + bg-default) return 49;; + + #no-proportional) return 50;; + #border-rectangle) return 51;; + #border-circle) return 52;; + #overline) return 53;; + #no-border) return 54;; + #no-overline) return 55;; + #through 59 reserved) return 56;; + + #underline-or-right) return 60;; + #double-underline-or-right) return 61;; + #overline-or-left) return 62;; + #double-overline-or-left) return 63;; + #stress) return 64;; + #no-ideogram-marking) return 65;; + + *) return 255;; + esac +} + +ansi_csi_l="\033[" +ansi_csi_sgr_r="m" + +color=(); +fg=(); +fg_bold=(); +fg_no_bold=(); +bg=(); +bg_bold=(); +bg_no_bold=(); + +for v in {30..39}; do + fg[$v]="${ansi_csi_l}${v}${ansi_csi_sgr_r}" + ansi_sgr_index 'bold' + fg_bold[$v]="${ansi_csi_l}${?};${v}${ansi_csi_sgr_r}" + ansi_sgr_index 'normal' + fg_no_bold[$v]="${ansi_csi_l}${?};${v}${ansi_csi_sgr_r}" +done + +for v in {40..49}; do + bg[$v]="${ansi_csi_l}${v}${ansi_csi_sgr_r}" + ansi_sgr_index 'bold' + bg_bold[$v]="${ansi_csi_l}${?};${v}${ansi_csi_sgr_r}" + ansi_sgr_index 'normal' + bg_no_bold[$v]="${ansi_csi_l}${?};${v}${ansi_csi_sgr_r}" +done + +# vim: ft=sh diff --git a/bash/prompt b/bash/prompt index 2d528bb..cdc26af 100644 --- a/bash/prompt +++ b/bash/prompt @@ -3,18 +3,18 @@ source "$DOTFILES_BASH_DIR/prompt_segments" source "$DOTFILES_SHELL_DIR/prompt_vcs" prompt_host() { - local bg='black' - local fg='white' + local host_bg='black' + local host_fg='white' if [[ $UID -eq 0 ]]; then - bg='red' + host_bg='red' fi if [[ -n $SSH_CLIENT ]]; then - fg='yellow' + host_fg='yellow' fi - prompt_segment $bg $fg '\u@\h' + prompt_segment $host_bg $host_fg '\u@\h' } prompt_dir() { diff --git a/bash/prompt_segments b/bash/prompt_segments index 36ac88e..04830f4 100644 --- a/bash/prompt_segments +++ b/bash/prompt_segments @@ -5,10 +5,10 @@ SEGMENT_DEFAULT_FG='default' CURRENT_BG='NONE' lprompt_segment() { - local bg fg fake_bg + local real_bg real_fg fake_bg - [[ -n $1 ]] && bg="$1" || bg='default' - [[ -n $2 ]] && fg="$2" || fg='default' + [[ -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 @@ -16,16 +16,18 @@ lprompt_segment() { fake_bg=$CURRENT_BG fi - # evaluate color vars - local color_vars="fg fake_bg" - local bg_color_vars="bg" - source "$DOTFILES_BASH_DIR/ansi_colors" - + # 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 " \[$bg$fake_bg\]$SEGMENT_SEPARATOR\[$fg\] " + echo -n " \[$real_bg$fake_bg\]$SEGMENT_SEPARATOR\[$real_fg\] " else - echo -n "\[$bg$fg\] " + echo -n "\[$real_bg$real_fg\] " fi CURRENT_BG=$1 @@ -36,28 +38,31 @@ lprompt_segment() { # End the prompt, closing any open segments prompt_end() { - local $bg; - local $fg; + local $real_bg; + local $real_fg; local $fake_bg; - bg="default" - fg="default" + real_bg="default" + real_fg="default" if [[ -n $CURRENT_BG ]]; then fake_bg=$CURRENT_BG fi - # evaluate color vars - local color_vars="fg fake_bg" - local bg_color_vars="bg" - source "$DOTFILES_BASH_DIR/ansi_colors" + # 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 " \[$bg$fake_bg\]$SEGMENT_SEPARATOR" + echo -n " \[$real_bg$fake_bg\]$SEGMENT_SEPARATOR" else - echo -n "\[$bg\]" + echo -n "\[$real_bg\]" fi - echo -n "\[$fg\]" + echo -n "\[$real_fg\]" CURRENT_BG='' } diff --git a/bash/rc b/bash/rc index 518cd5d..8d79e4e 100644 --- a/bash/rc +++ b/bash/rc @@ -4,6 +4,7 @@ source $DOTFILES_SHELL_DIR/aliases source $DOTFILES_BASH_DIR/ext +source $DOTFILES_BASH_DIR/colors source $DOTFILES_BASH_DIR/prompt source $DOTFILES_BASH_DIR/history source $DOTFILES_BASH_DIR/term_title