Mon premier besoin a été d’avoir un moyen de m’avertir qu’une tâche longue qui tournait en tâche de fond était terminée, mais on peut faire plein d’autres choses avec zenity.
Notification
Pour être prévenu qu’une tâche est terminée, notify-send est déjà pas mal. On peut par exemple faire :
ma_commande_qui_prend_longtemps ; notify-send "Terminé (code de retour = $?)"
On peut faire la même chose avec zenity :
ma_commande_qui_prend_longtemps ; \
zenity --notification --text= Terminé (code de retour = $?)"
Mais zenity
offre plein d’autres possibilités
comme l’affichage de différentes boites de dialogue.
Question
On peut par exemple utiliser zenity
pour poser une question à l’utilisateur :
zenity --question --text "Voulez vous continuer ?" \
--ok-label "OK" --cancel-label "Quitter"
if [ "$?" != "0" ] ; then
exit 0
fi
Ou bien s’il s’agit juste d’un message d’information sans autre choix :
zenity --info --text "Prêt ?" --ok-label "OK"
if [ "$?" != "0" ] ; then
exit 0
fi
Progression
Une autre option intéressante est --progress
qui permet d’afficher une barre de progression.
Si on n’a aucune idée de la durée, on peut utiliser l’option -pulsate
qui montre simplement un curseur qui se promène.
Si par contre on veux une barre qui représente un pourcentage,
il faut périodiquement fournir à zenity
un nombre entre 0 et 100
pour faire la mise à jour de la progression.
Par exemple:
max=60
for ((t = 0 ; t < $max ; t ++ )) ; do
sleep 1 ;
echo "$t * (100 / $max)" | bc
done
) |
zenity --progress --text="Merci de patienter..." \
--percentage=0 --auto-close
L’option --auto-close
ferme automatiquement la fenêtre
lorsque le pourcentage atteint 100.
L’option --auto-kill
permet de tuer le processus
lorsque l’on annule l’attente,
c’est-à-dire dans notre cas de ne pas terminer la boucle
avant de rendre la main.
On peut par exemple mettre l’ensemble de la commande entre parenthèses:
max=60
(for ((t = 0 ; t < $max ; t ++ )) ; do
sleep 1 ;
echo "$t * (100 / $max)" | bc
done
) |
zenity --progress --text="Merci de patienter..." \
--percentage=0 --auto-close --auto-kill)
Les widgets
Il y a plein d’autres options disponibles dont voilà la liste :
--calendar
: boîte de dialogue calendrier--entry
: boîte de dialogue de saisie de texte--error
: boîte de dialogue d’erreur--info
: boîte de dialogue d’information--file-selection
: boîte de dialogue de sélection de fichiers--list
: boîte de dialogue de liste--notification
: notification--progress
: boîte de dialogue de barre de progression--question
: boîte de dialogue de question--warning
: boîte de dialogue d’avertissement--scale
: boîte de dialogue de glissière--text-info
: boîte de dialogue de texte d’information--color-selection
: boîte de dialogue de sélection de couleur--password
: boîte de dialogue de mot de passe--forms
: boîte de dialogue de formulaire
Mise en forme
Malheureusement, la documentation n’est pas très détaillé, et j’ai par exemple découvert un peu par hasard que l’on peut faire de la mise en forme avec des balise HTML, comme par exemple :
--text "<span color=\"red\">rouge</span> \n\
<b>gras</b>\n\
<span font-family=\"Helvetica\">essai de polices</span>"
Documentation
Pour plus d’information, voir :
- le manuel (pas très détaillé).
- un peu plus d’information dans la doc Ubuntu sur zenity.
- YAD :
un fork de
zenity
qui permet de faire des choses un peu plus sophistiquées.
Voir aussi :
- Disque dur externe
- Garder son PATH dans une commande sudo
- Scripts en ocaml
- Vérifier l'intégrité d'un fichier téléchargé
- Bash : faire un menu
- Problème de boot
- (X)ubuntu : mise à niveau vers la 14.04
- Xubuntu: connexion automatique
- Perl pour faire des scripts efficaces
- Apt-get et autres pour la gestion de paquets Debian
- Linux : ramassis d'astuces diverses
- Bash sur la ligne de commande
- Bash : pour écrire des scripts
- Filtrage de texte : sed, awk, etc.
- Les couleurs dans un terminal
- Afficher un pourcentage dans une page HTML
- VNC : Virtual Network Computing
- Git : déménagement d'un dépôt
- Quelques liens au sujet de l'analyse statique
- Ocaml: mon principal langage de développement
- Disque dur externe
- Les profiles dans Firefox
- Cryptographie et mail sous Android
- Quelques liens au sujet du C
- Git rebase : pour diviser un commit