использовать следующие виджиты:
♦ Infobox, Msgbox — выводят информационные сообщения;
♦ Inputbox — принимает ввод текстовой информации;
♦ Calendar — позволяет выбрать дату;
♦ Radiolist — список зависимых переключателей;
♦ Checklist — список независимых переключателей;
♦ Menubox — используется для организации меню;
♦ Gauge — шкала прогресса.
Установив пакет dialog, в каталоге /usr/share/doc/dialog-<версия>
вы найдете много примеров применения этого замечательного пакета.
25.2. Сообщения
Начнем с самого простого — отображения небольших текстовых сообщений. Для этой цели можно использовать два виджита — Infobox или Msgbox. Первый отличается от второго тем, что не ждет подтверждения пользователя о прочтении, а закрывается через некоторое время. Виджит Msgbox ждет, пока пользователь нажмет кнопку OK или клавишу Enter.
Рассмотрим пример использования виджита Msgbox:
Листинг 25.1. Виджит Msgbox
#!/bin/sh
DIALOG=${DIALOG=dialog}
$DIALOG --title 'MESSAGE BOX' --clear
--msgbox 'Этот виджит используется для вывода
сообщений. Ждет, пока пользователь нажмет Enter' 10 41
case $? in
0)
echo 'OK';;
255)
echo 'Нажата ESC.';;
esac
Теперь разберемся, что есть что. Параметр --title программы dialog задает заголовок виджита (рис. 25.1) Параметр --msgbox сообщает программе тип виджита, который нужно отобразить. После этого параметра нужно указать текст сообщения, заключенный в кавычки. В тексте можно использовать управляющие последовательности (, , , a и др.). После сообщения задаются размеры виджита.
Рис. 25.1. Виджит Msgbox
Конструкция case проверяет возвращенное программой dialog значение. Если пользователь нажал OK (или <Ввод>), то программа возвращает 0, а если клавишу Esc, то 255.
Виджит Infobox следует использовать так:
Листинг 25.2. Использование виджита Infobox
#! /bin/sh
DIALOG=${DIALOG=dialog}
# ждем указанное количество секунд
left=10
unit='секунд'
while test $left != 0
do
$DIALOG --sleep 1
--title 'INFO BOX'
--infobox 'Это информационный бокс. Он отличается от
msgbox тем, что не ждёт, пока пользователь нажмет Enter,
а прекращает работу по истечении времени
(в данном примере - 10 секунд).
У вас $left $unit чтобы прочитать это сообщение...' 10 52
left=`expr $left — 1`
test $left = 1 && unit='second'
done
Параметр --sleep 1
означает, что программа dialog
будет перерисовывать окно через одну секунду. Параметр --title
задает заголовок виджита, --infobox
— определяет тип виджита, после определения виджита следует отображаемое сообщение, а потом — размер виджита.
В цикле while мы проверяем, сколько секунд осталось, уменьшая значение переменной left.
25.3. Виджит Yes-no
Часто встречаются диалоговые окна, спрашивающие пользователя, согласен ли он с действиями программы, например, «Вы точно хотите выйти?» или «Удалить этот файл?». Пользователю же предлагается два варианта ответа — Да или Нет. Для организации такого диалога предназначен виджит yes-no.
Следующий листинг демонстрирует работу с этим виджитом:
Листинг 25.3. Работа с виджитом yes-no
#!/bin/sh
DIALOG=${DIALOG=dialog}
$DIALOG --title 'YES/NO BOX' --clear
--yesno 'Отформатировать /dev/hda1?' 5 41
case $? in
0)
echo 'Да.';;
1)
echo 'Нет.';;
255)
echo 'ESC.';;
esac
Рис. 25.2. Виджит yes-no
Виджит используется так же, как и предыдущие: название виджита (yesno), текстовое сообщение, размеры виджита. Программа dialog возвращает следующие значения:
♦ 0, если пользователь нажал кнопку Yes;
♦ 1, если пользователь нажал кнопку No;
♦ 255, если пользователь нажал клавишу Esc.