Где документированное использование поля со списком в zenity?

11

Я обнаружил, что было возможно отобразить комбинированное окно с zenity (проверенная версия: 2.32.1). Смотрите следующий код:

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

Результат иллюстрируется следующими 3 изображениями:

введите описание изображения здесь

введите описание изображения здесь

введите описание изображения здесь

У меня есть два вопроса по этому поводу:

  1. Есть ли документация по этому функционалу? Я не нашел ничего в документации по zenity .

  2. Почему первое значение моего массива не отображается в поле со списком? В приведенном выше примере мой массив есть (a b c d e), и поле со списком только отображается b c d e.

    В качестве обходного пути, например, я добавляю значение в свой массив (0 a b c d e).

СЭП
источник

Ответы:

5

Первый элемент массива съедается --text. После расширения ваша зенитная линия выглядит так:

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

Поэтому сначала вы устанавливаете текст на a, а затем перезаписываете его «Вставить свой выбор». И оставшиеся аргументы становятся выбором.

То, что вы хотите, это:

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
источник
4

Это на самом деле задокументировано (возможно, не в тот момент, когда вопрос был опубликован, не проверял), не в руководстве, а в 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

Следовательно:

zenity --forms --title "Window title" --text "Combo name" --add-combo "Insert your choice." --combo-values "a|b|c|d|e"
Скиппи ле Гран Гуру
источник
3

Я думаю, что вы хотите использовать --text-entryдля массива значений, а не --text( ссылка ). С помощью:

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

Я вижу значение по умолчанию раскрывающегося списка, предварительно заполненное первым значением массива, и все доступные значения.

pwlars
источник
Спасибо за ответ. Любопытно, что в руководстве не упоминается поле со списком.
СЭП