Я нашел случайно, что было возможно отобразить поле комбинированного списка с 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 изображениями:
У меня есть два вопроса об этом:
Существует ли документация об этой функциональности? Я ничего не нашел в zenity документации.
Почему первое значение моего массива не появляется в поле комбинированного списка? В примере выше, мой массив (a b c d e)
, и поле комбинированного списка только отображается b c d e
.
Как обходное решение, я добавляю значение в своем массиве, например (0 a b c d e)
.
Первый элемент массива съеден --text
. После расширения Ваша zenitiy строка похожа:
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[@]}"
Я думаю, что Вы хотите использовать --text-entry
для массива значений, нет --text
(ссылка). Используя:
#!/bin/bash
array=(a b c d e)
value=$(zenity --entry --title "Window title" --entry-text "${array[@]}" --text "Insert your choice.")
Я вижу значение по умолчанию выпадающего поля, предварительно заполненного первым значением массива и всеми доступными значениями.
Это на самом деле документируется (возможно, не в то время, когда вопрос был отправлен, не проверял), не в руководстве, а в 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"