Wo ist die Verwendung von Kombinationsfeldern mit Zenity dokumentiert?

11

Ich fand zufällig, dass es möglich war, ein Kombinationsfeld mit Zenity anzuzeigen (getestete Version: 2.32.1). Siehe folgenden Code:

#!/bin/bash
array=(a b c d e)
value=$(zenity --entry --title "Window title" --text "${array[@]}" --text "Insert your choice.")

Das Ergebnis wird mit den folgenden 3 Bildern dargestellt:

Geben Sie hier die Bildbeschreibung ein

Geben Sie hier die Bildbeschreibung ein

Geben Sie hier die Bildbeschreibung ein

Ich habe zwei Fragen dazu:

  1. Gibt es eine Dokumentation zu dieser Funktionalität? Ich habe nichts in der Zenity-Dokumentation gefunden .

  2. Warum wird der erste Wert meines Arrays nicht im Kombinationsfeld angezeigt? Im obigen Beispiel ist mein Array (a b c d e)und das Kombinationsfeld wird nur angezeigt b c d e.

    Um dieses Problem zu umgehen, füge ich meinem Array beispielsweise einen Wert hinzu (0 a b c d e).

jpfleury
quelle

Antworten:

5

Das erste Element des Arrays wird von aufgefressen --text. Nach der Erweiterung sieht Ihre Zenitiy-Linie folgendermaßen aus:

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

aSie setzen also zuerst den Text auf und überschreiben ihn dann mit "Fügen Sie Ihre Wahl ein". Und die restlichen Argumente werden zur Wahl.

Was Sie wollen ist:

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[@]}"
Geirha
quelle
4

Dies ist tatsächlich dokumentiert (möglicherweise nicht zum Zeitpunkt der Veröffentlichung der Frage, nicht überprüft), nicht im Handbuch, sondern in 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

Deshalb:

zenity --forms --title "Window title" --text "Combo name" --add-combo "Insert your choice." --combo-values "a|b|c|d|e"
Skippy le Grand Gourou
quelle
3

Ich denke, Sie möchten --text-entryfür das Array von Werten verwenden, nicht --text( Referenz ). Verwenden von:

#!/bin/bash
array=(a b c d e)
value=$(zenity --entry --title "Window title" --entry-text "${array[@]}" --text "Insert your choice.")

Ich sehe den Standardwert des Dropdown-Felds, das mit dem ersten Wert des Arrays vorgefüllt ist, und alle verfügbaren Werte.

pwlars
quelle
Danke für die Antwort. Es ist merkwürdig, dass sich das Handbuch nicht auf das Kombinationsfeld bezieht.
jpfleury