J'ai trouvé par hasard qu'il était possible d'afficher une liste déroulante avec zenity (version testée: 2.32.1). Voir le code suivant:
#!/bin/bash
array=(a b c d e)
value=$(zenity --entry --title "Window title" --text "${array[@]}" --text "Insert your choice.")
Le résultat est illustré par les 3 images suivantes:
J'ai deux questions à ce sujet:
Existe-t-il une documentation sur cette fonctionnalité? Je n'ai rien trouvé dans le documentation zenity .
Pourquoi la première valeur de mon tableau n'apparaît pas dans la liste déroulante? Dans l'exemple ci-dessus, mon tableau est (a b c d e)
et la liste déroulante affiche uniquement b c d e
.
En guise de solution de contournement, j'ajoute une valeur dans mon tableau, par exemple (0 a b c d e)
.
Le premier élément du tableau est mangé par --text
. Après expansion, votre ligne zenitiy ressemble à ceci:
zenity --entry --title "Window title" --text a b c d e --text "Insert your choice."
# Which zenity treats equivalent to
zenity --entry --title "Window title" --text a --text "Insert your choice." b c d e
Ainsi, vous définissez d'abord le texte sur a
, puis vous le remplacez par "Insérez votre choix". Et les arguments restants deviennent les choix.
Ce que tu veux c'est:
zenity --entry --title "Window title" --text "Insert your choice." a b c d e
# Hence:
zenity --entry --title "Window title" --text "Insert your choice." "${array[@]}"
C'est en fait documenté (peut-être pas au moment où la question a été postée, n'a pas vérifié), pas dans le manuel mais dans zenity --help-forms
:
$ LANG=en_US zenity --help-forms
Usage:
zenity [OPTION...]
Forms dialog options
--forms Display forms dialog
--add-entry=Field name Add a new Entry in forms dialog
--add-password=Field name Add a new Password Entry in forms dialog
--add-calendar=Calendar field name Add a new Calendar in forms dialog
--add-list=List field and header name Add a new List in forms dialog
--list-values=List of values separated by | List of values for List
--column-values=List of values separated by | List of values for columns
--add-combo=Combo box field name Add a new combo box in forms dialog
--combo-values=List of values separated by | List of values for combo box
--show-header Show the columns header
--text=TEXT Set the dialog text
--separator=SEPARATOR Set output separator character
--forms-date-format=PATTERN Set the format for the returned date
Donc:
zenity --forms --title "Window title" --text "Combo name" --add-combo "Insert your choice." --combo-values "a|b|c|d|e"
Je pense que vous voulez utiliser --text-entry
pour le tableau de valeurs, pas --text
( référence ). En utilisant:
#!/bin/bash
array=(a b c d e)
value=$(zenity --entry --title "Window title" --entry-text "${array[@]}" --text "Insert your choice.")
Je vois la valeur par défaut de la liste déroulante pré-remplie avec la première valeur de array et toutes les valeurs disponibles.