{{tag>console shell }} ---- ====== YAD ====== //Traduction de la description sur le site officiel de Yad.// ((YAD (yet another dialog) is a tool for create graphical dialogs from shell scripts)) **Yad** (encore une boîte de dialogue) est un outil pour créer des boîtes de dialogue graphiques à partir de scripts shell. **Yad** est un fork de [[:Zenity|Zenity]] ===== Auteurs ===== Yad a été écrit par Victor Ananjevsky. L'icone Yad a été créé par Bogdan Lisovich. ===== Pré-requis ===== * Disposer des [[:sudo|droits d'administration]]. * Disposer d'une connexion à Internet configurée et activée. * Avoir activé l'accès au [[:depots#depots_officiels|Dépôts Universe de Canonical]]. ===== Installation ===== Pour installer ce logiciel, il suffit d'[[:tutoriel:comment_installer_un_paquet|installer les paquets]] **[[apt>yad]]**. Si vous n'aimez pas compiler vous pouvez ajouter le [[:tutoriel:comment_modifier_sources_maj|ppa]] de [[https://launchpad.net/~nilarimogard/+archive/ubuntu/webupd8|WebUpd8]] à vos sources. Yad évolue très vite, il peut être utile de compiler la dernière version. Pour satisfaire les dépendances, installez Yad par APT puis si vous voulez la dernière version, compilez-la comme suit. Vous devrez peut-être istaller gcc, libwebkitgtk-dev Pour avoir la dernière version, télécharger l'archive sur [[https://sourceforge.net/projects/yad-dialog/|la page officielle de Yad]] Décompressez-la ou vous voulez. Ouvrez un terminal cd /chemin/vers/le/dossier/décompressé ./configure make sudo make install L'auteur fourni une petite application qui permet de lister les icones pouvant être utilisées. Il vous faut également activer le widget --html. Procèder comme suit pour les installer. cd /chemin/vers/le/dossier/décompressé ./configure --enable-icon-browser --enable-html make sudo make install ===== Configuration ===== A complèter ===== Utilisation ===== Yad permet d'afficher plusieurs types de fenêtre : ^ Type de fenêtre ^ Argument ^ Description ^ | Sélection |''%%--calendar%%'' | Affiche un calendrier | | Sélection |''%%--color%%'' | Affiche un sélecteur de couleur | | Sélection |''%%--file%%'' | Affiche un sélecteur de fichiers/dossiers | | Sélection |''%%--font%%''| Affiche un sélecteur de police| | Selection |''%%--print%%'' | Affiche une boîte d'impression | | Entrée |''%%--dnd%%'' | Affiche une boîte de glisser/déposer | | Entrée |''%%--entry%%''| Affiche une boîte de saisie| | Entrée |''%%--scale%%''| Affiche un bouton glissant| | Affichage | | Affiche une boîte de dialogue (Peut être utilisé pour des informations ou des erreurs.).| | Affichage |''%%--icons%%'' | Pas encore testé | | Affichage |''%%--html%%'' | Affiche un navigateur| | Affichage |''%%--list%%'' | Affiche une liste| | Affichage |''%%--multi-progress%%'' | Affiche plusieurs barres de progresion | | Affichage |''%%--notification%%'' | Affiche une icone dans la zone de notification | | Affichage |''%%--progress%%'' | Affiche une barre de progression | | Affichage |''%%--text-info%%'' | Affiche le contenu d'un fichier texte | | Affichage |''%%--picture%%'' | Un simple visionneur d'images | | Multiples |''%%--form%%'' | Affiche une multitude de boîte | | Multiples |''%%--notebook%%'' | Affiche une boîte avec des onglets | | Multiple |''%%--paned%%''| Affiche une boîte en deux parties| [[http://manpages.ubuntu.com/manpages/wily/man1/yad.1.html|Pour plus d'infos, consulter les pages du manuel de Yad.]] ===== Exemples ===== [[https://code.google.com/archive/p/yad/wikis|Quelques exemples sur cette page]] ====--calendar==== Dans cet exemple le calendrier s'ouvrira à la date du jour et la sortie sera de format sam./27/juil./2019/ --title="Titre de la fenêtre": Indique le titre de votre fenêtre. --window-icon="yad": Affiche une icone dans la barre du titre (Selon votre thème.) et sur le bouton de la liste des fenêtres. jour=$(date +%d) mois=$(date +%m) annee=$(date +%Y) yad --calendar --day="$jour" --month="$mois" --year="$annee" --date-format=%a/%d/%b/%Y/ --title="Titre de la fenêtre" --window-icon="yad" ====--dnd==== #!/bin/bash yad --dnd \ --title="dnd dialog box" \ --window-icon="gtk-dnd-multiple" \ --width="200" --height="200" \ --center --on-top \ --undecorated \ --text="Glisser\nune\nimage." \ --text-align="center" --command="xdg-open" ====--entry==== Une boîte de recherche sur les pages en français de Google #!/bin/bash recherche=$(yad --entry --title='Recherche web' --text='Tapez votre recherche' --text-align="center" --no-escape --mouse --undecorated --skip-taskbar --on-top) recherche=$(echo "$recherche" | sed 's/ /+/g') xdg-open https://www.google.fr/search?q="$recherche"\&site=webhp\&source=lnt\&tbs=lr:lang_1fr\&lr=lang_fr ====--form==== C'est ici que Yad devient intêressant car il permet de cumuler plusieurs types de boîtes dans une seule fenêtre. Si l'on reprend l'exemple précédent vous pouvez entrer votre recherche et choisir le moteur le plus approprié. #!/bin/bash search=$(yad --title='Recherche web' --text='Tapez votre recherche' --text-align="center" --no-escape --mouse --undecorated --skip-taskbar --on-top \ --form \ --field="recherche:" '' \ --field="Moteur:CB" 'Forum ubuntu!^Google fr') rech=$(echo $search | awk 'BEGIN {FS="|" } { print $1 }') moteur=$(echo $search | awk 'BEGIN {FS="|" } { print $2 }') if [ "$moteur" = "Forum ubuntu" ] then rech=$(echo "$rech" | sed 's/^/+/;s/ /+/g') xdg-open https://www.google.fr/search?q=site:forum.ubuntu-fr.org"$rech" elif [ "$moteur" = "Google fr" ] then rech=$(echo "$rech" | sed 's/^/+/;s/ /+/g') xdg-open https://www.google.fr/search?q="$rech"\&lr=lang_fr fi ====--notification==== Reprenons l'exemple d'avant et mettons-le dans une icone. #!/bin/bash #####Commande qui permet de montrer/cacher la fenêtre function _commande () { commande=$(ps -ef | grep "yad --title=Recherche web --text=Tapez votre recherche" | sed 's/^.*grep.*$//' | sed -n "1p" | awk 'BEGIN { FS=" " } { print $2 }') if [ -n "$commande" ] then kill -9 "$commande" else _recherche fi } export -f _commande #####Recherche internet function _recherche () { search=$(yad --title='Recherche web' --text='Tapez votre recherche' --text-align="center" --no-escape --mouse --undecorated --skip-taskbar --on-top \ --form \ --field="recherche:" '' \ --field="Moteur:CB" 'Forum ubuntu!^Google fr') rech=$(echo $search | awk 'BEGIN {FS="|" } { print $1 }') moteur=$(echo $search | awk 'BEGIN {FS="|" } { print $2 }') if [ "$moteur" = "Forum ubuntu" ] then rech=$(echo "$rech" | sed 's/^/+/;s/ /+/g') xdg-open https://www.google.fr/search?q=site:forum.ubuntu-fr.org"$rech" elif [ "$moteur" = "Google fr" ] then rech=$(echo "$rech" | sed 's/^/+/;s/ /+/g') xdg-open https://www.google.fr/search?q="$rech"\&lr=lang_fr fi } export -f _recherche #####lancement yad --notification --no-middle --title="Recherche internet" --command="bash -c _commande" --text="Recherche internet" --image="search" --menu='Quitter!quit!exit' ====--notebook==== Une boite à onglets. #!/bin/bash #####ID --KEY Création aléatoire de l'id id=$(echo $[($RANDOM % ($[10000 - 32000] + 1)) + 10000] ) ##########Onglet 1########## #####Avec une colonne####### yad --plug="$id" --tabnum=1 --form --columns="1" --item-separator='!' --focus-field="1" --dialog-sep --align="center" \ --field="Fichier d'entrée:FL" "$HOME" \ --field=":LBL" "" \ --field="Fichier de sortie:SFL" "" \ &> /tmp/data1 & ##########Onglet 2########## #####Avec 3 colonnes######## yad --plug="$id" --tabnum=2 --form --columns="3" --item-separator='!' --focus-field="2" --dialog-sep --align="center" \ --field="Du texte.:LBL" "" \ --field="motif:" "" \ --field="bouton avec relief:FBTN" '' \ --field="Bouton sans relief:BTN" '' \ --field="bouton avec relief:FBTN" '' \ --field="Bouton sans relief:BTN" '' \ &> /tmp/data2 & yad --notebook --width="900" --height="700" --center --title="yad notebook" --window-icon="gnome-util" --key="$id" \ --tab="onglet 1" --tab="Onglet 2" \ --button="gtk-cancel:1" \ --button="gtk-ok:0" fermernotebook=$? if [ $fermernotebook -eq 252 ] then exit elif [ $fermernotebook -eq 1 ] then exit fi ===== Trucs et astuces ===== ==== États de sorties==== 0 L'utilisateur a appuyé sur le bouton OK 1 L'utilisateur a appuyé sur le bouton Annuler 70 La boîte de dialogue a été fermée parce que le délai d'attente a été atteint. (Dans le cas d'un timeout) 252 La boîte de dialogue a été fermé en appuyant sur la touche Echap ou en cliquant sur le bouton de fermeture de la barre du titre de la boîte de dialogue Les codes de sortie pour les boutons créés par l'utilisateur doivent être spécifiés dans la ligne de commande. Le code de sortie spécifié sera imprimé comme résultat . === Test sur les boutons=== #!/bin/bash yad --title="Tests sur les boutons." --window-icon="yad" --width="200" --height="200" --center --text="Cliquez sur le bouton\nValider." --text-align="center" echo "$?" yad --title="Tests sur les boutons." --window-icon="yad" --width="200" --height="200" --center --text="Cliquez sur le bouton\nAnnuler." --text-align="center" echo "$?" yad --title="Tests sur les boutons." --window-icon="yad" --width="200" --height="200" --center --text="Appuyez sur la touche\nEchap." --text-align="center" echo "$?" yad --title="Tests sur les boutons." --window-icon="yad" --width="200" --height="200" --center --text="Cliquer sur le bouton de\nfermeture de la barre du titre." --text-align="center" echo "$?" yad --title="Tests sur les boutons." --window-icon="yad" --width="200" --height="200" --center --text="Tests sur les\nboutons standard.\n\nTimeout\n\n" --text-align="center" --timeout="5" --timeout-indicator=top --undecorated --no-buttons echo "$?" Comme vous le constaté la fenêtre se ferme mais le script continu. Personnellement lorsque je clique sur le bouton de fermeture, le bouton Annuler ou la touche Echap je veux arrêter le script. Pour ce faire nous allons utiliser la [[:tutoriel/script_shell#les_variables|variable bash]] $? qui contient le code de retour de la dernière opération. Je me sert de [[:tutoriel/script_shell#la_structure_case|la structure case]] mais Il existe d'autre méthodes. #!/bin/bash yad --title="Tests sur les boutons." --window-icon="yad" --width="200" --height="200" --center --text="Cliquez sur le bouton\nValider." --text-align="center" case $? in 1) exit;; 70) exit;; 252) exit;; esac yad --title="Tests sur les boutons." --window-icon="yad" --width="200" --height="200" --center --text="Cliquez sur le bouton\nAnnuler." --text-align="center" echo "$?" ====Les boutons.==== ===Comportements=== Il y-a deux types de comportements: Si la sortie est numérique, la fenêtre se ferme. Si la sortie est non numérique, la fenêtre reste ouverte. yad --width="300" --height="300" --text='Boutons standards:\nla sortie sera 0, 1, 70 ou 252' yad --width="300" --height="300" --text="Bouton personnalisé:\nLa fenêtre s'est fermée car la sortie est numérique.\n Le bouton ci-dessous ne fermera pas la fenêtre\ncar la sortie n'est pas numérique mais le bouton de fermeture de la fenêtre et la touche d'échappement fermeront la fenêtre car les sorties sont numériques." --button='add:echo "La fenêtre reste ouverte."' ===Décorations=== Pour personnaliser les boutons vous pouvez: Utiliser ceux prédéfinis gtk-stock (ex: gtk-close ou gtk-ok). Définir vos propres options sous la forme LABEL[!ICON[!TOOLTIP]] où LABEL est le texte du bouton, ICON est l'icone du bouton et TOOLTIP est le texte qui s'affichera au survol du bouton (Le séparateur par défaut est "!". yad --width="300" --height="300" --text="Bouton personnalisé avec gtk-add." --button='gtk-add:0"' yad --width="300" --height="300" --text="Bouton personnalisé avec LABEL[!ICON[!TOOLTIP]]." --button='Mon bouton!search!Ceci est mon bouton personnalisé:0"' L'icone peut-être définie par son chemin complet ou par une icone système (Dans mon exemple "search".). ====Récupérer les sorties dans les boîtes multiples.==== Dans les boîtes multiples la sortie standard sera de type champ1|champ2|champ3| où "|" est le séparateur par défaut. Pour récupérer les champs il est donc pratique d'utiliser awk et les variables. #Envoi de la sortie dans une variable. champs=$(yad --title="Mon titre" --text="Mon texte." --text-align="center" \ --form \ --field="champ 1:" '' \ --field="champ 2:" '' \ --field="champ 3:" '') echo "$champs" #Récupération des champs avec awk. champ1=$(echo $champs | awk 'BEGIN {FS="|" } { print $1 }') champ2=$(echo $champs | awk 'BEGIN {FS="|" } { print $2 }') champ3=$(echo $champs | awk 'BEGIN {FS="|" } { print $3 }') #Affichage des champs. echo "$champ1" echo "$champ2" echo "$champ3" ===== Désinstallation ===== Pour supprimer cette application, il suffit de [[:tutoriel:comment_supprimer_un_paquet|supprimer son paquet]]. Selon la méthode choisie, la configuration globale de l'application est conservée ou supprimée. Les journaux du système, et les fichiers de préférence des utilisateurs dans leurs dossiers personnels sont toujours conservés. ===== Voir aussi ===== * **(en)** [[https://sourceforge.net/projects/yad-dialog|Site officiel du logiciel]] * **(en)** [[https://groups.google.com/forum/#!forum/yad-common|Forum de discution du logiciel. L'auteur y participe souvent.]] ---- //Contributeurs principaux : [[sergeG75018]].// //Basé sur [[http://manpages.ubuntu.com/manpages/wily/man1/yad.1.html|« les pages du manuel »]].//