Différences
Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédente | ||
yad_yet_another_dialog [Le 31/08/2019, 23:37] zococo [--form] |
yad_yet_another_dialog [Le 28/09/2022, 21:04] (Version actuelle) Amiralgaby correction de certain script shell repéré grâce à wiki-corrector |
||
---|---|---|---|
Ligne 7: | Ligne 7: | ||
//Traduction de la description sur le site officiel de Yad.// ((YAD (yet another dialog) is a tool for create graphical dialogs from shell scripts)) | //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** (« Yet Another Dialog », « 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]] | + | **Yad** est un fork de [[:Zenity|Zenity]]. |
- | Ses avantages par rapport à Zenity sont l'intégration de plusieurs contrôles sur une même fenêtre (voir le paramètre --form) | + | Ses avantages par rapport à Zenity sont l'intégration de plusieurs contrôles sur une même fenêtre (voir le paramètre %%--%%form) |
===== Auteurs ===== | ===== Auteurs ===== | ||
Ligne 49: | Ligne 49: | ||
<note> | <note> | ||
L'auteur fourni une petite application qui permet de lister les icônes pouvant être utilisées. | L'auteur fourni une petite application qui permet de lister les icônes pouvant être utilisées. | ||
- | Il vous faut également activer le widget --html. | + | Il vous faut également activer le widget %%--%%html. |
Procèder comme suit pour les installer. | Procèder comme suit pour les installer. | ||
</note> | </note> | ||
Ligne 76: | Ligne 76: | ||
| Affichage |''%%--html%%'' | Affiche un navigateur| | | Affichage |''%%--html%%'' | Affiche un navigateur| | ||
| Affichage |''%%--list%%'' | Affiche une liste| | | Affichage |''%%--list%%'' | Affiche une liste| | ||
- | | Affichage |''%%--multi-progress%%'' | Affiche plusieurs barres de progresion | | + | | Affichage |''%%--multi-progress%%'' | Affiche plusieurs barres de progression | |
| Affichage |''%%--notification%%'' | Affiche une icone dans la zone de notification | | | Affichage |''%%--notification%%'' | Affiche une icone dans la zone de notification | | ||
| Affichage |''%%--progress%%'' | Affiche une barre de progression | | | Affichage |''%%--progress%%'' | Affiche une barre de progression | | ||
Ligne 90: | Ligne 90: | ||
==== Types de champs de la fenêtre form (formulaire) ==== | ==== Types de champs de la fenêtre form (formulaire) ==== | ||
Les formulaires permettent de décliner les différentes options de yad dans la même fenêtre. | Les formulaires permettent de décliner les différentes options de yad dans la même fenêtre. | ||
- | Les types de champs de formulaire sont saisis sous la forme | + | Les types de champs de formulaire sont saisis sous la forme |
- | --field="LABEL"[:TYPE] | + | %%--%%field="LABEL"[:TYPE] |
Les types de champs sont les suivants : H, RO, NUM, CHK, CB, CBE, CE, FL, SFL, DIR, CDIR, FN, MFL, MDIR, DT, SCL, CLR, BTN, FBTN, LBL, TXT. || | Les types de champs sont les suivants : H, RO, NUM, CHK, CB, CBE, CE, FL, SFL, DIR, CDIR, FN, MFL, MDIR, DT, SCL, CLR, BTN, FBTN, LBL, TXT. || | ||
^Type de champ^ Utilisation^ | ^Type de champ^ Utilisation^ | ||
Ligne 123: | Ligne 123: | ||
Dans cet exemple le calendrier s'ouvrira à la date du jour et la sortie sera de format sam./27/juil./2019/ | 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. | + | %%--%%title="Titre de la fenêtre": Indique le titre de votre fenêtre. |
- | --window-icon="yad": Affiche une icône dans la barre du titre (Selon votre thème.) et sur le bouton de la liste des fenêtres. | + | %%--%%window-icon="yad": Affiche une icône dans la barre du titre (Selon votre thème.) et sur le bouton de la liste des fenêtres. |
<code> | <code> | ||
jour=$(date +%d) | jour=$(date +%d) | ||
Ligne 150: | Ligne 150: | ||
#!/bin/bash | #!/bin/bash | ||
recherche=$(yad --entry --title='Recherche web' --text='Tapez votre recherche' --text-align="center" --no-escape --mouse --undecorated --skip-taskbar --on-top) | 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') | + | recherche=${recherche// /+} |
- | xdg-open https://www.google.fr/search?q="$recherche"\&site=webhp\&source=lnt\&tbs=lr:lang_1fr\&lr=lang_fr | + | xdg-open "https://www.google.fr/search?q=$recherche&site=webhp&source=lnt&tbs=lr:lang_1fr&lr=lang_fr" |
</code> | </code> | ||
====--form==== | ====--form==== | ||
Ligne 179: | Ligne 179: | ||
--field="recherche:" '' \ | --field="recherche:" '' \ | ||
--field="Moteur:CB" 'Forum ubuntu!^Google fr') | --field="Moteur:CB" 'Forum ubuntu!^Google fr') | ||
- | rech=$(echo $search | awk 'BEGIN {FS="|" } { print $1 }') | + | rech=$(echo "$search" | awk 'BEGIN {FS="|" } { print $1 }') |
- | moteur=$(echo $search | awk 'BEGIN {FS="|" } { print $2 }') | + | moteur=$(echo "$search" | awk 'BEGIN {FS="|" } { print $2 }') |
if [ "$moteur" = "Forum ubuntu" ] | if [ "$moteur" = "Forum ubuntu" ] | ||
then | then | ||
Ligne 197: | Ligne 197: | ||
<code>yad --notification</code> | <code>yad --notification</code> | ||
- | On peux changer l’icône avec le paramètre **--image** | + | On peux changer l’icône avec le paramètre **%%--%%image** |
<code>yad --notification --image="gtk-help"</code> | <code>yad --notification --image="gtk-help"</code> | ||
<code>yad --notification --image="system-software-update"</code> | <code>yad --notification --image="system-software-update"</code> | ||
Exemple avec un script faisant les mises à jour et affichant avec une icône dans la zone de notification pour le signaler : | Exemple avec un script faisant les mises à jour et affichant avec une icône dans la zone de notification pour le signaler : | ||
- | <code>#!/bin/bash | + | <code> |
+ | #!/bin/bash | ||
MSG="Mise à jour du système en cours, n'éteignez pas l'ordinateur..." | MSG="Mise à jour du système en cours, n'éteignez pas l'ordinateur..." | ||
notify-send "$MSG" | notify-send "$MSG" | ||
- | faireMaJ () { (sudo apt update ; sudo apt full-upgrade) > /dev/null; quit ; } | + | faireMaJ () { (sudo apt update ; sudo apt full-upgrade) > /dev/null; } |
faireMaJ | yad --notification --no-middle --text="$MSG" --image="system-software-update" --command="zenity --info --text \"$MSG\"" --listen | faireMaJ | yad --notification --no-middle --text="$MSG" --image="system-software-update" --command="zenity --info --text \"$MSG\"" --listen | ||
- | exit 0</code> | + | </code> |
{{::yad.3.png?400|}} | {{::yad.3.png?400|}} | ||
Ligne 236: | Ligne 237: | ||
--field="recherche:" '' \ | --field="recherche:" '' \ | ||
--field="Moteur:CB" 'Forum ubuntu!^Google fr') | --field="Moteur:CB" 'Forum ubuntu!^Google fr') | ||
- | rech=$(echo $search | awk 'BEGIN {FS="|" } { print $1 }') | + | rech=$(echo "$search" | awk 'BEGIN {FS="|" } { print $1 }') |
- | moteur=$(echo $search | awk 'BEGIN {FS="|" } { print $2 }') | + | moteur=$(echo "$search" | awk 'BEGIN {FS="|" } { print $2 }') |
if [ "$moteur" = "Forum ubuntu" ] | if [ "$moteur" = "Forum ubuntu" ] | ||
then | then | ||
Ligne 257: | Ligne 258: | ||
#!/bin/bash | #!/bin/bash | ||
#####ID --KEY Création aléatoire de l'id | #####ID --KEY Création aléatoire de l'id | ||
- | id=$(echo $[($RANDOM % ($[10000 - 32000] + 1)) + 10000] ) | + | id=$(($RANDOM % ($((10000 - 32000)) + 1) + 10000)) |
##########Onglet 1########## | ##########Onglet 1########## | ||
#####Avec une colonne####### | #####Avec une colonne####### | ||
Ligne 304: | Ligne 305: | ||
else | else | ||
retour=$(yad --title="Fichier à afficher" --width 800 --height 200 --text-align="center" --list --radiolist --column="Sélectionné" --column="Fichier" --column="Mis à jour" --column="Utillisé" False "$HOME/Documents/FichierUn" "Non" "Non" False "$HOME/Documents/FichierDEux" "Oui" "Non" True "$HOME/Documents/FichierTrois" "Oui" "Non") | retour=$(yad --title="Fichier à afficher" --width 800 --height 200 --text-align="center" --list --radiolist --column="Sélectionné" --column="Fichier" --column="Mis à jour" --column="Utillisé" False "$HOME/Documents/FichierUn" "Non" "Non" False "$HOME/Documents/FichierDEux" "Oui" "Non" True "$HOME/Documents/FichierTrois" "Oui" "Non") | ||
- | cat $(echo "$retour" | cut -d'|' -f2) | + | cat "$(echo "$retour" | cut -d'|' -f2)" |
fi | fi | ||
- | exit 0; | ||
</code> | </code> | ||
{{ :yad_disco_00_radiolist.png?direct&800 |}} | {{ :yad_disco_00_radiolist.png?direct&800 |}} | ||
Ligne 319: | Ligne 319: | ||
{{ :yad_disco_01_checklist.png?direct&800 |}} | {{ :yad_disco_01_checklist.png?direct&800 |}} | ||
<note tip>Bien qu'étant qualifiée d'obsolète par certains sites, l'option --radiolist permet donc de limiter la sélection à un seul choix quand --checklist permet d'en faire plusieurs. Une autre manière de pouvoir sélectionner plusieurs items sans afficher de case à cocher consite à utiliser l'option --multiple avec --list.</note> | <note tip>Bien qu'étant qualifiée d'obsolète par certains sites, l'option --radiolist permet donc de limiter la sélection à un seul choix quand --checklist permet d'en faire plusieurs. Une autre manière de pouvoir sélectionner plusieurs items sans afficher de case à cocher consite à utiliser l'option --multiple avec --list.</note> | ||
- | ===== Trucs et astuces ===== | + | ===== Pango Markup Language - mettre en forme un texte ===== |
- | ==== États de sorties==== | + | Le langage de Markup Pango est un langage de mise en forme très simple qui est supporté par Yad. Il permet de mettre en forme le texte via des balises <span></span>. |
- | 0 L'utilisateur a appuyé sur le bouton OK | + | |
+ | Quelques balises inspirées du html existent aussi (sans balise <span>) : <b> pour gras, <u> pour souligné ... | ||
- | 1 L'utilisateur a appuyé sur le bouton Annuler | + | La liste des balises autorisées se trouvent ici : [[https://developer.gnome.org/pygtk/stable/pango-markup-language.html]] |
+ | |||
+ | Exemples : | ||
+ | |||
+ | **font_desc** : ''%%--%%text="une <span font_desc='Sans italic 10'>Maison</span> neuve"'' affiche le mot **maison** dans une police ''sans'', en italique, avec une taille de 10. | ||
+ | |||
+ | **font_desc** : ''%%--%%text="une <span font_desc='Sans italic 10' strikethrough='true'>Maison</span> neuve"'' affiche le mot **maison** dans une police ''sans'', en italique, avec une taille de 10 et barrée (strikethrough) | ||
+ | |||
+ | **souligné** : ''%%--%%text="une <u>Maison</u> neuve"'' affiche le mot **maison** en souligné. | ||
+ | |||
+ | |||
+ | ===== Trucs et astuces ===== | ||
+ | ==== États de sorties==== | ||
+ | Voilà le code (testable) renvoyé par **yad** quand on appuie sur certains boutons pour quitter une boite de dialogue : | ||
+ | **0** : L'utilisateur a appuyé sur le bouton OK | ||
- | 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) | + | **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ée 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 | + | **252** : La boîte de dialogue a été fermée 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 |
Ligne 353: | Ligne 368: | ||
echo "$?" | echo "$?" | ||
</code> | </code> | ||
- | Comme vous le constaté la fenêtre se ferme mais le script continu. | + | Comme vous le constatez 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. | Personnellement lorsque je clique sur le bouton de fermeture, le bouton Annuler ou la touche Echap je veux arrêter le script. | ||
Ligne 401: | Ligne 416: | ||
===Fermer la fenêtre et lancer une action=== | ===Fermer la fenêtre et lancer une action=== | ||
- | Il est possible d'affecter une action à un bouton yad. | + | Il est possible d'affecter une action à un bouton yad. |
<code> | <code> | ||
yad --form --field "Bouton 1:btn" --field "Bouton 2:btn" --field "Bouton 3:btn" "echo 'bouton n°1 cliqué'" "echo 'bouton n°2 cliqué'" "echo 'bouton n°3 cliqué'" | yad --form --field "Bouton 1:btn" --field "Bouton 2:btn" --field "Bouton 3:btn" "echo 'bouton n°1 cliqué'" "echo 'bouton n°2 cliqué'" "echo 'bouton n°3 cliqué'" | ||
Ligne 439: | Ligne 454: | ||
echo "$champ3" | echo "$champ3" | ||
</code> | </code> | ||
+ | Une autre méthode consiste à éclater l'ensemble des valeurs dans un tableau en modifiant **temporairement** la valeur de la variable interne bash $IFS qui détermine le séparateur par défaut (en général l'espace). | ||
+ | <code> | ||
+ | usr@pc:~$ ANC_IFS="$IFS"; IFS='|' read -ra LesParametres <<< "$retour" ; IFS="$ANC_IFS" | ||
+ | usr@pc:~$ echo "Champs 1 : ""${LesParametres[0]}" | ||
+ | usr@pc:~$ echo "Champs 2 : ""${LesParametres[1]}" | ||
+ | usr@pc:~$ echo "Champs 3 : ""${LesParametres[2]}" | ||
+ | </code> | ||
+ | Explications : | ||
+ | * ANC_IFS="$IFS" : stockage de la valeur initiale de $IFS dans une nouvelle variable $ANC_IFS | ||
+ | * IFS='|' : la valeur de $IFS est fixée à |, le caractère de séparation des champs à la sortie de yad | ||
+ | * read -ra LesParametres <<< "$retour" : affecte l'ensemble des champs dans le tableau $LesParametres. La valeur du premier champ de $retour est insérée dans la case d'indice 0 de $LesParametres, celle du deuxième champ dans la case d'indice 1 et ainsi de suite | ||
+ | * IFS="$ANC_IFS" : la valeur initiale de $IFS est rétablie | ||
+ | * Pour accéder à la valeur de chaque champ, il suffit d'accéder à la case d'indice correspondant dans le tableau $LesParametres qui est affichée par ${LesParametres[i]} ou i est l'indice de la case. | ||
==== Gestion d'erreur : Gtk-Message ==== | ==== Gestion d'erreur : Gtk-Message ==== | ||
- | L'utilisation de fenêtres gtk génère l'affichage d'un message d'erreur dans la console. | + | L'utilisation de fenêtres gtk génère l'affichage d'un message d'erreur dans la console. |
<code> | <code> | ||
usr@pc:~/Rep$ Gtk-Message: GtkDialog mapped without a transient parent. This is discouraged. | usr@pc:~/Rep$ Gtk-Message: GtkDialog mapped without a transient parent. This is discouraged. | ||
Ligne 462: | Ligne 490: | ||
* **(en)** [[http://www.thelinuxrain.com/articles/multiple-item-data-entry-with-yad|Exemples sur les items multiples]] | * **(en)** [[http://www.thelinuxrain.com/articles/multiple-item-data-entry-with-yad|Exemples sur les items multiples]] | ||
* **(en)** [[https://pypi.python.org/pypi?name=yad&version=0.9.3&:action=display|Ajouter Yad à vos scripts Python (non testé)]] | * **(en)** [[https://pypi.python.org/pypi?name=yad&version=0.9.3&:action=display|Ajouter Yad à vos scripts Python (non testé)]] | ||
- | + | ||
---- | ---- | ||
- | //Contributeurs principaux : [[sergeG75018]], LukePerp.// | + | //Contributeurs principaux : [[sergeG75018]], LukePerp., [[utilisateurs:amiralgaby]]// |
//Basé sur [[http://manpages.ubuntu.com/manpages/wily/man1/yad.1.html|« les pages du manuel »]].// | //Basé sur [[http://manpages.ubuntu.com/manpages/wily/man1/yad.1.html|« les pages du manuel »]].// | ||
- | |||
- | |||
- | |||
- | |||
- | |||
- | |||
- | |||
- | |||
- | |||
- |