mirror of
https://github.com/lloeki/dotfiles.git
synced 2025-12-06 07:24:39 +01:00
bash: emulate zsh 'colors' behaviour (+compat 3.x)
This commit is contained in:
parent
c29d55e131
commit
ca5b9f0754
5 changed files with 147 additions and 92 deletions
|
|
@ -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
|
|
||||||
115
bash/colors
Normal file
115
bash/colors
Normal file
|
|
@ -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
|
||||||
10
bash/prompt
10
bash/prompt
|
|
@ -3,18 +3,18 @@ source "$DOTFILES_BASH_DIR/prompt_segments"
|
||||||
source "$DOTFILES_SHELL_DIR/prompt_vcs"
|
source "$DOTFILES_SHELL_DIR/prompt_vcs"
|
||||||
|
|
||||||
prompt_host() {
|
prompt_host() {
|
||||||
local bg='black'
|
local host_bg='black'
|
||||||
local fg='white'
|
local host_fg='white'
|
||||||
|
|
||||||
if [[ $UID -eq 0 ]]; then
|
if [[ $UID -eq 0 ]]; then
|
||||||
bg='red'
|
host_bg='red'
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [[ -n $SSH_CLIENT ]]; then
|
if [[ -n $SSH_CLIENT ]]; then
|
||||||
fg='yellow'
|
host_fg='yellow'
|
||||||
fi
|
fi
|
||||||
|
|
||||||
prompt_segment $bg $fg '\u@\h'
|
prompt_segment $host_bg $host_fg '\u@\h'
|
||||||
}
|
}
|
||||||
|
|
||||||
prompt_dir() {
|
prompt_dir() {
|
||||||
|
|
|
||||||
|
|
@ -5,10 +5,10 @@ SEGMENT_DEFAULT_FG='default'
|
||||||
CURRENT_BG='NONE'
|
CURRENT_BG='NONE'
|
||||||
|
|
||||||
lprompt_segment() {
|
lprompt_segment() {
|
||||||
local bg fg fake_bg
|
local real_bg real_fg fake_bg
|
||||||
|
|
||||||
[[ -n $1 ]] && bg="$1" || bg='default'
|
[[ -n $1 ]] && real_bg="$1" || real_bg='default'
|
||||||
[[ -n $2 ]] && fg="$2" || fg='default'
|
[[ -n $2 ]] && real_fg="$2" || real_fg='default'
|
||||||
|
|
||||||
if [[ $CURRENT_BG == 'default' ]]; then
|
if [[ $CURRENT_BG == 'default' ]]; then
|
||||||
fake_bg=$SEGMENT_DEFAULT_BG
|
fake_bg=$SEGMENT_DEFAULT_BG
|
||||||
|
|
@ -16,16 +16,18 @@ lprompt_segment() {
|
||||||
fake_bg=$CURRENT_BG
|
fake_bg=$CURRENT_BG
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# evaluate color vars
|
# resolve colors
|
||||||
local color_vars="fg fake_bg"
|
ansi_sgr_index "bg-$real_bg"
|
||||||
local bg_color_vars="bg"
|
real_bg="${bg[$?]}"
|
||||||
source "$DOTFILES_BASH_DIR/ansi_colors"
|
ansi_sgr_index $fake_bg
|
||||||
|
fake_bg="${fg[$?]}"
|
||||||
|
ansi_sgr_index $real_fg
|
||||||
|
real_fg="${fg[$?]}"
|
||||||
|
|
||||||
if [[ $CURRENT_BG != 'NONE' && $1 != $CURRENT_BG ]]; then
|
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
|
else
|
||||||
echo -n "\[$bg$fg\] "
|
echo -n "\[$real_bg$real_fg\] "
|
||||||
fi
|
fi
|
||||||
|
|
||||||
CURRENT_BG=$1
|
CURRENT_BG=$1
|
||||||
|
|
@ -36,28 +38,31 @@ lprompt_segment() {
|
||||||
|
|
||||||
# End the prompt, closing any open segments
|
# End the prompt, closing any open segments
|
||||||
prompt_end() {
|
prompt_end() {
|
||||||
local $bg;
|
local $real_bg;
|
||||||
local $fg;
|
local $real_fg;
|
||||||
local $fake_bg;
|
local $fake_bg;
|
||||||
|
|
||||||
bg="default"
|
real_bg="default"
|
||||||
fg="default"
|
real_fg="default"
|
||||||
|
|
||||||
if [[ -n $CURRENT_BG ]]; then
|
if [[ -n $CURRENT_BG ]]; then
|
||||||
fake_bg=$CURRENT_BG
|
fake_bg=$CURRENT_BG
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# evaluate color vars
|
# resolve colors
|
||||||
local color_vars="fg fake_bg"
|
ansi_sgr_index "bg-$real_bg"
|
||||||
local bg_color_vars="bg"
|
real_bg="${bg[$?]}"
|
||||||
source "$DOTFILES_BASH_DIR/ansi_colors"
|
ansi_sgr_index $fake_bg
|
||||||
|
fake_bg="${fg[$?]}"
|
||||||
|
ansi_sgr_index $real_fg
|
||||||
|
real_fg="${fg[$?]}"
|
||||||
|
|
||||||
if [[ -n $CURRENT_BG ]]; then
|
if [[ -n $CURRENT_BG ]]; then
|
||||||
echo -n " \[$bg$fake_bg\]$SEGMENT_SEPARATOR"
|
echo -n " \[$real_bg$fake_bg\]$SEGMENT_SEPARATOR"
|
||||||
else
|
else
|
||||||
echo -n "\[$bg\]"
|
echo -n "\[$real_bg\]"
|
||||||
fi
|
fi
|
||||||
echo -n "\[$fg\]"
|
echo -n "\[$real_fg\]"
|
||||||
CURRENT_BG=''
|
CURRENT_BG=''
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
1
bash/rc
1
bash/rc
|
|
@ -4,6 +4,7 @@
|
||||||
|
|
||||||
source $DOTFILES_SHELL_DIR/aliases
|
source $DOTFILES_SHELL_DIR/aliases
|
||||||
source $DOTFILES_BASH_DIR/ext
|
source $DOTFILES_BASH_DIR/ext
|
||||||
|
source $DOTFILES_BASH_DIR/colors
|
||||||
source $DOTFILES_BASH_DIR/prompt
|
source $DOTFILES_BASH_DIR/prompt
|
||||||
source $DOTFILES_BASH_DIR/history
|
source $DOTFILES_BASH_DIR/history
|
||||||
source $DOTFILES_BASH_DIR/term_title
|
source $DOTFILES_BASH_DIR/term_title
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue