Создать диалоговое окно обратного отсчета для терминала Linux? - PullRequest
2 голосов
/ 26 августа 2009

Как создать диалоговый виджет для консоли Linux (не X, а «терминальной» консоли), который бы отображал обратный отсчет в секундах рядом с виджетом, который может быть списком меню или текстовым полем?

В идеале это может быть отдельная программа, такая как диалог, которая предоставляет параметры для управления ее поведением.

Когда обратный отсчет достигает 0, возвращается выбранное значение виджета. Может быть значение по умолчанию, если человек не присутствует (или человек предпочитает значение по умолчанию). Такие загрузчики, как grub и lilo, уже могут это делать. Я просмотрел справочную страницу диалога и не смог найти этот набор функций.

Пока пробовал:

dialog --timeout 30 --menu 'Menu Title' 20 60 3 'A' 'Choose A' 'B' 'Choose B' 'C' 'Choose C' близко, но не показывает 30-секундный таймер, тикающий вниз.

dialog --pause 'Hurry!' 10 60 30 -- показывает сообщение и ок / отмена при работающем таймере, но является только промежуточным, а не для пользовательского ввода.

Возможно объединить несколько строк следующим образом:

dialog --menu 'Menu Title' 10 60 3 'A' 'Choose A' 'B' 'Choose B' 'C' 'Choose C' --pause 'Hurry up' 10 60 30 

но это показывает, что виджеты последовательно, а не объединены на одной странице. Здесь после ответа по меню без таймера вы получите сообщение с таймером.

Ответы [ 3 ]

3 голосов
/ 13 декабря 2013

Чтобы придерживаться диалогового окна, я решил похожую проблему, разделив ее на два диалоговых окна. Сначала появляется диалоговое окно со значением по умолчанию (и, возможно, альтернативным выбором), отображаемым на экране, и у него есть таймер обратного отсчета. Пользователь может нажать клавишу esc или нажать «Отмена», чтобы изменить параметр, или обратный отсчет достигнет 0, и программа продолжит работу с настройками по умолчанию. Если пользователь нажимает escape, появляется второе диалоговое окно, которое позволяет редактировать параметры. Я не хотел добавлять дополнительное программное обеспечение в нашу сборку ОС для deb-live / clonezilla, поэтому мне пришлось искать способ с помощью диалога.

dialog --title Some options to choose from, showing default --pause "\n\n Do you accept these options?:  \n  ${options_in_nice_format_for_display}" 20 60 5
[ $? -ne 0 ] && EDIT_IP=true || EDIT_IP=false

if ${EDIT_IP}; then
    dialog --editbox ${MY_OPTIONS_FILE} 20 60 2> ${EDITED_OPTIONS_FILE}
fi

Для еще лучшего решения (которое я использовал, но не хотел добавлять здесь лишний код), вы можете добавить цикл while, обусловленный логическим значением, и разрешать повторения изменений до тех пор, пока пользователь не будет удовлетворен.

2 голосов
/ 26 августа 2009

Я предлагаю вам прочитать справочную страницу dialog. О, ты уже сказал? Тогда что не так с:

- пауза высота текста ширина секунды

В окне паузы отображается метр вдоль нижней части окна. Измеритель показывает, сколько секунд осталось до конца паузы. Пауза завершается, когда истекает время ожидания, или пользователь нажимает кнопку ОК (состояние ОК), или пользователь нажимает кнопку ОТМЕНА или клавишу Esc.

1 голос
/ 26 августа 2009

Я считаю, Ncurses это то, что вы ищете.

...