11 changed files with 127 additions and 270 deletions
-
33bin/miaou-bash
-
42bin/pkg_add
-
2etc/bash.bashrc
-
153lib/ansi.bash
-
11lib/initiate.bash
-
2lib/uninstall.bash
-
0test/attic/associative.bash
-
0test/attic/tee_last_line.bash
-
70test/miaou-bash.test.bash
-
80test/stub/ansi_error.bash
-
2tools/idem_apt_install
@ -1,120 +1,35 @@ |
|||
# CONSTANTS |
|||
|
|||
# MARGIN=0 |
|||
PADDING=0 |
|||
ANSI_RESET='\e[0m' |
|||
|
|||
BLOCK_CONTINUATION_COL= |
|||
BLOCK_CONTINUATION_SYMBOL=╦ |
|||
|
|||
declare -A STYLE_VARIANTS |
|||
STYLE_VARIANTS[BOLD]='\e[1m' |
|||
STYLE_VARIANTS[ITALIC]='\e[3m' |
|||
STYLE_VARIANTS[UNDERLINE]='\e[4m' |
|||
STYLE_VARIANTS[STRIKETHROUGH]='\e[9m' |
|||
|
|||
declare -A FG_COLORS |
|||
FG_COLORS[BLACK]='\e[30m' |
|||
FG_COLORS[RED]='\e[31m' |
|||
FG_COLORS[GREEN]='\e[32m' |
|||
FG_COLORS[YELLOW]='\e[33m' |
|||
FG_COLORS[BLUE]='\e[34m' |
|||
FG_COLORS[PURPLE]='\e[35m' |
|||
FG_COLORS[CYAN]='\e[36m' |
|||
FG_COLORS[WHITE]='\e[37m' |
|||
FG_COLORS[GRAY]='\e[90m' |
|||
FG_COLORS[MAGENTA]='\e[95m' |
|||
|
|||
declare -A BG_COLORS |
|||
BG_COLORS[BLACK]='\e[40m' |
|||
BG_COLORS[RED]='\e[41m' |
|||
BG_COLORS[GREEN]='\e[42m' |
|||
BG_COLORS[YELLOW]='\e[43m' |
|||
BG_COLORS[BLUE]='\e[44m' |
|||
BG_COLORS[PURPLE]='\e[45m' |
|||
BG_COLORS[CYAN]='\e[46m' |
|||
BG_COLORS[WHITE]='\e[47m' |
|||
# BG_COLORS["GRAY"]='\e[90m' |
|||
# BG_COLORS["MAGENTA"]='\e[95m' |
|||
|
|||
# FUNCTIONS |
|||
|
|||
function ansi_reset { |
|||
PADDING=0 |
|||
unset PADDING_LEFT PADDING_RIGHT BG FG |
|||
} |
|||
|
|||
function ansi_length { |
|||
local clean_text |
|||
clean_text=$(echo "$1" | sed 's/\x1B\[[0-9;]*m//g') |
|||
echo "${#clean_text}" |
|||
} |
|||
|
|||
function style_padding { |
|||
local left right |
|||
local padding_left=${PADDING_LEFT:-$PADDING} |
|||
local padding_right=${PADDING_RIGHT:-$PADDING} |
|||
|
|||
left=$(for _ in $(seq 1 "${padding_left}"); do builtin echo -n ' '; done) |
|||
style_ansi "$left" |
|||
|
|||
style_ansi "$1" |
|||
|
|||
right=$(for _ in $(seq 1 "${padding_right}"); do builtin echo -n ' '; done) |
|||
style_ansi "$right" |
|||
} |
|||
|
|||
function _style_fg { |
|||
[[ -n $1 ]] && echo "${FG_COLORS[$1]}" || true |
|||
} |
|||
|
|||
function _style_variant { |
|||
[[ -n $1 ]] && echo "${STYLE_VARIANTS[$1]}" || true |
|||
} |
|||
|
|||
function _style_bg { |
|||
if [[ -n "$1" ]]; then |
|||
[[ -v BG_COLORS[$1] ]] && echo "${BG_COLORS[$1]}" || >&2 echo "unknown BG value: $1" |
|||
fi |
|||
} |
|||
|
|||
function style_ansi { |
|||
local fg bg variant |
|||
fg=$(_style_fg "${FG:-}") && [[ -n $fg ]] && builtin echo -en "$fg" |
|||
bg=$(_style_bg "${BG:-}") && [[ -n $bg ]] && builtin echo -en "$bg" |
|||
variant=$(_style_variant "${STYLE:-}") && [[ -n $variant ]] && builtin echo -en "$variant" |
|||
builtin echo -en "$1" |
|||
[[ -n $fg || -n $bg || -n $variant ]] && builtin echo -en "$ANSI_RESET" |
|||
true |
|||
} |
|||
|
|||
function style_block { |
|||
local content length top bottom i |
|||
|
|||
content=$(style_padding "$1") |
|||
length=$(ansi_length "$content") |
|||
|
|||
top=$( |
|||
builtin echo -n "╔" |
|||
for _ in $(seq 1 "${length}"); do builtin echo -n '═'; done |
|||
builtin echo "╗" |
|||
) |
|||
style_ansi "${top}" && builtin echo |
|||
|
|||
style_ansi "║" |
|||
style_ansi "${content}" |
|||
style_ansi "║" && builtin echo |
|||
|
|||
bottom=$( |
|||
builtin echo -n "╚" |
|||
for i in $(seq 1 "${length}"); do |
|||
if [[ $i == "$BLOCK_CONTINUATION_COL" ]]; then |
|||
builtin echo -n "$BLOCK_CONTINUATION_SYMBOL" |
|||
else |
|||
builtin echo -n '═' |
|||
# TODO: build a global `declare -A __MIAOU_LOADED_LIBRARIES` |
|||
|
|||
if [[ ! -v ANSI ]]; then |
|||
declare -A ANSI |
|||
ANSI[RESET]=0 |
|||
|
|||
ANSI[STYLE_ITALIC]=3 |
|||
ANSI[STYLE_BOLD]=1 |
|||
ANSI[STYLE_UNDERLINE]=4 |
|||
ANSI[STYLE_STRIKETHROUGH]=9 |
|||
|
|||
ANSI[FG_BLACK]=30 |
|||
ANSI[FG_RED]=31 |
|||
ANSI[FG_GREEN]=32 |
|||
ANSI[FG_YELLOW]=33 |
|||
ANSI[FG_BLUE]=34 |
|||
ANSI[FG_PURPLE]=35 |
|||
ANSI[FG_CYAN]=36 |
|||
ANSI[FG_WHITE]=37 |
|||
ANSI[FG_GRAY]=90 |
|||
ANSI[FG_LIGHTBLUE]=94 |
|||
ANSI[FG_MAGENTA]=95 |
|||
|
|||
ANSI[BG_BLACK]=40 |
|||
ANSI[BG_RED]=41 |
|||
ANSI[BG_GREEN]=42 |
|||
ANSI[BG_YELLOW]=43 |
|||
ANSI[BG_BLUE]=44 |
|||
ANSI[BG_PURPLE]=45 |
|||
ANSI[BG_CYAN]=46 |
|||
ANSI[BG_WHITE]=47 |
|||
ANSI[BG_GRAY]=90 |
|||
ANSI[BG_MAGENTA]=95 |
|||
readonly ANSI |
|||
fi |
|||
done |
|||
builtin echo "╝" |
|||
) |
|||
style_ansi "${bottom}" && builtin echo |
|||
} |
|||
@ -1,80 +0,0 @@ |
|||
#!/usr/bin/env miaou-bash |
|||
|
|||
code=118 |
|||
failure_type='SUBSHELL TERM' |
|||
failure_payload='blabla' |
|||
stack_sources=('file.bash' './lib/utility.bash' 'file.bash') |
|||
stack_lines=(18 56 12) |
|||
stack_functions=('f2' 'f1' '<main>') |
|||
|
|||
# function ansi_block_continuation { |
|||
# tput sc |
|||
# tput cuu 1 |
|||
# BG=RED FG=BLACK style_ansi "\t╦" |
|||
# tput rc |
|||
# FG=RED style_ansi "\t║\n" |
|||
# } |
|||
|
|||
function ansi_block_error { |
|||
BG=RED |
|||
FG=BLACK |
|||
PADDING=2 |
|||
|
|||
local content detail exit_code |
|||
|
|||
content=$(style_ansi "$1") |
|||
content=$(style_padding "$content") |
|||
detail=$(BG=BLACK style_padding "$2") |
|||
exit_code=$(FG=CYAN style_ansi " $3") |
|||
BLOCK_CONTINUATION_COL=5 style_block "$content\t$detail$exit_code" |
|||
ansi_reset |
|||
FG=RED style_ansi " ║" |
|||
echo |
|||
} |
|||
|
|||
function ansi_traces { |
|||
local optional location sources lines functions |
|||
declare -n sources=$1 |
|||
declare -n lines=$2 |
|||
declare -n functions=$3 |
|||
optional=false |
|||
for i in "${!sources[@]}"; do |
|||
FG=RED style_ansi " ╟─⟶" |
|||
location=$(printf "%40s" "${sources[$i]}:${lines[$i]}") |
|||
is_true "$optional" && |
|||
location=$(FG=GRAY STYLE=ITALIC style_ansi "$location") || |
|||
location=$(STYLE=ITALIC style_ansi "$location") |
|||
builtin echo "${location} ${functions[$i]}" |
|||
optional=true |
|||
done |
|||
} |
|||
|
|||
function show_error { |
|||
>&2 printf '\r' |
|||
>&2 ansi_block_error "$failure_type" "$failure_payload" "$code" |
|||
>&2 ansi_traces stack_sources stack_lines stack_functions |
|||
} |
|||
|
|||
function echo_return { |
|||
echo TEXT && |
|||
return 11 |
|||
return 1 |
|||
} |
|||
|
|||
declare -F style_ansi >/dev/null || source "$MIAOU_BASH_DIR/lib/ansi.bash" |
|||
|
|||
echo START |
|||
|
|||
if echo_return; then |
|||
echo YOUPI |
|||
else |
|||
echo ERROR |
|||
fi |
|||
|
|||
if echo_return; then |
|||
echo YOUPI |
|||
else |
|||
echo ERROR |
|||
fi |
|||
# echo -n "standard flow:" && show_error |
|||
# echo -n "starting subshell: $(show_error)" |
|||
Write
Preview
Loading…
Cancel
Save
Reference in new issue