{{tag>console terminal}} ---- ====== Zenity ====== //Traduction de la courte description sur le site officiel de Zenity.//((Zenity is a tool that allows you to display Gtk+ dialog boxes from the command line and through shell scripts. It is similar to gdialog, but is intended to be saner. It comes from the same family as dialog, Xdialog, and cdialog, but it surpasses those projects by having a cooler name.)) **Zenity** est un outil qui permet d'afficher des boîtes de dialogue GTK+ depuis la ligne de commande ou au travers de scripts shell. Il est similaire à //gdialog//, mais son but est d'être plus simple. Il appartient à la même famille que //dialog// (affichage de pseudo boîtes de dialogue en console), //xdialog// et //cdialog//, mais il surpasse tous ces projets en ayant un nom bien plus classe. ===== Installation ===== Zenity est installé sur Ubuntu par défaut. Sinon, il suffit d'[[:tutoriel:comment_installer_un_paquet|installer le paquet]] **[[apt>zenity]]**. ===== Utilisation ===== Zenity permet d'afficher 14 types de fenêtre : ^ Type de fenêtre ^ Argument ^ Description ^ | Calendrier |''%%--calendar%%'' | Affiche un calendrier | | Entrée |''%%--entry%%'' | Permet la saisie de caractères | | Erreur |''%%--error%%'' | Affiche une erreur à l'écran | | Navigateur de fichier |''%%--file-selection%%''| Permet la sélection d'un fichier| | Info |''%%--info%%'' | Affiche une information | | Liste |''%%--list%%'' | Affiche une liste | | Notification |''%%--notification%%''| Afficher une notification dans la zone prévue à cet effet| | Progress |''%%--progress%%'' | Permet de suivre une progression| | Question |''%%--question%%'' | Affiche une question ( OUI / NON )| | Info texte |''%%--text-info%%'' | Affiche un texte dans une fenêtre| | Avertissement |''%%--warning%%'' | Afficher un avertissement | | Scale |''%%--scale%%'' | Choisir une valeur numérique à l'aide d'un curseur | | Formulaire |''%%--forms%%'' | Affiche un formulaire (à partir de la version 3.2.0) | | Mot de passe |''%%--password%%'' | Demande un mot de passe (peut être utilisé avec 'sudo -S') | Pour plus d'infos, consulter la [[http://library.gnome.org/users/zenity/stable/index.html.fr|page de manuel]] de Zenity. Il existe un script permettant la création de fenêtres Zenity de façon rapide et simple. Voir le logiciel [[zenitor 3]]. ==== Exemples ===== Voici quelques infos bonus que certaines personnes ont trouvées. Car comme vous pouvez le constater, les infos sur Zenity ne sont pas légion... Ces fonctions ne semblent pas fonctionner pour les fenêtres "entry". Zenity est basé sur GTK+, lui-même basé sur [[http://library.gnome.org/devel/pango/stable/PangoMarkupFormat.html|Pango]], il est donc possible d'utiliser certaines fonctions de ce logiciel. Un module perl permet aussi d'utiliser facilement Zenity au sein des scripts perl, voir [[http://search.cpan.org/~kck/UI-Dialog-1.08/lib/UI/Dialog/Backend/Zenity.pod|la page CPAN associée (en anglais)]]. === Coloration du texte === Rien de mieux qu'un peu de couleur pour égayer un texte. Pour cela, il faut utiliser la balise "span color" : red Fenêtre de test : zenity --info --text " red green blue yellow magenta white black gray lightblue lightgray" === Choix de la police pour le texte === Marre de voir toujours la même police ? Il vous suffit donc d'utiliser la balise "span font-family". essai de polices Fenêtre de test : zenity --info --text " essai de polices essai de polices essai de polices essai de polices essai de polices essai de polices" === Changer la forme de la police === Un mot a besoin de ressortir du reste ? Il suffit de mettre en gras, en italique... zenity --info --text " gras grand italique barré indice exposant petit espace entre les lettres souligné" === Fenêtre avec liste de choix === {{ zenity-entry.png}} Il est possible de créer une fenêtre comme suit : Pour cela, il faut créer une boite de type "entry" et ajouter les différents choix de la liste à la fin de la commande. N'oubliez pas les guillemets si vous mettez des espaces dans les réponses. Ex : zenity --entry --title="Jour" --text="Veuillez indiquer le jour de la semaine" Lundi Mardi Mercredi "Autre jour..." Pour ajouter une réponse de base, utilisez l'option "entry-text" : zenity --entry --title="Jour" --text="Veuillez indiquer le jour de la semaine" --entry-text="Lundi" Mardi Mercredi === Boîte de message et récupérer la valeur === if ret=`zenity --entry --title='Titre de la vidéo' --text='Saisissez le titre de la vidéo : '` then titre=$ret if [ "$titre" = "" ] then echo "Il faut un titre, tient pan t'es mort!" exit fi else echo "Tsss, un titre on dit, pas le bouton annuler!" exit fi echo $titre === Méthode 2 pour récupérer la valeur === Voici une méthode alternative à celle décrite ci-dessus : dossierSortie=$(zenity --file-selection \ --title="Veuillez selectionner un dossier" \ --text="Choissisez un dossier quelconque" \ --directory); echo ${dossierSortie} sleep 10 === Méthode 3 pour récupérer la valeur === Très simple : variable=$(zenity --entry --title="Choix" --text="Indiquez un mot") echo "le mot choisi est "$variable sleep 5 === Méthode pour récupérer la valeur avec --question === zenity --question \ --title "coffee" \ --text "Faire du café ?" if [ $? = 0 ] then echo "OUI ! Avec 2 sucres ..." sleep 3 else echo "NON ! Plutôt du thé ..." sleep 3 fi === Barres de progression === //Depuis [[http://help.gnome.org/users/zenity/stable/progress.html.fr]]// ^ Commande ^ Rôle ^ | %%--text=text%% | Spécifier le texte affiché dans la boîte de dialogue de barre de progression. | | %%--percentage=percentage%% | Spécifier le pourcentage initial réglé dans la boîte de dialogue de barre de progression. | | %%--auto-close%% | Fermer la boîte de dialogue quand la barre de progression atteint 100%. | | %%--pulsate%% | Utiliser une barre de progression discontinue jusqu'à ce qu'un caractère EOF soit lu sur l'entrée standard. | * Si une ligne commence par '#', le texte est mis à jour avec le texte de cette ligne. * Si une ligne contient seulement un nombre, le pourcentage est mis à jour avec ce nombre. * %%--progress%% s'utilise avec un [[pipe]]. Vous devez donc mettre tout le code affecté par la barre de progression entre parenthèses. Exemple : #!/bin/sh ( echo "10" ; sleep 1 echo "# Mise à jour des journaux de mail" ; sleep 1 echo "20" ; sleep 1 echo "# Remise à zéro des paramètres" ; sleep 1 echo "50" ; sleep 1 echo "Cette ligne est ignorée" ; sleep 1 echo "75" ; sleep 1 echo "# Redémarrage du système" ; sleep 1 echo "100" ; sleep 1 ) | zenity --progress \ --title="Mise à jour des journaux système" \ --text="Analyse des journaux de mail..." \ --percentage=0 if [ "$?" = -1 ] ; then zenity --error \ --text="Mise à jour annulée." fi {{ http://library.gnome.org/users/zenity/stable/figures/zenity-progress-screenshot.png }} === Formulaire === Cette fonction est disponible depuis la version 3.2.0 de Zenity : cela ne fonctionnera pas avec les versions antérieures. ^ Commande ^ Rôle ^ | %%--text=Texte%% | Spécifier le texte affiché dans la boîte de dialogue de barre de progression. | | %%--separator=SÉPARATEUR%% | Définit le caractère séparateur de sortie. | | %%--add-entry=Nom du champ%% | Ajoute une nouvelle zone de saisie dans la boîte de dialogue de formulaire. | | %%--add-password=Nom du champ%% | Ajoute une nouvelle zone de saisie de mot de passe dans la boîte de dialogue de formulaire. | | %%--add-calendar=Nom du champ calendrier%% | Ajoute un nouveau calendrier dans la boîte de dialogue de formulaire. | | %%--forms-date-format=MODÈLE%% | Définit le format de la date retournée. | __Exemple:__ #!/bin/bash #On crée le formulaire en stockant les valeurs de sortie dans $cfgpass :/ cfgpass=`zenity --forms \ --title="Exemple qui tue la mort" \ --text="Définir un nouveau mot de passe" \ --add-entry="Nom de l'utilisateur" \ --add-password="Ancien mot de passe" \ --add-password="Nouveau mot de passe" \ --add-password="Confirmer le nouveau mot de passe" \ --separator="|"` #Si on clique sur le bouton Annuler if [ "$?" -eq 1 ]; then #On quitte le script exit fi #Sinon on continue #On peut récupérer les valeurs des différents champs de cette façon : echo "$cfgpass" | cut -d "|" -f1 #Nom de l'utilisateur echo "$cfgpass" | cut -d "|" -f2 | md5sum #Ancien Mot de passe echo "$cfgpass" | cut -d "|" -f3 | md5sum #Nouveau Mot de passe echo "$cfgpass" | cut -d "|" -f4 | md5sum #Confirmation du nouveau mot de passe echo "Franchement la classe cette nouvelle fonction Zenity :P" {{ :zenity-forms.png?direct& |http://img11.hostingpics.net/pics/246564zenityforms.png}} ===== Voir aussi ====== * [[http://freshmeat.net/projects/zenity|Page officielle de Zenity]] * [[http://library.gnome.org/users/zenity/stable/index.html.fr|Manuel de Zenity]] * zenity %%--info%% et [[http://blog.huguesbernard.eu/post/2008/07/04/Utiliser-notify-send-dans-ses-scripts|notify-send]] ! FIXME Lien brisé... * [[http://forum.ubuntu-fr.org/viewtopic.php?id=232644%20|Topic parlant des bonus]] * [[zenitor_3|Script de génération de fenêtre Zenity]] * [[http://sourceforge.net/projects/yad-dialog/|Yad: un fork de Zenity]]: très jeune mais prometteur ---- //Contributeurs principaux : [[utilisateurs:blackbg]], [[utilisateurs:hizoka]]. Contributeurs secondaires : [[utilisateurs:mirage59]], [[utilisateurs:TheCaméléon]], [[utilisateurs:herrleiche|Herrleiche]], CKDevelop, Heuzef//