# -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8 # ewaitcmd devait remplacer ewait, mais l'implémentation souffre de problèmes de # synchronisation entre l'affichage et l'exécution de la commande. Le code est # stocké dans ce fichier, en attendant de trouver une solution... function __utools_eplus_file() { # Afficher le nom d'un fichier à utiliser pour __utools_eplus() local file="$TMPDIR/utools.$$.${utools_eplus_count_:=0}" while [ -f "$file" ]; do utools_eplus_count_=$(($utools_eplus_count_ + 1)) file="$TMPDIR/utools.$$.$utools_eplus_count_" done >"$file" echo "$file" } function __utools_eplus() { # Après un délai de 2 secondes, afficher un caractère "+" toutes les # secondes, et ce tant que le fichier $1 existe [ -f "$1" ] || return sleep 2 while true; do [ -f "$1" ] || break echo_ "+" sleep 1 done } function ewaitcmd() { # Une étape d'une opération commencée par ebegin, matérialisée par des "+" # qui s'affichent tant que le processus correspondant à la ligne de commande # tourne. # XXX problèmes: problèmes de synchronisme... local eplus_file exitcode if [ -n "$utools_edot_first_" ]; then # au premier dot, afficher un espace d'abord echo_ " " utools_edot_first_= fi # commencer à afficher les "+" eplus_file="$(__utools_eplus_file)" __utools_eplus "$eplus_file" & # lancer la commande "$@" exitcode=$? # arrêter l'affichage des "+" /bin/rm -f "$eplus_file" if [ $exitcode -ne 0 ]; then [ "$utools_ESTATUS_" -eq 0 ] && utools_ESTATUS_=$exitcode echo_ "${COULEUR_ROUGE}x${COULEUR_NORMALE}" else echo_ "." fi return $exitcode }