modifs.mineures sans commentaires

This commit is contained in:
Jephté Clain 2024-02-10 23:35:15 +04:00
parent 4b60232dfb
commit 5988637a41
8 changed files with 493 additions and 350 deletions

81
bash/src/_output_color.sh Normal file
View File

@ -0,0 +1,81 @@
# -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
function __esection() {
local -a lines
local lsep prefix="$(__edate)${NULIB__TLEVEL}"
local length="${COLUMNS:-80}"
setx lsep=__complete "$prefix" "$length" -
tooenc "$COULEUR_BLEUE$lsep$COULEUR_NORMALE"
[ -n "$*" ] || return 0
length=$((length - 1))
setx -a lines=echo "$1"
for line in "${lines[@]}"; do
setx line=__complete "$prefix- $line" "$length"
tooenc "$COULEUR_BLEUE$line-$COULEUR_NORMALE"
done
tooenc "$COULEUR_BLEUE$lsep$COULEUR_NORMALE"
}
function __etitle() {
local -a lines; local maxlen=0
local prefix="$(__edate)${NULIB__TLEVEL}"
setx -a lines=echo "$1"
for line in "${lines[@]}"; do
[ ${#line} -gt $maxlen ] && maxlen=${#line}
tooenc "${prefix}${COULEUR_BLEUE}T $line$COULEUR_NORMALE"
done
maxlen=$((maxlen + 2))
tooenc "${prefix}${COULEUR_BLEUE}T$(__complete "" $maxlen -)${COULEUR_NORMALE}"
}
function __edesc() {
local -a lines
local prefix="$(__edate)${NULIB__TLEVEL}"
setx -a lines=echo "$1"
for line in "${lines[@]}"; do
tooenc "${prefix}${COULEUR_BLEUE}>${COULEUR_NORMALE} $line"
done
}
function __ebanner() {
local -a lines
local lsep prefix="$(__edate)${NULIB__TLEVEL}"
local length="${COLUMNS:-80}"
setx lsep=__complete "$prefix" "$length" =
tooenc "$COULEUR_ROUGE$lsep"
length=$((length - 1))
setx -a lines=echo "$1"
for line in "" "${lines[@]}" ""; do
setx line=__complete "$prefix= $line" "$length"
tooenc "$line="
done
tooenc "$lsep$COULEUR_NORMALE"
}
function __eimportant() { tooenc "$(__edate)${NULIB__TLEVEL}${COULEUR_ROUGE}!${COULEUR_NORMALE} $(__indent "$1" " ")"; }
function __eattention() { tooenc "$(__edate)${NULIB__TLEVEL}${COULEUR_JAUNE}*${COULEUR_NORMALE} $(__indent "$1" " ")"; }
function __eerror() { tooenc "$(__edate)${NULIB__TLEVEL}${COULEUR_ROUGE}E${COULEUR_NORMALE} $(__indent "$1" " ")"; }
function __ewarn() { tooenc "$(__edate)${NULIB__TLEVEL}${COULEUR_JAUNE}W${COULEUR_NORMALE} $(__indent "$1" " ")"; }
function __enote() { tooenc "$(__edate)${NULIB__TLEVEL}${COULEUR_VERTE}N${COULEUR_NORMALE} $(__indent "$1" " ")"; }
function __einfo() { tooenc "$(__edate)${NULIB__TLEVEL}${COULEUR_BLEUE}I${COULEUR_NORMALE} $(__indent "$1" " ")"; }
function __edebug() { tooenc "$(__edate)${NULIB__TLEVEL}${COULEUR_BLANCHE}D${COULEUR_NORMALE} $(__indent "$1" " ")"; }
function __estep() { tooenc "$(__edate)${NULIB__TLEVEL}${COULEUR_BLANCHE}.${COULEUR_NORMALE} $(__indent "$1" " ")"; }
function __estepe() { tooenc "$(__edate)${NULIB__TLEVEL}${COULEUR_ROUGE}.${COULEUR_NORMALE} $(__indent "$1" " ")"; }
function __estepw() { tooenc "$(__edate)${NULIB__TLEVEL}${COULEUR_JAUNE}.${COULEUR_NORMALE} $(__indent "$1" " ")"; }
function __estepn() { tooenc "$(__edate)${NULIB__TLEVEL}${COULEUR_VERTE}.${COULEUR_NORMALE} $(__indent "$1" " ")"; }
function __estepi() { tooenc "$(__edate)${NULIB__TLEVEL}${COULEUR_BLEUE}.${COULEUR_NORMALE} $(__indent "$1" " ")"; }
function __estep_() { tooenc_ "$(__edate)${NULIB__TLEVEL}${COULEUR_BLANCHE}.${COULEUR_NORMALE} $(__indent "$1" " ")"; }
function __estepe_() { tooenc_ "$(__edate)${NULIB__TLEVEL}${COULEUR_ROUGE}.${COULEUR_NORMALE} $(__indent "$1" " ")"; }
function __estepw_() { tooenc_ "$(__edate)${NULIB__TLEVEL}${COULEUR_JAUNE}.${COULEUR_NORMALE} $(__indent "$1" " ")"; }
function __estepn_() { tooenc_ "$(__edate)${NULIB__TLEVEL}${COULEUR_VERTE}.${COULEUR_NORMALE} $(__indent "$1" " ")"; }
function __estepi_() { tooenc_ "$(__edate)${NULIB__TLEVEL}${COULEUR_BLEUE}.${COULEUR_NORMALE} $(__indent "$1" " ")"; }
function __ebegin() { local p="." i=" "; tooenc_ "$(__edate)${NULIB__TLEVEL}${COULEUR_BLANCHE}.${COULEUR_NORMALE} $(__indent "$1" " "): "; }
function __edoto() { echo_ "."; }
function __edotw() { echo_ "${COULEUR_JAUNE}w${COULEUR_NORMALE}"; }
function __edotx() { echo_ "${COULEUR_ROUGE}x${COULEUR_NORMALE}"; }
function __edotp() { echo_ "${COULEUR_JAUNE}+${COULEUR_NORMALE}"; }
function __edotd() { tooenc "($1)"; }
function __eendo() { echo "${COULEUR_VERTE}[ok]${COULEUR_NORMALE}"; }
function __eendx() { echo "${COULEUR_ROUGE}[error]${COULEUR_NORMALE}"; }

View File

@ -0,0 +1,70 @@
# -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
function __esection() {
local -a lines
local lsep prefix="$(__edate)${NULIB__TLEVEL}"
local length="${COLUMNS:-80}"
setx lsep=__complete "$prefix" "$length" -
tooenc "$lsep"
[ -n "$*" ] || return 0
length=$((length - 1))
setx -a lines=echo "$1"
for line in "${lines[@]}"; do
setx line=__complete "$prefix- $line" "$length"
tooenc "$line-"
done
tooenc "$lsep"
}
function __etitle() {
local p="TITLE: " i=" "
tooenc "$(__edate)${NULIB__TLEVEL}${p}$(__indent "$1" "$i")"
}
function __edesc() {
local p="DESC: " i=" "
tooenc "$(__edate)${NULIB__TLEVEL}${p}$(__indent "$1" "$i")"
}
function __ebanner() {
local -a lines
local lsep prefix="$(__edate)${NULIB__TLEVEL}"
local length="${COLUMNS:-80}"
setx lsep=__complete "$prefix" "$length" =
tooenc "$lsep"
length=$((length - 1))
setx -a lines=echo "$1"
for line in "" "${lines[@]}" ""; do
setx line=__complete "$prefix= $line" "$length"
tooenc "$line="
done
tooenc "$lsep"
}
function __eimportant() { tooenc "$(__edate)${NULIB__TLEVEL}IMPORTANT! $(__indent "$1" " ")"; }
function __eattention() { tooenc "$(__edate)${NULIB__TLEVEL}ATTENTION! $(__indent "$1" " ")"; }
function __eerror() { tooenc "$(__edate)${NULIB__TLEVEL}ERROR: $(__indent "$1" " ")"; }
function __ewarn() { tooenc "$(__edate)${NULIB__TLEVEL}WARNING: $(__indent "$1" " ")"; }
function __enote() { tooenc "$(__edate)${NULIB__TLEVEL}NOTE: $(__indent "$1" " ")"; }
function __einfo() { tooenc "$(__edate)${NULIB__TLEVEL}INFO: $(__indent "$1" " ")"; }
function __edebug() { tooenc "$(__edate)${NULIB__TLEVEL}DEBUG: $(__indent "$1" " ")"; }
function __eecho() { tooenc "$(__edate)${NULIB__TLEVEL}$(__indent "$1")"; }
function __eecho_() { tooenc_ "$(__edate)${NULIB__TLEVEL}$(__indent "$1")"; }
function __estep() { tooenc "$(__edate)${NULIB__TLEVEL}. $(__indent "$1" " ")"; }
function __estepe() { tooenc "$(__edate)${NULIB__TLEVEL}.E $(__indent "$1" " ")"; }
function __estepw() { tooenc "$(__edate)${NULIB__TLEVEL}.W $(__indent "$1" " ")"; }
function __estepn() { tooenc "$(__edate)${NULIB__TLEVEL}.N $(__indent "$1" " ")"; }
function __estepi() { tooenc "$(__edate)${NULIB__TLEVEL}.I $(__indent "$1" " ")"; }
function __estep_() { tooenc_ "$(__edate)${NULIB__TLEVEL}. $(__indent "$1" " ")"; }
function __estepe_() { tooenc_ "$(__edate)${NULIB__TLEVEL}.E $(__indent "$1" " ")"; }
function __estepw_() { tooenc_ "$(__edate)${NULIB__TLEVEL}.W $(__indent "$1" " ")"; }
function __estepn_() { tooenc_ "$(__edate)${NULIB__TLEVEL}.N $(__indent "$1" " ")"; }
function __estepi_() { tooenc_ "$(__edate)${NULIB__TLEVEL}.I $(__indent "$1" " ")"; }
function __ebegin() { tooenc_ "$(__edate)${NULIB__TLEVEL}. $(__indent "$1" " "): "; }
function __edoto() { echo_ "."; }
function __edotw() { echo_ "w"; }
function __edotx() { echo_ "x"; }
function __edotp() { echo_ "+"; }
function __edotd() { tooenc "($1)"; }
function __eendo() { echo "[ok]"; }
function __eendx() { echo "[error]"; }

View File

@ -115,7 +115,7 @@ optdesc
: description de l'option. cette valeur est facultative. si la description : description de l'option. cette valeur est facultative. si la description
commence par ++, c'est une option avancée qui n'est pas affichée par défaut." commence par ++, c'est une option avancée qui n'est pas affichée par défaut."
function parse_args() { function parse_args() {
[ -z "$NULIB_NO_DISABLE_SET_X" ] && [[ $- == *x* ]] && { set +x; local NULIB_ARGS_SET_X=1; } eval "$NULIB__DISABLE_SET_X"
local __r= local __r=
local __DIE='[ -n "$NULIB_ARGS_ONERROR_RETURN" ] && return 1 || die' local __DIE='[ -n "$NULIB_ARGS_ONERROR_RETURN" ] && return 1 || die'
@ -139,7 +139,7 @@ function parse_args() {
__DEFS=("$@") __DEFS=("$@")
__parse_args || __r=1 __parse_args || __r=1
fi fi
[ -n "$NULIB_ARGS_SET_X" ] && set -x eval "$NULIB__ENABLE_SET_X"
if [ -n "$__r" ]; then if [ -n "$__r" ]; then
eval "$__DIE" eval "$__DIE"
fi fi

View File

@ -24,13 +24,9 @@ function uread() {
done done
} }
function is_interaction() { function set_interaction() { :;}
return 1 function is_interaction() { return 1; }
} function check_interaction() { return 0; }
function check_interaction() {
return 0
}
function get_interaction_option() { :;} function get_interaction_option() { :;}
function ask_yesno() { function ask_yesno() {

View File

@ -1,6 +1,7 @@
# -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8 # -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
##@cooked nocomments ##@cooked nocomments
module: base.output "Fonctions de base: affichage" module: base.output "Fonctions de base: affichage"
nulib__load: _output_vanilla
NULIB__TAB=$'\t' NULIB__TAB=$'\t'
NULIB__LATIN1=iso-8859-1 NULIB__LATIN1=iso-8859-1
@ -155,152 +156,154 @@ function elogto() {
export NULIB__ESTACK NULIB__TLEVEL export NULIB__ESTACK NULIB__TLEVEL
function __indent() { function __indent() {
# indenter les lignes de $1, sauf la première # indenter les lignes de $1, sauf la première
if [ "${1/ local -a lines; local line first=1
/}" != "$1" ]; then local indent="$NULIB__TLEVEL$2"
sed "2,\$s/^/${NULIB__TLEVEL}/g" <<<"$1" setx -a lines=echo "$1"
else for line in "${lines[@]}"; do
recho "$1" if [ -n "$first" ]; then
fi recho "$line"
} first=
# fonctions à surcharger pour modifier la façon dont les messages sont affichés else
function __eerror() { tooenc "$(__edate)${NULIB__TLEVEL}ERROR $(__indent "$1")"; } recho "$indent$line"
function __ewarn() { tooenc "$(__edate)${NULIB__TLEVEL}WARNING $(__indent "$1")"; }
function __enote() { tooenc "$(__edate)${NULIB__TLEVEL}NOTE $(__indent "$1")"; }
function __ebanner() {
local maxi="${COLUMNS:-80}"
local prefix="$(__edate)${NULIB__TLEVEL}" lsep line
local -a lines
lsep="$prefix"
while [ ${#lsep} -lt $maxi ]; do lsep="$lsep="; done
tooenc "$lsep"
maxi=$(($maxi - 1))
array_xsplitl lines "$1"
for line in "" "${lines[@]}" ""; do
line="$prefix= $line"
if [ ${#line} -le $maxi ]; then
while [ ${#line} -lt $maxi ]; do line="$line "; done
line="$line="
fi fi
tooenc "$line"
done done
tooenc "$lsep"
} }
function __eimportant() { tooenc "$(__edate)${NULIB__TLEVEL}IMPORTANT $(__indent "$1")"; }
function __eattention() { tooenc "$(__edate)${NULIB__TLEVEL}ATTENTION $(__indent "$1")"; }
function __einfo() { tooenc "$(__edate)${NULIB__TLEVEL}INFO $(__indent "$1")"; }
function __eecho() { tooenc "$(__edate)${NULIB__TLEVEL}$(__indent "$1")"; }
function __eecho_() { tooenc_ "$(__edate)${NULIB__TLEVEL}$(__indent "$1")"; }
function __edebug() { tooenc "$(__edate)${NULIB__TLEVEL}DEBUG $(__indent "$1")"; }
function __estep() { tooenc "$(__edate)${NULIB__TLEVEL}. $(__indent "$1")"; }
function __estepe() { tooenc "$(__edate)${NULIB__TLEVEL}.E $(__indent "$1")"; }
function __estepw() { tooenc "$(__edate)${NULIB__TLEVEL}.W $(__indent "$1")"; }
function __estepn() { tooenc "$(__edate)${NULIB__TLEVEL}.N $(__indent "$1")"; }
function __estepi() { tooenc "$(__edate)${NULIB__TLEVEL}.I $(__indent "$1")"; }
function __estep_() { tooenc_ "$(__edate)${NULIB__TLEVEL}. $(__indent "$1")"; }
function __estepe_() { tooenc_ "$(__edate)${NULIB__TLEVEL}.E $(__indent "$1")"; }
function __estepw_() { tooenc_ "$(__edate)${NULIB__TLEVEL}.W $(__indent "$1")"; }
function __estepn_() { tooenc_ "$(__edate)${NULIB__TLEVEL}.N $(__indent "$1")"; }
function __estepi_() { tooenc_ "$(__edate)${NULIB__TLEVEL}.I $(__indent "$1")"; }
function __esection() {
local maxi="${COLUMNS:-80}"
local prefix="$(__edate)${NULIB__TLEVEL}" lsep
lsep="$prefix" function __complete() {
while [ ${#lsep} -lt $maxi ]; do lsep="$lsep="; done # compléter $1 avec $3 jusqu'à obtenir une taille de $2 caractères
local columns="${COLUMNS:-80}"
tooenc "$lsep" local line="$1" maxi="${2:-$columns}" sep="${3:- }"
if [ -n "$*" ]; then while [ ${#line} -lt $maxi ]; do
tooenc "$prefix$*" line="$line$sep"
tooenc "$lsep" done
fi echo "$line"
} }
function __etitle() { tooenc "$(__edate)${NULIB__TLEVEL}=== $(__indent "$1")"; }
function __ebegin() { tooenc_ "$(__edate)${NULIB__TLEVEL}. $(__indent "$1"): "; }
function __edoto() { echo_ "."; }
function __edotw() { echo_ "w"; }
function __edotx() { echo_ "x"; }
function __edotp() { echo_ "+"; }
function __edotd() { tooenc "($1)"; }
function __eendo() { echo "[ok]"; }
function __eendx() { echo "[error]"; }
PRETTYOPTS=() PRETTYOPTS=()
function set_verbosity() { :;} function set_verbosity() { :;}
function set_interaction() { :;} function check_verbosity() { return 0; }
function show_error() {
# tester respectivement si on doit afficher les messages d'erreur,
# d'avertissement, d'information, de debug
return 0
}
function show_warn() {
return 0
}
function show_info() {
return 0
}
function show_verbose() {
return 0
}
function show_debug() {
[ -n "$DEBUG" ]
}
function check_verbosity() {
return 0
}
function get_verbosity_option() { :;} function get_verbosity_option() { :;}
# tester respectivement si on doit afficher les messages d'erreur,
# d'avertissement, d'information, de debug
function show_error() { return 0; }
function show_warn() { return 0; }
function show_info() { return 0; }
function show_verbose() { return 0; }
function show_debug() { [ -n "$DEBUG" ]; }
# note: toutes les fonctions d'affichage e* écrivent sur stderr # note: toutes les fonctions d'affichage e* écrivent sur stderr
NULIB__EPENDING=
function eflush() { function esection() {
# Afficher les messages en attente # Afficher une section. Toutes les indentations sont remises à zéro
if [ -n "$NULIB__EPENDING" ]; then recho "$NULIB__EPENDING" 1>&2; NULIB__EPENDING=; fi show_info || return
eval "$NULIB__DISABLE_SET_X"
NULIB__ESTACK=
NULIB__TLEVEL=
__esection "$*" 1>&2
eval "$NULIB__ENABLE_SET_X"
} }
function eclearp() {
# Supprimer les message en attente function etitle() {
NULIB__EPENDING= # Afficher le titre $1. Le contenu sous des titres imbriqués est affiché
# indenté. le titre n'est pas terminé, et il faut le terminer explicitement
# avec eend, sauf dans certains cas précis:
# - Si $2..$* est spécifié, c'est une commande. Lancer la commande dans le
# contexte du titre. Puis, le titre est automatiquement terminé
# - Sinon, le titre doit toujours être terminé explicitement.
local title="$1"; shift
# etitle
[ -n "$NULIB__ESTACK" ] && NULIB__TLEVEL="${NULIB__TLEVEL} "
NULIB__ESTACK="$NULIB__ESTACK:t"
if show_info; then
eval "$NULIB__DISABLE_SET_X"
__etitle "$title" 1>&2
eval "$NULIB__ENABLE_SET_X"
fi
# commande
local r=0
if [ $# -gt 0 ]; then
"$@"; r=$?
eend $r
fi
return $r
} }
function edesc() {
# Afficher une description sous le titre courant
show_info || return
eval "$NULIB__DISABLE_SET_X"
__edesc "$*" 1>&2
eval "$NULIB__ENABLE_SET_X"
}
function ebanner() {
# Afficher un message très important encadré, puis attendre 5 secondes
show_error || return
eval "$NULIB__DISABLE_SET_X"
__ebanner "$*" 1>&2
eval "$NULIB__ENABLE_SET_X"
sleep 5
}
function eimportant() {
# Afficher un message très important
show_error || return
eval "$NULIB__DISABLE_SET_X"
__eimportant "$*" 1>&2
eval "$NULIB__ENABLE_SET_X"
}
function eattention() {
# Afficher un message important
show_warn || return
eval "$NULIB__DISABLE_SET_X"
__eattention "$*" 1>&2
eval "$NULIB__ENABLE_SET_X"
}
function eerror() { function eerror() {
# Afficher un message d'erreur # Afficher un message d'erreur
show_error || return; eflush; __eerror "$*" 1>&2 show_error || return
eval "$NULIB__DISABLE_SET_X"
__eerror "$*" 1>&2
eval "$NULIB__ENABLE_SET_X"
} }
function eerror_unless() { function eerror_unless() {
# Afficher $1 avec eerror() si la commande $2..@ retourne FAUX. dans tous les cas, retourner le code de retour de la commande. # Afficher $1 avec eerror() si la commande $2..@ retourne FAUX. dans tous les cas, retourner le code de retour de la commande.
local eu__r local msg="$1"; shift
local eu__msg="$1"; shift local r=1
if [ $# -eq 0 ]; then if [ $# -eq 0 ]; then
[ -n "$eu__msg" ] && eerror "$eu__msg" [ -n "$msg" ] && eerror "$msg"
return 1
elif "$@"; then
:
else else
eu__r=$? "$@"; r=$?
[ -n "$eu__msg" ] && eerror "$eu__msg" if [ $r -ne 0 -a -n "$msg" ]; then
return $eu__r eerror "$msg"
fi
fi fi
return 0 return $r
} }
function eerror_if() { function eerror_if() {
# Afficher $1 avec eerror() si la commande $2..@ retourne VRAI. dans tous les cas, retourner le code de retour de la commande. # Afficher $1 avec eerror() si la commande $2..@ retourne VRAI. dans tous les cas, retourner le code de retour de la commande.
local ei__r=0 local msg="$1"; shift
local ei__msg="$1"; shift local r=0
[ $# -eq 0 ] && return 0 if [ $# -gt 0 ]; then
if "$@"; then "$@"; r=$?
[ -n "$ei__msg" ] && eerror "$ei__msg" if [ $r -eq 0 -a -n "$msg" ]; then
else eerror "$msg"
ei__r=$? fi
fi fi
return $ei__r return $r
} }
function set_die_return() { function set_die_return() {
NULIB_DIE="return 1" NULIB__DIE="return 1"
} }
function die() { function die() {
[ $# -gt 0 ] && eerror "$@" [ $# -gt 0 ] && eerror "$@"
local die="${NULIB_DIE:-exit 1}" local die="${NULIB__DIE:-exit 1}"
eval "$die" || return eval "$die" || return
} }
@ -308,41 +311,44 @@ function die_with {
[ $# -gt 0 ] && eerror "$1" [ $# -gt 0 ] && eerror "$1"
shift shift
[ $# -gt 0 ] && "$@" [ $# -gt 0 ] && "$@"
local die="${NULIB_DIE:-exit 1}" local die="${NULIB__DIE:-exit 1}"
eval "$die" || return eval "$die" || return
} }
function die_unless() { function die_unless() {
# Afficher $1 et quitter le script avec die() si la commande $2..@ retourne FAUX # Afficher $1 et quitter le script avec die() si la commande $2..@ retourne FAUX
local du__r local msg="$1"; shift
local du__msg="$1"; shift local die="${NULIB__DIE:-exit 1}"
local du__die="${NULIB_DIE:-exit 1}" local r=1
if [ $# -eq 0 ]; then if [ $# -eq 0 ]; then
[ -n "$du__msg" ] && eerror "$du__msg" [ -n "$msg" ] && eerror "$msg"
eval "$du__die" || return
elif "$@"; then
:
else else
du__r=$? "$@"; r=$?
[ -n "$du__msg" ] && eerror "$du__msg" if [ $r -ne 0 -a -n "$msg" ]; then
eval "${du__die% *} $du__r" || return eerror "$msg"
fi
fi fi
return 0 if [ $r -ne 0 ]; then
eval "${die% *} $r" || return $r
fi
return $r
} }
function die_if() { function die_if() {
# Afficher $1 et quitter le script avec die() si la commande $2..@ retourne VRAI. sinon, retourner le code de retour de la commande # Afficher $1 et quitter le script avec die() si la commande $2..@ retourne VRAI. sinon, retourner le code de retour de la commande
local di__r=0 local msg="$1"; shift
local di__msg="$1"; shift local die="${NULIB__DIE:-exit 1}"
local di__die="${NULIB_DIE:-exit 1}" local r=0
[ $# -eq 0 ] && return 0 if [ $# -gt 0 ]; then
if "$@"; then "$@"; r=$?
[ -n "$di__msg" ] && eerror "$di__msg" if [ $r -eq 0 -a -n "$msg" ]; then
eval "${di__die% *} 0" || return eerror "$msg"
else fi
di__r=$?
fi fi
return $di__r if [ $r -eq 0 ]; then
eval "${die% *} $r" || return $r
fi
return $r
} }
function exit_with { function exit_with {
@ -352,54 +358,59 @@ function exit_with {
function ewarn() { function ewarn() {
# Afficher un message d'avertissement # Afficher un message d'avertissement
show_warn || return; eflush; __ewarn "$*" 1>&2 show_warn || return
eval "$NULIB__DISABLE_SET_X"
__ewarn "$*" 1>&2
eval "$NULIB__ENABLE_SET_X"
} }
function enote() { function enote() {
# Afficher un message d'information de même niveau qu'un avertissement # Afficher un message d'information de même niveau qu'un avertissement
show_info || return; eflush; __enote "$*" 1>&2 show_info || return
} eval "$NULIB__DISABLE_SET_X"
function ebanner() { __enote "$*" 1>&2
# Afficher un message très important encadré, puis attendre 5 secondes eval "$NULIB__ENABLE_SET_X"
show_error || return; eflush; __ebanner "$*" 1>&2; sleep 5
}
function eimportant() {
# Afficher un message très important
show_error || return; eflush; __eimportant "$*" 1>&2
}
function eattention() {
# Afficher un message important
show_warn || return; eflush; __eattention "$*" 1>&2
} }
function einfo() { function einfo() {
# Afficher un message d'information # Afficher un message d'information
show_info || return; eflush; __einfo "$*" 1>&2 show_info || return
eval "$NULIB__DISABLE_SET_X"
__einfo "$*" 1>&2
eval "$NULIB__ENABLE_SET_X"
} }
function eecho() { function eecho() {
# Afficher un message d'information sans préfixe # Afficher un message d'information sans préfixe
show_info || return; eflush; __eecho "$*" 1>&2 show_info || return
eval "$NULIB__DISABLE_SET_X"
__eecho "$*" 1>&2
eval "$NULIB__ENABLE_SET_X"
} }
function eecho_() { function eecho_() {
show_info || return; eflush; __eecho_ "$*" 1>&2 show_info || return
} eval "$NULIB__DISABLE_SET_X"
function edebug() { __eecho_ "$*" 1>&2
# Afficher un message de debug eval "$NULIB__ENABLE_SET_X"
show_debug || return; eflush; __edebug "$*" 1>&2
} }
function trace() { function trace() {
# Afficher la commande $1..@, la lancer, puis afficher son code d'erreur si une # Afficher la commande $1..@, la lancer, puis afficher son code d'erreur si une
# erreur se produit # erreur se produit
local r cmd="$(qvals "$@")" local r cmd="$(qvals "$@")"
show_info && { eflush; __eecho "\$ $cmd" 1>&2; } show_info && { __eecho "\$ $cmd" 1>&2; }
"$@"; r=$? "$@"; r=$?
if [ $r -ne 0 ]; then if [ $r -ne 0 ]; then
if show_info; then if show_info; then
eflush; __eecho "^ [EC #$r]" 1>&2 __eecho "^ [EC #$r]" 1>&2
elif show_error; then elif show_error; then
eflush; __eecho "^ $cmd [EC #$r]" 1>&2; __eecho "^ $cmd [EC #$r]" 1>&2
fi fi
fi fi
return $r return $r
} }
function trace_error() { function trace_error() {
# Lancer la commande $1..@, puis afficher son code d'erreur si une erreur se # Lancer la commande $1..@, puis afficher son code d'erreur si une erreur se
# produit. La différence avec trace() est que la commande n'est affichée que si # produit. La différence avec trace() est que la commande n'est affichée que si
@ -408,118 +419,36 @@ function trace_error() {
"$@"; r=$? "$@"; r=$?
if [ $r -ne 0 ]; then if [ $r -ne 0 ]; then
local cmd="$(qvals "$@")" local cmd="$(qvals "$@")"
show_error && { eflush; __eecho "^ $cmd [EC #$r]" 1>&2; } if show_error; then
__eecho "^ $cmd [EC #$r]" 1>&2
fi
fi fi
return $r return $r
} }
function esection() { function edebug() {
show_info || return; eflush; __esection "$*" 1>&2 # Afficher un message de debug
show_debug || return
eval "$NULIB__DISABLE_SET_X"
__edebug "$*" 1>&2
eval "$NULIB__ENABLE_SET_X"
} }
function etitle() {
# Afficher le titre $1, qui est le début éventuel d'une section. Les section
# imbriquées sont affichées indentées. La section n'est pas terminée, et il faut
# la terminer explicitement avec eend, sauf dans certains cas précis:
# - Si $2..$* est spécifié, c'est une commande. Lancer la commande dans le
# contexte de la section. Puis, la section est automatiquement terminée sauf si
# l'option -s est spécifiée, auquel cas la section reste ouverte. Si l'option -p
# est spécifiée, eclearp() est appelé pour purger les messages en attente
# - Dans le cas contraire, l'option -s est ignorée: la section doit toujours
# être terminée explicitement.
# La fonction etitled() est comme etitle(), mais le titre n'est pas affiché
# immédiatement. L'affichage effectif est effectué dès qu'une fonction e* est
# utilisée. Ceci permet, avec la fonction eclearp(), de ne pas afficher de titre
# pour une section vide.
local __t_deferred=
__t_etitle "$@"
}
function etitled() {
local __t_deferred=1
__t_etitle "$@"
}
function __t_etitle() {
local __t_eend=default
local __t_clearp=
while [ -n "$1" ]; do
if [ "$1" == "--" ]; then
shift
break
elif [ "$1" == "-s" ]; then
__t_eend=
shift
elif [ "$1" == "--eend" ]; then
__t_eend=1
shift
elif [ "$1" == "-p" ]; then
__t_clearp=1
shift
else
break
fi
done
local __t_title="$1"; shift
local __t_s=0
# etitle
[ -n "$NULIB__ESTACK" ] && NULIB__TLEVEL="${NULIB__TLEVEL} "
NULIB__ESTACK="$NULIB__ESTACK:t"
if show_info; then
if [ -n "$__t_deferred" ]; then
NULIB__EPENDING="${NULIB__EPENDING:+$NULIB__EPENDING
}$(__etitle "$__t_title")"
else
eflush
__etitle "$__t_title" 1>&2
fi
fi
# commande
if [ $# -gt 0 ]; then
"$@"
__t_s=$?
[ "$__t_eend" == "default" ] && __t_eend=1
fi
# eend
[ "$__t_eend" == "default" ] && __t_eend=
if [ -n "$__t_eend" ]; then
eend $__t_s
[ -n "$__t_clearp" ] && eclearp
fi
return $__t_s
}
function estep() {
# Afficher la description d'une opération. Cette fonction est particulièrement # Afficher la description d'une opération. Cette fonction est particulièrement
# appropriée dans le contexte d'un etitle. # appropriée dans le contexte d'un etitle.
# Les variantes e (error), w (warning), n (note), i (info) permettent d'afficher # Les variantes e (error), w (warning), n (note), i (info) permettent d'afficher
# des couleurs différentes, mais toutes sont du niveau info. # des couleurs différentes, mais toutes sont du niveau info.
show_info || return; eflush; __estep "$*" 1>&2 function estep() { show_info || return; eval "$NULIB__DISABLE_SET_X"; __estep "$*" 1>&2; eval "$NULIB__ENABLE_SET_X"; }
} function estepe() { show_info || return; eval "$NULIB__DISABLE_SET_X"; __estepe "$*" 1>&2; eval "$NULIB__ENABLE_SET_X"; }
function estepe() { function estepw() { show_info || return; eval "$NULIB__DISABLE_SET_X"; __estepw "$*" 1>&2; eval "$NULIB__ENABLE_SET_X"; }
show_info || return; eflush; __estepe "$*" 1>&2 function estepn() { show_info || return; eval "$NULIB__DISABLE_SET_X"; __estepn "$*" 1>&2; eval "$NULIB__ENABLE_SET_X"; }
} function estepi() { show_info || return; eval "$NULIB__DISABLE_SET_X"; __estepi "$*" 1>&2; eval "$NULIB__ENABLE_SET_X"; }
function estepw() { function estep_() { show_info || return; eval "$NULIB__DISABLE_SET_X"; __estep_ "$*" 1>&2; eval "$NULIB__ENABLE_SET_X"; }
show_info || return; eflush; __estepw "$*" 1>&2 function estepe_() { show_info || return; eval "$NULIB__DISABLE_SET_X"; __estepe_ "$*" 1>&2; eval "$NULIB__ENABLE_SET_X"; }
} function estepw_() { show_info || return; eval "$NULIB__DISABLE_SET_X"; __estepw_ "$*" 1>&2; eval "$NULIB__ENABLE_SET_X"; }
function estepn() { function estepn_() { show_info || return; eval "$NULIB__DISABLE_SET_X"; __estepn_ "$*" 1>&2; eval "$NULIB__ENABLE_SET_X"; }
show_info || return; eflush; __estepn "$*" 1>&2 function estepi_() { show_info || return; eval "$NULIB__DISABLE_SET_X"; __estepi_ "$*" 1>&2; eval "$NULIB__ENABLE_SET_X"; }
}
function estepi() {
show_info || return; eflush; __estepi "$*" 1>&2
}
function estep_() {
show_info || return; eflush; __estep_ "$*" 1>&2
}
function estepe_() {
show_info || return; eflush; __estepe_ "$*" 1>&2
}
function estepw_() {
show_info || return; eflush; __estepw_ "$*" 1>&2
}
function estepn_() {
show_info || return; eflush; __estepn_ "$*" 1>&2
}
function estepi_() {
show_info || return; eflush; __estepi_ "$*" 1>&2
}
function ebegin() { function ebegin() {
# Afficher le message $1, qui décrit le début d'une opération. Cette fonction # Afficher le message $1, qui décrit le début d'une opération. Cette fonction
# débute une section, qu'il faut terminer avec eend. # débute une section, qu'il faut terminer avec eend.
@ -546,7 +475,6 @@ function ebegin() {
# ebegin # ebegin
NULIB__ESTACK="$NULIB__ESTACK:b" NULIB__ESTACK="$NULIB__ESTACK:b"
if show_info; then if show_info; then
eflush
__ebegin "$__b_msg" 1>&2 __ebegin "$__b_msg" 1>&2
fi fi
# commande # commande
@ -560,13 +488,13 @@ function ebegin() {
[ -n "$__b_eend" ] && eend $__b_s [ -n "$__b_eend" ] && eend $__b_s
return $__b_s return $__b_s
} }
function edot() { function edot() {
# Afficher une étape d'une opération, matérialisée par un point '.' ou une # Afficher une étape d'une opération, matérialisée par un point '.' ou une
# croix 'x' en cas de succès ou d'erreur. Cette fonction est particulièrement # croix 'x' en cas de succès ou d'erreur. Cette fonction est particulièrement
# appropriée dans le contexte d'un ebegin. # appropriée dans le contexte d'un ebegin.
local s=$? local s=$?
show_info || return show_info || return
eflush
[ -n "$1" ] && s="$1" [ -n "$1" ] && s="$1"
shift shift
if [ "$s" == "0" ]; then if [ "$s" == "0" ]; then
@ -577,19 +505,20 @@ function edot() {
show_verbose && [ $# -gt 0 ] && __edotd "$*" 1>&2 show_verbose && [ $# -gt 0 ] && __edotd "$*" 1>&2
return $s return $s
} }
function edotw() { function edotw() {
# Afficher un avertissement comme étape d'une opération, matérialisée par une # Afficher un avertissement comme étape d'une opération, matérialisée par une
# lettre 'w' (typiquement de couleur jaune). Cette fonction est particulièrement # lettre 'w' (typiquement de couleur jaune). Cette fonction est particulièrement
# appropriée dans le contexte d'un ebegin. # appropriée dans le contexte d'un ebegin.
local s=$? local s=$?
show_info || return show_info || return
eflush
[ -n "$1" ] && s="$1" [ -n "$1" ] && s="$1"
shift shift
__edotw 1>&2 __edotw 1>&2
show_verbose && [ $# -gt 0 ] && __edotd "$*" 1>&2 show_verbose && [ $# -gt 0 ] && __edotd "$*" 1>&2
return $s return $s
} }
function ewait() { function ewait() {
# Afficher les étapes d'une opération qui dure, matérialisées par des '+' toutes # Afficher les étapes d'une opération qui dure, matérialisées par des '+' toutes
# les secondes tant que le processus $1 tourne. # les secondes tant que le processus $1 tourne.
@ -601,7 +530,6 @@ function ewait() {
[ -n "$1" ] || return 1 [ -n "$1" ] || return 1
if show_info; then if show_info; then
local count=2 local count=2
eflush
little_sleep # certains processus retournent tout de suite little_sleep # certains processus retournent tout de suite
while is_running "$1"; do while is_running "$1"; do
sleep 1 sleep 1
@ -619,6 +547,7 @@ function ewait() {
wait "$1" wait "$1"
fi fi
} }
function eend() { function eend() {
# Terminer une section. # Terminer une section.
# Avec l'option -c, remettre à zéro toutes les informations de section # Avec l'option -c, remettre à zéro toutes les informations de section
@ -635,7 +564,6 @@ function eend() {
# terminer ebegin # terminer ebegin
NULIB__ESTACK="${NULIB__ESTACK%:b}" NULIB__ESTACK="${NULIB__ESTACK%:b}"
show_info || return show_info || return
eflush
[ -n "$1" ] && s="$1" [ -n "$1" ] && s="$1"
if [ "$s" == "0" ]; then if [ "$s" == "0" ]; then
__eendo 1>&2 __eendo 1>&2
@ -648,6 +576,7 @@ function eend() {
NULIB__TLEVEL="${NULIB__TLEVEL% }" NULIB__TLEVEL="${NULIB__TLEVEL% }"
fi fi
} }
function __elinedots() { function __elinedots() {
ebegin "$1" ebegin "$1"
local line local line

View File

@ -56,77 +56,20 @@ function __set_no_colors() {
else else
is_yes "$1" && NO_COLORS=1 || NO_COLORS= is_yes "$1" && NO_COLORS=1 || NO_COLORS=
fi fi
COULEUR_ROUGE="$(get_color RED BOLD)" COULEUR_ROUGE="$(get_color RED BOLD)"
COULEUR_VERTE="$(get_color GREEN BOLD)" COULEUR_VERTE="$(get_color GREEN BOLD)"
COULEUR_JAUNE="$(get_color YELLOW BOLD)" COULEUR_JAUNE="$(get_color YELLOW BOLD)"
COULEUR_BLEUE="$(get_color BLUE BOLD)" COULEUR_BLEUE="$(get_color BLUE BOLD)"
COULEUR_BLANCHE="$(get_color WHITE BOLD)" COULEUR_BLANCHE="$(get_color WHITE BOLD)"
COULEUR_NORMALE="$(get_color RESET)" COULEUR_NORMALE="$(get_color RESET)"
} if [ -n "$NO_COLORS" ]; then
__set_no_colors nulib__load: _output_vanilla
function __eerror() { local p; [ -z "$NO_COLORS" ] && p="E" || p="ERROR"; tooenc "$(__edate)${NULIB__TLEVEL}${COULEUR_ROUGE}${p}${COULEUR_NORMALE} $(__indent "$1")"; }
function __ewarn() { local p; [ -z "$NO_COLORS" ] && p="W" || p="WARNING"; tooenc "$(__edate)${NULIB__TLEVEL}${COULEUR_JAUNE}${p}${COULEUR_NORMALE} $(__indent "$1")"; }
function __enote() { local p; [ -z "$NO_COLORS" ] && p="N" || p="NOTE"; tooenc "$(__edate)${NULIB__TLEVEL}${COULEUR_VERTE}${p}${COULEUR_NORMALE} $(__indent "$1")"; }
function __ebanner() {
local maxi="${COLUMNS:-80}"
local prefix="$(__edate)${NULIB__TLEVEL}" lsep line
local -a lines
lsep="$prefix"
while [ ${#lsep} -lt $maxi ]; do lsep="$lsep="; done
tooenc "$COULEUR_ROUGE$lsep"
maxi=$(($maxi - 1))
array_xsplitl lines "$1"
for line in "" "${lines[@]}" ""; do
line="$prefix= $line"
if [ ${#line} -le $maxi ]; then
while [ ${#line} -lt $maxi ]; do line="$line "; done
line="$line="
fi
tooenc "$line"
done
tooenc "$lsep$COULEUR_NORMALE"
}
function __eimportant() { local p; [ -z "$NO_COLORS" ] && p="!" || p="IMPORTANT"; tooenc "$(__edate)${NULIB__TLEVEL}${COULEUR_ROUGE}${p}${COULEUR_NORMALE} $(__indent "$1")"; }
function __eattention() { local p; [ -z "$NO_COLORS" ] && p="*" || p="ATTENTION"; tooenc "$(__edate)${NULIB__TLEVEL}${COULEUR_JAUNE}${p}${COULEUR_NORMALE} $(__indent "$1")"; }
function __einfo() { local p; [ -z "$NO_COLORS" ] && p="I" || p="INFO"; tooenc "$(__edate)${NULIB__TLEVEL}${COULEUR_BLEUE}${p}${COULEUR_NORMALE} $(__indent "$1")"; }
function __edebug() { local p; [ -z "$NO_COLORS" ] && p="D" || p="DEBUG"; tooenc "$(__edate)${NULIB__TLEVEL}${COULEUR_BLANCHE}${p}${COULEUR_NORMALE} $(__indent "$1")"; }
function __estep() { local p; [ -z "$NO_COLORS" ] && p="." || p="."; tooenc "$(__edate)${NULIB__TLEVEL}${COULEUR_BLANCHE}${p}${COULEUR_NORMALE} $(__indent "$1")"; }
function __estepe() { local p; [ -z "$NO_COLORS" ] && p="." || p=".E"; tooenc "$(__edate)${NULIB__TLEVEL}${COULEUR_ROUGE}${p}${COULEUR_NORMALE} $(__indent "$1")"; }
function __estepw() { local p; [ -z "$NO_COLORS" ] && p="." || p=".W"; tooenc "$(__edate)${NULIB__TLEVEL}${COULEUR_JAUNE}${p}${COULEUR_NORMALE} $(__indent "$1")"; }
function __estepn() { local p; [ -z "$NO_COLORS" ] && p="." || p=".N"; tooenc "$(__edate)${NULIB__TLEVEL}${COULEUR_VERTE}${p}${COULEUR_NORMALE} $(__indent "$1")"; }
function __estepi() { local p; [ -z "$NO_COLORS" ] && p="." || p=".I"; tooenc "$(__edate)${NULIB__TLEVEL}${COULEUR_BLEUE}${p}${COULEUR_NORMALE} $(__indent "$1")"; }
function __estep_() { local p; [ -z "$NO_COLORS" ] && p="." || p="."; tooenc_ "$(__edate)${NULIB__TLEVEL}${COULEUR_BLANCHE}${p}${COULEUR_NORMALE} $(__indent "$1")"; }
function __estepe_() { local p; [ -z "$NO_COLORS" ] && p="." || p=".E"; tooenc_ "$(__edate)${NULIB__TLEVEL}${COULEUR_ROUGE}${p}${COULEUR_NORMALE} $(__indent "$1")"; }
function __estepw_() { local p; [ -z "$NO_COLORS" ] && p="." || p=".W"; tooenc_ "$(__edate)${NULIB__TLEVEL}${COULEUR_JAUNE}${p}${COULEUR_NORMALE} $(__indent "$1")"; }
function __estepn_() { local p; [ -z "$NO_COLORS" ] && p="." || p=".N"; tooenc_ "$(__edate)${NULIB__TLEVEL}${COULEUR_VERTE}${p}${COULEUR_NORMALE} $(__indent "$1")"; }
function __estepi_() { local p; [ -z "$NO_COLORS" ] && p="." || p=".I"; tooenc_ "$(__edate)${NULIB__TLEVEL}${COULEUR_BLEUE}${p}${COULEUR_NORMALE} $(__indent "$1")"; }
function __esection() {
local maxi="${COLUMNS:-80}"
local prefix="$(__edate)${NULIB__TLEVEL}" lsep
lsep="$prefix"
while [ ${#lsep} -lt $maxi ]; do lsep="$lsep="; done
if [ -n "$*" ]; then
tooenc "$COULEUR_BLEUE$lsep"
tooenc "$prefix$*"
tooenc "$lsep$COULEUR_NORMALE"
else else
tooenc "$COULEUR_BLEUE$lsep$COULEUR_NORMALE" nulib__load: _output_color
fi fi
} }
function __etitle() { local p; [ -z "$NO_COLORS" ] && p="T" || p="==="; tooenc "$(__edate)${NULIB__TLEVEL}${COULEUR_BLEUE}${p} $(get_color _)$(__indent "$1")${COULEUR_NORMALE}"; } __set_no_colors
function __ebegin() { local p; [ -z "$NO_COLORS" ] && p="." || p="."; tooenc_ "$(__edate)${NULIB__TLEVEL}${COULEUR_BLANCHE}${p}${COULEUR_NORMALE} $(__indent "$1"): "; }
function __edoto() { echo_ "."; }
function __edotw() { echo_ "${COULEUR_JAUNE}w${COULEUR_NORMALE}"; }
function __edotx() { echo_ "${COULEUR_ROUGE}x${COULEUR_NORMALE}"; }
function __edotp() { echo_ "${COULEUR_JAUNE}+${COULEUR_NORMALE}"; }
function __edotd() { tooenc "($1)"; }
function __eendo() { echo "${COULEUR_VERTE}[ok]${COULEUR_NORMALE}"; }
function __eendx() { echo "${COULEUR_ROUGE}[error]${COULEUR_NORMALE}"; }
# 5=afficher les messages de debug; 4=afficher les message verbeux; # 5=afficher les messages de debug; 4=afficher les message verbeux;
# 3=afficher les message informatifs; 2=afficher les warnings et les notes; # 3=afficher les message informatifs; 2=afficher les warnings et les notes;
@ -160,6 +103,7 @@ function set_interaction() {
esac esac
return 0 return 0
} }
# Variable à inclure pour lancer automatiquement set_verbosity et # Variable à inclure pour lancer automatiquement set_verbosity et
# set_interaction en fonction des arguments de la ligne de commande. A utiliser # set_interaction en fonction des arguments de la ligne de commande. A utiliser
# de cette manière: # de cette manière:
@ -175,6 +119,7 @@ function show_warn() { [ "$__verbosity" -ge 2 ]; }
function show_info() { [ "$__verbosity" -ge 3 ]; } function show_info() { [ "$__verbosity" -ge 3 ]; }
function show_verbose() { [ "$__verbosity" -ge 4 ]; } function show_verbose() { [ "$__verbosity" -ge 4 ]; }
function show_debug() { [ -n "$DEBUG" -o "$__verbosity" -ge 5 ]; } function show_debug() { [ -n "$DEBUG" -o "$__verbosity" -ge 5 ]; }
# Vérifier le niveau de verbosité actuel par rapport à l'argument. $1 peut valoir: # Vérifier le niveau de verbosité actuel par rapport à l'argument. $1 peut valoir:
# -Q retourner true si on peut afficher les messages d'erreur # -Q retourner true si on peut afficher les messages d'erreur
# -q retourner true si on peut afficher les messages d'avertissement # -q retourner true si on peut afficher les messages d'avertissement
@ -201,6 +146,7 @@ function get_verbosity_option() {
5) echo --debug;; 5) echo --debug;;
esac esac
} }
# Vérifier le niveau d'interaction autorisé par rapport à l'argument. Par # Vérifier le niveau d'interaction autorisé par rapport à l'argument. Par
# exemple, 'check_interaction -y' signifie "Il ne faut interagir avec # exemple, 'check_interaction -y' signifie "Il ne faut interagir avec
# l'utilisateur qu'à partir du niveau d'interaction -y. Suis-je dans les # l'utilisateur qu'à partir du niveau d'interaction -y. Suis-je dans les

View File

@ -11,18 +11,15 @@ args=(
) )
parse_args "$@"; set -- "${args[@]}" parse_args "$@"; set -- "${args[@]}"
eerror "erreur" #ebanner "banner"
ewarn "warning"
enote "note"
ebanner "banner"
eimportant "important" eimportant "important"
eattention "attention" eattention "attention"
eerror "error"
ewarn "warn"
enote "note"
einfo "info" einfo "info"
eecho "vanilla" eecho "echo"
edebug "debug" edebug "debug"
esection
etitle "title"
estep "step" estep "step"
estepe "stepe" estepe "stepe"
@ -38,7 +35,108 @@ line1
line2 line2
line3" | elinedots "lines" line3" | elinedots "lines"
eend
esection "section" esection "section"
eecho "content" eecho "content"
etitle "title0"
etitle "title1"
eecho "print under title1"
eend
eecho "print under title0"
eend
edesc "action avec step"
action "action avec step"
estep "step"
asuccess "action success"
action "action avec step"
estep "step"
afailure "action failure"
action "action avec step"
estep "step"
adone "action neutral"
edesc "actions sans step"
action "action sans step"
asuccess "action success"
action "action sans step"
afailure "action failure"
action "action sans step"
adone "action neutral"
edesc "actions imbriquées"
action "action0"
action "action1"
action "action2"
asuccess "action2 success"
asuccess "action1 success"
asuccess "action0 success"
edesc "action avec step, sans messages"
action "action avec step, sans messages, success"
estep "step"
asuccess
action "action avec step, sans messages, failure"
estep "step"
afailure
action "action avec step, sans messages, done"
estep "step"
adone
edesc "action sans step, sans messages"
action "action sans step, sans messages, success"
asuccess
action "action sans step, sans messages, failure"
afailure
action "action sans step, sans messages, done"
adone
edesc "actions imbriquées, sans messages"
action "action0"
action "action1"
action "action2"
asuccess
asuccess
asuccess
################################################################################
#ebanner $'multi-line\nbanner'
esection $'multi-line\nsection'
etitle $'multi-line\ntitle'
etitle $'another\ntitle'
edesc $'multi-line\ndesc'
#ebanner $'multi-line\nbanner'
eimportant $'multi-line\nimportant'
eattention $'multi-line\nattention'
eerror $'multi-line\nerror'
ewarn $'multi-line\nwarn'
enote $'multi-line\nnote'
einfo $'multi-line\ninfo'
eecho $'multi-line\necho'
edebug $'multi-line\ndebug'
action $'multi-line\naction'
asuccess
action $'multi-line\naction'
estep $'multi-line\nstep'
afailure
action $'multi-line\naction'
estep $'multi-line\nstep'
asuccess $'multi-line\nsuccess'
action $'multi-line\naction'
estep $'multi-line\nstep'
adone $'multi-line\ndone'
eend
eend

27
load.sh
View File

@ -96,6 +96,22 @@ function nulib__define_functions() {
} }
} }
function nulib__load:() {
local nl__module nl__nulibdir nl__found
[ $# -gt 0 ] || set DEFAULTS
for nl__module in "$@"; do
nl__found=
for nl__nulibdir in "${NULIBDIRS[@]}"; do
if [ -f "$nl__nulibdir/$nl__module.sh" ]; then
source "$nl__nulibdir/$nl__module.sh" || die
nl__found=1
break
fi
done
[ -n "$nl__found" ] || die "nulib: unable to find module $nl__module in (${NULIBDIRS[*]})"
done
}
function nulib__require:() { function nulib__require:() {
local nr__module nr__nulibdir nr__found local nr__module nr__nulibdir nr__found
[ $# -gt 0 ] || set DEFAULTS [ $# -gt 0 ] || set DEFAULTS
@ -140,11 +156,18 @@ function nulib__require:() {
NULIB_MODULE="$nr__orig_module" NULIB_MODULE="$nr__orig_module"
} }
# désactiver set -x
NULIB__DISABLE_SET_X='local NULIB__SET_X; [ -z "$NULIB_NO_DISABLE_SET_X" ] && [[ $- == *x* ]] && { set +x; NULIB__SET_X=1; }'
NULIB__ENABLE_SET_X='[ -n "$NULIB__SET_X" ] && set -x'
# désactiver set -x de manière réentrante
NULIB__RDISABLE_SET_X='[ -z "$NULIB_NO_DISABLE_SET_X" ] && [[ $- == *x* ]] && { set +x; local NULIB_REQUIRE_SET_X=1; }; if [ -n "$NULIB_REQUIRE_SET_X" ]; then [ -n "$NULIB_REQUIRE_SET_X_RL1" ] || local NULIB_REQUIRE_SET_X_RL1; local NULIB_REQUIRE_SET_X_RL2=$RANDOM; [ -n "$NULIB_REQUIRE_SET_X_RL1" ] || NULIB_REQUIRE_SET_X_RL1=$NULIB_REQUIRE_SET_X_RL2; fi'
NULIB__RENABLE_SET_X='[ -n "$NULIB_REQUIRE_SET_X" -a "$NULIB_REQUIRE_SET_X_RL1" == "$NULIB_REQUIRE_SET_X_RL2" ] && set -x'
function require:() { function require:() {
[ -z "$NULIB_NO_DISABLE_SET_X" ] && [[ $- == *x* ]] && { set +x; local NULIB_REQUIRE_SET_X=1; }; if [ -n "$NULIB_REQUIRE_SET_X" ]; then [ -n "$NULIB_REQUIRE_SET_X_RL1" ] || local NULIB_REQUIRE_SET_X_RL1; local NULIB_REQUIRE_SET_X_RL2=$RANDOM; [ -n "$NULIB_REQUIRE_SET_X_RL1" ] || NULIB_REQUIRE_SET_X_RL1=$NULIB_REQUIRE_SET_X_RL2; fi # désactiver set -x de manière réentrante eval "$NULIB__RDISABLE_SET_X"
nulib__define_functions nulib__define_functions
nulib__require: "$@" nulib__require: "$@"
[ -n "$NULIB_REQUIRE_SET_X" -a "$NULIB_REQUIRE_SET_X_RL1" == "$NULIB_REQUIRE_SET_X_RL2" ] && set -x eval "$NULIB__RENABLE_SET_X"
return 0 return 0
} }