Что такое диалоговое окно команды


Что такое диалоговое окно? Разделы диалогового окна :: SYL.ru

Все современные программы и операционные системы имеют графический интерфейс. Это облегчает работу с приложениями – больше не требуется вручную вводить команды, достаточно их выбрать из списка или поставить галочки в нужных местах. Программы взаимодействует с пользователем с помощью диалоговых окон. Они могут появляться сами в процессе работы, кроме того, пользователь может вручную вызвать диалоговое окно, параметры которого нужно изменить.

Особенности и внешний вид

Внешне этот элемент интерфейса похож на стандартное окно Windows. В нем также присутствует строка заголовка, потянув за который, можно перенести окно в любое место экрана. Но есть и отличия. Диалоговое окно имеет фиксированный размер – его нельзя развернуть или свернуть. Также в верхнем правом углу часто находится иконка в виде знака вопроса. Щелчок по ней открывает справку по работе с конкретным элементом.

Диалоговые окна часто делают модальными, то есть пока пользователь не введет нужные данные или каким-нибудь образом не отреагирует на появившийся элемент, он не сможет переключиться на другие задачи.

Окно сообщений

Это самый простой и распространенный вид диалогового окна. Его применяют в качестве страховки от необратимых действий со стороны пользователя. Например, оно всегда выскакивает при удалении файла – система запрашивает подтверждение, чтобы случайно не были удалены нужные данные.

Часто это просто информационное сообщение, например, об окончании компьютерной игры, и тогда от пользователя потребуется только нажать кнопку "OK".

Ввод информации

Иногда в процессе работы приложения требуется указать данные произвольного формата. Тогда на помощь приходит окно ввода данных. Для этих целей служит текстовое поле. В офисных пакетах оно может использоваться, например, для поиска фразы в тексте или ввода формулы. Диалоговое окно этого типа применяется в задачах, где требуется отклик пользователя, который нельзя формализовать. К такому виду относятся компьютерная проверка знаний, тестирование или анкетирование. Окно может содержать как много полей ввода, так и одно (в зависимости от решаемой задачи).

Сохранение/открытие файла

Кто хоть раз создавал документ, тот неизбежно сталкивался с окном этого типа. От пользователя требуется выбрать файл из иерархического списка или указать место на диске, куда его следует сохранить. В окне предусмотрена возможность сортировки файлов, представление их в наиболее удобном виде, создание (при необходимости) новой папки.

Очень удобно, что это окно стандартизовано, то есть, разобравшись один раз в том, как с ним работать, вам не придется тратить время на изучение интерфейса в других приложениях. Назначение иконок и кнопок будет аналогичным, вплоть до расположения и внешнего вида.

Диалоговое окно печати документа

В текстовых редакторах всегда присутствует окно, предназначенное для задания параметров печати документа. Помимо настройки вида в нем устанавливаются и параметры принтера. Есть возможность напечатать избранные страницы, задать определенный диапазон, напечатать только четные или нечетные страницы.

При необходимости можно сохранить настройки печати в файл, потом распечатать документ в другом месте, если принтера под рукой не оказалось. Такое богатство возможностей по настройке режима печати в одном окне было бы невозможным без применения вкладок.

Вкладки

Они играют ту же роль, что и меню в стандартных окнах. С их помощью разделы диалогового окна компонуются в логические группы. Это облегчает работу пользователя – ему не приходится многократно открывать разные элементы. За счет этого также упрощается структура основного меню программы. Из диалогового окна можно с помощью кнопок вызвать дополнительные элементы, если опций вкладок будет недостаточно.

Фрейм

Это альтернативный вкладке способ создать раздел в диалоговом окне. Обычно фрейм располагается в левой части окна и содержит список разделов. Выделив такой раздел, пользователь в правой части может работать с его настройками. Количество разделов во фрейме может быть любым. Если они не помещаются в окне, доступ получается с помощью полосы прокрутки.

Также разделы могут быть организованы в виде иерархического списка. Компоновка данных с помощью фреймов позволит, например, представить многостраничную анкету в одном окне.

Раздел в диалоговом окне может быть создан либо через вкладки, либо с помощью фрейма, но не одновременно. На практике вкладки получили большее распространение.

Элементы управления

Коротко скажем о других элементах, которые могут присутствовать:

1. Командные кнопки диалогового окна. Служат для запуска какого-нибудь действия. Это может быть открытие другого окна или выполнение процедуры.

2. Переключатели. Позволяют выбрать один вариант из набора значений.

3. Флажки. С их помощью можно отметить несколько вариантов из предложенных или отказаться от всех.

4. Поле со списком. Содержит данные, собранные в строки. От пользователя требуется выбрать одну из них.

5. Текстовые поля. Предназначены для ввода в них произвольного текста или числовых данных.

6. Ползунок. Позволяет задать числовое значение параметра из заданного диапазона.

7. Счетчик. Служит для выбора целочисленного значения.

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

9. Метка. Элемент, отвечающий за надписи на форме.

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

Этим перечнем элементы диалогового окна не исчерпываются, на самом деле их гораздо больше. Существуют также уникальные элементы управления, присущие только определенной программе. Для придания окну необычного вида могут внешне видоизменяться и традиционные элементы. Такое часто встречается в компьютерных играх.

Клавиатурные комбинации

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

  • ALT+F4 закрывает активно окно.
  • CTRL+TAB – делает активной следующую вкладку (слева направо).
  • CTRL+Shift+TAB – то же самое, только в обратную сторону.
  • TAB – навигация по элементам управления слева направо и сверху вниз.
  • Space (пробел) – меняет состояние выделенного элемента.
  • ALT+подчеркнутая буква – если в надписи присутствует подчеркнутая буква, то это сочетание активизирует элемент управления, которому она соответствует.
  • Стрелки на клавиатуре – перемещение по элементам списка.

Дизайн окон

Если внешний вид окон кажется вам слишком будничным, есть несколько способов изменить его. На рабочем столе вызовите контекстное меню и выберите пункт "Свойства". Далее пройдите на вкладку "Оформление". Здесь можно изменить стиль окна, размер шрифта и цветовую гамму.

Нажмите кнопку "Дополнительно", и откроются настройки элементов окон. Во вкладке "Тема" есть готовые шаблоны оформления. Если ни один из них не подойдет, существует множество готовых, выложенных в интернете. Они станут доступными после размещения их в папке Windows. Есть и сторонние программы, которые содержат большие библиотеки тем оформления и обладают расширенными возможностями по настройке вашей системы. На слабой машине подобные украшательства лучше не применять, так как они потребляют много памяти.

общих диалогов - приложения Win32

  • 7 минут на чтение

В этой статье

Общие диалоговые окна Microsoft Windows состоят из диалоговых окон «Открыть файл», «Сохранить файл», «Открыть папку», «Найти и заменить», «Печать», «Параметры страницы», «Шрифт» и «Цвет».

Открыть файл

Open File оптимизирован для быстрого поиска элементов для использования в программе.

Сохранить файл

Сохранить файл закрывает цикл, сохраняя файл с его метаданными.

Открыть папку

Открыть папку специально для выбора папок.

Найти и заменить

Find позволяет пользователям искать текстовые строки, тогда как версия Replace позволяет пользователям заменять совпадения другой строкой.

Печать

Print позволяет пользователям выбирать, что печатать, количество копий для печати и последовательность сортировки, а также возможность выбирать и настраивать принтеры.

Настройка страницы

Параметры страницы позволяют пользователям выбирать размер и источник бумаги, ориентацию страницы и поля.

Шрифт

Font отображает шрифты и кегли доступных установленных шрифтов.

Цвет

Color позволяет пользователям выбирать цвет либо с помощью предопределенного набора цветов, либо путем выбора «собственного» цвета.

Концепции дизайна

Используя общие диалоги, вы помогаете пользователям согласованно работать с различными программами. А за счет правильного использования общих диалоговых окон вы также помогаете пользователям эффективно и приятно работать.

Вы можете значительно улучшить работу пользователей с этими диалоговыми окнами, выбрав наиболее подходящие значения по умолчанию для:

  • Входные значения (примеры: папки по умолчанию, имена файлов по умолчанию).
  • Выбранные параметры (примеры: выбранный принтер, параметры печати).
  • просмотров (примеры: отображение изображений в виде миниатюр, отображение изображений без имен файлов, сортировка по дате, ширине столбцов).
  • Презентация (примеры: размер окна, расположение и содержимое).

Необходимо определить как начальные, так и последующие значения по умолчанию. Начальные значения по умолчанию определяются вашей программой и основаны на ожидаемом использовании целевым пользователем, тогда как последующие значения по умолчанию основаны на фактическом использовании. Прошлое использование - лучший индикатор будущего использования.

Эффективны ли настройки вашей программы по умолчанию? Отслеживайте количество шагов, которые нужно выполнить пользователям для выполнения наиболее распространенных задач. Если пользователям приходится повторять одни и те же потенциально ненужные шаги каждый раз при выполнении задачи, ваши значения по умолчанию могут быть улучшены.

Если вы делаете только одно ...

Обеспечьте пользователям эффективное и приятное впечатление, выбрав соответствующие начальные и последующие настройки по умолчанию.

Это правильный пользовательский интерфейс?

Да! Используйте общие диалоги для единообразного взаимодействия с пользователем.Не создавайте свои собственные. Особенно сложно создавать пользовательские интерфейсы, которые правильно и безопасно перемещаются в пространстве имен. Обратите внимание, что при необходимости вы можете настроить общие диалоговые окна.

В Windows Vista функции «Открыть файл» и «Сохранить файл» имеют новую расширяемую архитектуру, которая упрощает предоставление дополнительных функций. Этот механизм достаточно гибкий, чтобы соответствовать минимальным требованиям основных независимых поставщиков программного обеспечения (ISV), но его не нарушат будущие выпуски Windows.

Руководящие принципы

Общие

  • При необходимости предоставьте более прямые или немодальные альтернативы. Разрешить пользователям:
    • Открывайте файлы, перетаскивая их в свою программу.
    • Сохраните файлы, используя их текущее имя и местоположение, с помощью команды «Сохранить».
    • Найдите следующее вхождение строки с помощью клавиши F3.
    • Распечатайте одну копию всего документа на принтере по умолчанию с помощью команды «Печать».
    • Изменяйте шрифты и атрибуты шрифтов с помощью панели инструментов или окна палитры.
    • Измените цвета с помощью панели инструментов или окна палитры.
  • Используйте следующие команды для отображения общих диалогов (вместе с их предпочтительными клавишами доступа):
Общий диалог
Команда
Открыть файл
Открыть ...
Сохранить файл
Сохранить как ...
Открыть папку
Открыть папку ... или Выбрать папку ...
Найти и заменить
Найти ... или заменить ...
Печать
Печать ...
Параметры страницы
Настройка страницы ...
Шрифт
Шрифт ... или Выберите шрифт ...
Цвет
Цвет... или выберите цвет ...
  • При необходимости можно использовать более конкретные команды. Пример: для экспорта файла используйте команду «Экспорт файла» вместо «Сохранить как».
  • Задайте заголовок диалогового окна, чтобы отразить команду, которая его запустила. Пример: если «Сохранить файл» запускается из команды «Экспорт файла», переименуйте диалоговое окно в «Экспорт файла».

Открыть файл

  • В качестве исходной папки по умолчанию используйте специализированную папку (Изображения, Музыка, Видео) в зависимости от ситуации, в противном случае используйте Документы.
  • Для последующих папок по умолчанию используйте последнюю папку, открытую пользователем с помощью программы.
  • При открытии файлов фотографий по умолчанию запрещать имена файлов. Фотографии обычно идентифицируются по их миниатюрам, и их имена обычно не имеют смысла.

Сохранить файл

  • В качестве исходной папки по умолчанию (если новый файл сохраняется в первый раз) используйте специализированную папку (Изображения, Музыка, Видео) в зависимости от ситуации, в противном случае используйте Документы.
  • Для временных файлов используйте временную папку текущего пользователя.Выбирайте простые, но уникальные имена файлов. Пример: используйте File0001.tmp вместо ~ DF1A92.tmp.
    • Разработчиков: Вы можете получить временную папку текущего пользователя с помощью функции API GetTempPath.
  • В качестве исходного имени файла по умолчанию используйте уникальное имя по умолчанию, основанное на:
    • Содержимое файла, если известно. Пример: первые слова в документе.
    • Шаблон, выбранный пользователем. Пример. Если предыдущий файл назывался «Гавайи 1.jpg», выберите «Гавайи 2.jpg "в качестве следующего файла.
    • Общий шаблон, основанный на типе файла. Пример: «Photo1.jpg».
  • Для последующих значений по умолчанию (если файл уже существует) используйте текущую папку и имя файла.
  • При сохранении файла сохраните дату его создания. Если ваша программа сохраняет файлы, создавая временный файл, удаляет оригинал и переименовывает временный файл в исходное имя файла, обязательно скопируйте дату создания из исходного файла.
  • Используйте «Сохранить файл», если пользователь выбирает команду «Сохранить» без указания имени файла.

Списки типов файлов

Примечание: Списки типов файлов используются командами «Открыть файл» и «Сохранить файл» для определения типов отображаемых файлов и расширения файла по умолчанию.

  • Если список типов файлов короткий (пять или меньше), отсортируйте список по вероятности использования. Если список длинный (шесть или больше), используйте алфавитный порядок, чтобы упростить поиск типов.
  • Для сохранения файла включите все варианты поддерживаемых расширений файлов, даже если они необычны, и поместите наиболее распространенное расширение на первое место.Логика обработки файлов просматривает этот список, чтобы определить, предоставил ли пользователь поддерживаемое расширение файла. Пример. Если список типов файлов JPEG включает только .jpg и .jpeg, файл test.jpe можно сохранить как test.jpe.jpg.
  • Для сохранения файла исходный тип файла по умолчанию, скорее всего, выбран целевым пользователем. Последующее значение по умолчанию - это текущий тип файла.
  • Для Open File исходный тип файла по умолчанию, скорее всего, выбран целевым пользователем. Следующим по умолчанию должен быть последний использованный тип файла.
  • Для «Открыть файл» включите запись «Все файлы» в качестве первого элемента, если пользователи могут открывать файлы любого типа или, возможно, потребуется просмотреть все файлы в папке одновременно. Рассмотрите возможность предоставления других мета-фильтров, таких как «Все изображения», «Вся музыка» и «Все видео». Поместите их сразу после «Все файлы».
  • Используйте формат «Имя типа файла (* .ext1; * .ext2)». Имя типа файла должно быть зарегистрированным именем типа файла, которое вы можете просмотреть в элементе панели управления «Параметры папки». Пример: «HTML-документ (*.htm; * .html) ".
    • Исключение: Для мета-фильтров удалите список расширений файлов, чтобы устранить беспорядок. Примеры: «Все файлы», «Все изображения», «Вся музыка» и «Все видео».
  • Используйте заглавные буквы в виде предложений для имен типов файлов и строчные буквы для расширений типов файлов.

Открыть папку

  • Для новых программ используйте диалоговое окно «Открыть файлы» в режиме «выбора папок». Для этого требуется Windows Vista или более поздняя версия, поэтому используйте диалоговое окно «Открыть папку» для программ, работающих в более ранних версиях Windows.
    • Разработчиков: Вы можете использовать диалоговое окно «Открыть файлы» в режиме «выбора папок» с помощью флага FOS_PICKFOLDERS.

Шрифт

  • При необходимости вы можете отфильтровать список шрифтов, чтобы отобразить только шрифты, доступные для вашей программы.

Стойкость

  • Рассмотрите возможность сохранения следующих значений для использования в качестве последующих значений по умолчанию:
    • Входные значения (примеры: папки по умолчанию, имена файлов по умолчанию).
    • Выбранные параметры (примеры: выбранный принтер, параметры печати).
    • просмотров (примеры: отображение изображений в виде миниатюр, отображение изображений без имен файлов, сортировка по дате, ширине столбцов).
    • Презентация (примеры: размер окна, расположение и содержимое).

Исключение: Не сохраняйте эти значения для общих диалогов, когда их использование таково, что пользователи с гораздо большей вероятностью захотят начать все заново.

  • При определении значений по умолчанию подумайте, что целевые пользователи, скорее всего, захотят, исходя из важных сценариев.Также рассмотрите сценарии внутри экземпляра программы, в нескольких экземплярах (как последовательных, так и параллельных) и в нескольких документах. Не заставляйте ценности сохраняться в обстоятельствах, которые вряд ли принесут пользу.
    • Пример: Для типичного приложения на основе документов полезно использовать постоянные параметры «Открыть файл» и «Сохранить файл» в экземпляре программы и между последовательными экземплярами, но сохранить независимость параллельных экземпляров. Таким образом, пользователи могут эффективно работать с несколькими документами одновременно.
  • Сохраняйте настройки для каждой программы, для каждого пользователя.
.

Linux Command Line Adventure: диалог

Если мы посмотрим на современное программное обеспечение, мы можем быть удивлены, узнав, что большая часть кода в большинстве программ сегодня имеет очень мало общего с реальной работой, для которой программа была предназначена. Скорее, большая часть кода используется для создания пользовательского интерфейса. Современные графические программы требуют большого количества процессорного времени и памяти для их сложных глазных конфет. Это помогает объяснить, почему программы командной строки обычно используют так мало памяти и ЦП по сравнению с их аналогами с графическим интерфейсом.

Тем не менее, интерфейс командной строки часто бывает неудобным. Если бы только был способ имитировать общие функции графического пользовательского интерфейса на текстовом дисплее.

В этом приключении мы рассмотрим dialog , программу, которая делает именно это. Он отображает различные типы диалоговых окон , которые мы можем включить в наши сценарии оболочки, чтобы придать им более удобный вид. dialog существует несколько лет назад и сейчас является лишь одним из членов семейства программ, которые пытаются решить проблему пользовательского интерфейса для пользователей командной строки.

Характеристики

dialog - довольно большая и сложная программа (она имеет почти 100 параметров командной строки), но по сравнению с типичным графическим пользовательским интерфейсом она очень легкая. Тем не менее, он способен на многие трюки с пользовательским интерфейсом. С помощью dialog мы можем создавать следующие типы диалоговых окон (показана версия 1.2):

Список сборки - список сборки Отображает два списка рядом.Список слева содержит невыбранные элементы, список справа - выбранные элементы. Пользователь может перемещать элементы из одного списка в другой.
Календарь - календарь Отображает календарь и позволяет пользователю выбрать дату.
Контрольный список - контрольный список Представляет список вариантов и позволяет пользователю выбрать один или несколько элементов.
Выбор каталога --dselect Отображает диалоговое окно выбора каталога.
Поле редактирования - редактор Отображает элементарный редактор текстовых файлов.
Форма - форма Позволяет пользователю вводить текст в несколько полей.
Выбор файла --fselect Диалог выбора файла.
Калибр - калибр Отображает индикатор выполнения, показывающий процент выполнения.
Информационное окно - информационный ящик Отображает сообщение (с необязательной временной паузой) и завершается.
Поле ввода - входной ящик Предлагает пользователю ввести / отредактировать текстовое поле.
Окно меню --menubox Отображает список вариантов.
Окно сообщения --msgbox Отображает текстовое сообщение и ожидает ответа пользователя.
Ящик для пароля - пароль Похож на поле ввода, но скрывает ввод пользователя.
Пауза - пауза Отображает текстовое сообщение и таймер обратного отсчета. Диалог завершается, когда истекает таймер или когда пользователь нажимает кнопку ОК или Отмена.
Программный блок --programbox Отображает вывод команды по конвейеру.Когда команда завершится, диалоговое окно ожидает, пока пользователь нажмет кнопку OK.
Progress Box --progressbox Аналогично программному окну, за исключением того, что диалог завершается, когда переданная команда завершается, а не ждет, пока пользователь нажмет OK.
Список радио --радиолист Отображает список вариантов и позволяет пользователю выбрать один элемент. Любой ранее выбранный элемент становится невыделенным.
Диапазон значений - диапазон Позволяет пользователю выбирать числовое значение из указанного диапазона с помощью ползунка на клавиатуре.
Хвостовая коробка - хвостовой ящик Отображает текстовый файл с обновлениями в реальном времени. Работает как команда tail -f .
Текстовое поле - текстовое поле Простая программа просмотра текстовых файлов. Поддерживает многие из тех же клавиатурных команд, что и минус .
Тайм-бокс - таймбокс Диалог для ввода времени суток.
Дерево - просмотр Отображает список элементов в виде древовидной иерархии.
Да / Нет Коробка - да Отображает текстовое сообщение и дает пользователю возможность ответить «Да» или «Нет».

Вот несколько примеров:

Снимок экрана диалога yesno

Снимок экрана диалога радиолиста

Снимок экрана диалогового окна fselect

Наличие

dialog доступен из большинства репозиториев дистрибутивов как пакет «диалог».Помимо самой программы, пакет dialog включает довольно полную справочную страницу и большой набор программ-примеров, демонстрирующих различные диалоговые окна, которые он может отображать. После установки в системе на основе Debian эти примеры программ можно найти в каталоге / usr / share / doc / dialog / examples . Остальные дистрибутивы похожи.

Между прочим, использование Midnight Commander для просмотра каталога с примерами - отличный способ запустить примеры программ и изучить сами скрипты:

Просмотр примеров с помощью Midnight Commander

Как это работает

На первый взгляд , диалог кажется простым.Мы запускаем dialog , за которым следуют один или несколько общих параметров (параметры, которые применяются независимо от желаемого диалогового окна), а затем параметр поля и связанные с ним параметры. Сложная часть использования dialog - это получение данных из него.

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

Метод 1. Сохранение результатов во временном файле

Первый способ - использовать временный файл. Примеры программ, поставляемых с dialog , содержат несколько примеров (этот сценарий был изменен по сравнению с оригиналом для ясности):

  #! / Bin / bash # inputbox - продемонстрировать диалоговое окно ввода с временным файлом # Определить коды статуса выхода диалога : $ {DIALOG_OK = 0} : $ {DIALOG_CANCEL = 1} : $ {DIALOG_HELP = 2} : $ {DIALOG_EXTRA = 3} : $ {DIALOG_ITEM_HELP = 4} : $ {DIALOG_ESC = 255} # Создайте временный файл и убедитесь, что он ушел, когда мы купимся tmp_file = $ (tempfile 2> / dev / null) || tmp_file = / tmp / test $$ ловушка "rm -f $ tmp_file" 0 1 2 5 15 # Создать диалоговое окно dialog --title "INPUT BOX" \ --Чисто \ --inputbox "Привет, это диалоговое окно ввода.Вы можете использовать \ n это, чтобы задать вопросы, требующие от пользователя \ n для ввода строки в качестве ответа. Вы можете \ n входные строки длиной больше \ n ширина поля ввода, в этом случае \ n поле ввода будет автоматически прокручено. \ п Вы можете использовать BACKSPACE для исправления ошибок. \ п \ п Попробуйте ввести свое имя ниже: "16 51 2> $ tmp_file # Получить статус выхода return_value = $? # Действуй на это case $ return_value в $ DIALOG_OK) echo "Результат:` cat $ tmp_file` ";; $ DIALOG_CANCEL) echo "Отмена нажата.";; $ DIALOG_HELP) echo "Помощь нажата." ;; $ DIALOG_EXTRA) echo "Нажата дополнительная кнопка." ;; $ DIALOG_ITEM_HELP) echo "Нажата кнопка справки по элементам." ;; $ DIALOG_ESC) если test -s $ tmp_file; тогда кошка $ tmp_file еще echo «ESC нажат». фи ;; esac  

Первая часть сценария определяет некоторые константы, которые используются для представления шести возможных значений статуса выхода, поддерживаемых диалоговым окном . Они используются, чтобы сообщить вызывающему сценарию, какая кнопка в диалоговом окне (или, альтернативно, клавиша Esc) была использована для завершения диалога.Используемая для этого конструкция несколько интересна. Во-первых, каждая строка начинается с пустой команды «:», которая ничего не делает. Да, действительно. Он намеренно ничего не делает, потому что иногда нам нужна команда (по причинам синтаксиса), но на самом деле мы ничего не хотим делать. После нулевой команды следует расширение параметра. Расширение похоже по форме на то, которое мы рассмотрели в главе 34 TLCL:

.

$ { параметр : = значение }

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

В следующей части примера создается временный файл с именем tmp_file с помощью команды tempfile , которая представляет собой программу, используемую для безопасного создания временного файла. Затем мы устанавливаем ловушку, чтобы гарантировать, что временный файл будет удален, если программа каким-то образом завершится.Важна аккуратность!

Наконец, мы переходим к самой команде dialog . Мы начинаем с установки заголовка для поля ввода и указываем параметр --clear , чтобы сообщить dialog , что мы хотим удалить любое предыдущее диалоговое окно с экрана. Затем мы указываем тип желаемого диалогового окна и его необходимые аргументы. К ним относятся текст, который будет отображаться над полем ввода, а также желаемая высота и ширина поля. Хотя в примере указаны точные размеры для поля, мы также можем указать ноль для обоих значений, и диалоговое окно попытается автоматически определить правильный размер.

Так как диалог обычно выводит результаты в виде стандартной ошибки, мы перенаправляем его файловый дескриптор в наш временный файл для хранения.

Последнее, что нам нужно сделать, это собрать статус выхода команды в переменной ( return_value ), чтобы мы могли выяснить, какую кнопку пользователь нажал, чтобы закрыть диалоговое окно. В конце сценария мы смотрим на это значение и действуем соответствующим образом.

Метод 2: используйте подстановку команд и перенаправление

Второй способ получения данных из диалога предполагает перенаправление.В следующем сценарии мы передаем результаты из диалога в переменную, а не в файл. Для этого нам нужно сначала выполнить перенаправление.

  #! / Bin / bash # inputbox - продемонстрировать диалоговое окно ввода с перенаправлением # Определить коды статуса выхода диалога : $ {DIALOG_OK = 0} : $ {DIALOG_CANCEL = 1} : $ {DIALOG_HELP = 2} : $ {DIALOG_EXTRA = 3} : $ {DIALOG_ITEM_HELP = 4} : $ {DIALOG_ESC = 255} # Дублирование файлового дескриптора 1 на дескрипторе 3 exec 3> & 1 # Создать диалоговое окно result = $ (dialog --title "INPUT BOX" \ --Чисто \ --inputbox "Привет, это диалоговое окно ввода.Вы можете использовать \ n это, чтобы задать вопросы, требующие от пользователя \ n для ввода строки в качестве ответа. Вы можете \ n входные строки длиной больше \ n ширина поля ввода, в этом случае \ n поле ввода будет автоматически прокручено. \ п Вы можете использовать BACKSPACE для исправления ошибок. \ п \ п Попробуйте ввести свое имя ниже: "16 51 2> & 1 1> & 3) # Получить статус выхода диалога return_value = $? # Закрыть файловый дескриптор 3 exec 3> & - # Действовать в статусе выхода case $ return_value в $ DIALOG_OK) echo "Результат: $ result" ;; $ DIALOG_CANCEL) echo "Отмена нажата.";; $ DIALOG_HELP) echo "Помощь нажата." ;; $ DIALOG_EXTRA) echo "Нажата дополнительная кнопка." ;; $ DIALOG_ITEM_HELP) echo "Нажата кнопка справки по элементам." ;; $ DIALOG_ESC) если тест -n "$ результат"; тогда эхо "$ результат" еще echo «ESC нажат». фи ;; esac  

На первый взгляд перенаправление может показаться бессмысленным. Во-первых, мы дублируем файловый дескриптор 1 (stdout) в дескриптор 3, используя exec (это было рассмотрено в More Redirection), чтобы создать резервную копию дескриптора 1.

Следующим шагом является выполнение подстановки команды и присвоение вывода команды dialog переменной result . Команда включает перенаправления дескриптора 2 (stderr), чтобы он был дубликатом дескриптора 1, и, наконец, дескриптор 1 восстанавливается до его исходного значения путем дублирования дескриптора 3, который содержит резервную копию. Что может быть не сразу понятно, так это то, почему необходимо последнее перенаправление. Внутри подоболочки стандартный вывод (дескриптор 1) не указывает на управляющий терминал.Скорее, он указывает на канал, который доставит свое содержимое переменной result . Поскольку диалоговое окно требует стандартного вывода для указания на терминал, чтобы он мог отображать поле ввода, мы должны перенаправить стандартную ошибку на стандартный вывод (чтобы вывод из диалогового окна попал в переменную result ), затем перенаправить стандартный вывод обратно на управляющий терминал.

Итак, какой метод лучше, временный файл или замена команды? Возможно подстановка команд, так как это позволяет избежать создания файла.

До и после

Теперь, когда у нас есть базовое представление о том, как использовать dialog , давайте применим его к практическому примеру.

Вот "обычный" скрипт. Это информационная программа, управляемая с помощью меню, аналогичная программе, описанной в главе 29 TLCL:

.
  #! / Bin / bash # while-menu: информационная программа, управляемая с помощью меню DELAY = 3 # Количество секунд для отображения результатов пока правда; делать Чисто кошка << _EOF_ Пожалуйста выберите: 1. Отображение системной информации 2.[0-3] $]]; тогда case $ REPLY в 1) echo "Имя хоста: $ HOSTNAME" время безотказной работы спать $ DELAY Продолжать ;; 2) df -h спать $ DELAY Продолжать ;; 3) если [[$ (id -u) -eq 0]]; тогда echo "Использование домашнего пространства (все пользователи)" дю -sh / home / * 2> / dev / null еще echo "Использование домашнего пространства ($ USER)" du -sh $ HOME 2> / dev / null фи спать $ DELAY Продолжать ;; 0) сломать ;; esac еще echo "Неверная запись." спать $ DELAY фи сделанный echo «Программа завершена».  

Скрипт, отображающий текстовое меню

Скрипт отображает простое меню выбора. После того, как пользователь вводит выбор, выбор проверяется, чтобы убедиться, что это один из разрешенных вариантов (цифры 0–3), и в случае успешной проверки используется оператор case для выполнения выбранного действия. Результаты отображаются в течение количества секунд, определенного константой DELAY , после чего весь процесс повторяется, пока пользователь не выберет пункт меню для выхода из программы.

Вот сценарий, измененный для использования диалогового окна для предоставления нового пользовательского интерфейса:

  #! / Bin / bash # while-menu-dialog: программа системной информации на основе меню DIALOG_CANCEL = 1 DIALOG_ESC = 255 ВЫСОТА = 0 WIDTH = 0 display_result () { dialog --title "$ 1" \ --no-collapse \ --msgbox "$ результат" 0 0 } пока правда; делать exec 3> & 1 selection = $ (диалог \ --backtitle "Информация о системе" \ - заголовок "Меню" \ --Чисто \ --cancel-label "Выход" \ --menu "Выберите:" $ HEIGHT $ WIDTH 4 \ "1" "Отображение информации о системе" \ «2» «Показать дисковое пространство» \ "3" "Отображение использования домашнего пространства" \ 2> & 1 1> & 3) exit_status = $? exec 3> & - case $ exit_status в $ DIALOG_CANCEL) Чисто echo "Программа завершена." Выход ;; $ DIALOG_ESC) Чисто echo «Программа прервана». > & 2 выход 1 ;; esac case $ selection в 0) Чисто echo «Программа завершена». ;; 1) result = $ (echo "Имя хоста: $ HOSTNAME"; время работы) display_result "Системная информация" ;; 2) результат = $ (df -h) display_result "Дисковое пространство" ;; 3) если [[$ (id -u) -eq 0]]; тогда результат = $ (du -sh / home / * 2> / dev / null) display_result «Использование домашнего пространства (все пользователи)» еще результат = $ (du -sh $ HOME 2> / dev / null) display_result "Использование домашнего пространства ($ USER)" фи ;; esac сделано  

Скрипт, отображающий диалоговое меню

Отображение результатов в сообщении

Как видим, скрипт претерпел некоторые структурные изменения.Во-первых, нам больше не нужно проверять выбор пользователя. Поле меню допускает только допустимые варианты. Во-вторых, есть функция, определенная в начале для отображения вывода каждого выбора.

Мы также замечаем, что были использованы несколько общих опций dialog :

  • --no-collapse запрещает dialog переформатировать текст сообщения. Используйте это, когда необходимо точное представление текста.

  • --backtitle устанавливает заголовок фона под диалоговым окном.

  • --clear очищает фон любого предыдущего диалогового окна.

  • --cancel-label устанавливает строку, отображаемую на кнопке «отменить». В этом сценарии для него установлено значение «Выход», поскольку это лучшее описание действия, выполняемого при его выборе.

Ограничения

Хотя это правда, что dialog может создавать много видов диалоговых окон, следует помнить, что dialog имеет значительные ограничения.Некоторые диалоговые окна ведут себя довольно странно по сравнению с их традиционными аналогами с графическим интерфейсом. Например, поле редактирования, используемое для редактирования текстовых файлов, не может выполнять вырезание и вставку, а файлы для редактирования не могут содержать символы табуляции. Поведение файлового поля больше похоже на функцию завершения табуляции в оболочке, чем на средство выбора файлов графического интерфейса.

Подведение итогов

Оболочка на самом деле не предназначена для больших интерактивных программ, но использование dialog может сделать возможными небольшие и умеренные интерактивные программы.Он предоставляет множество полезных диалоговых окон, позволяющих множество типов взаимодействия с пользователем, которые было бы очень сложно реализовать с помощью одной оболочки. Если мы сохраним скромные ожидания, dialog может стать отличным инструментом.

Дополнительная литература

  • Справочная страница dialog хорошо написана и содержит полный список ее многочисленных опций.

  • dialog обычно включает в себя большой набор примеров программ, которые можно найти в каталоге / usr / share / doc / dialog .

  • Домашняя страница проекта dialog находится по адресу https://invisible-island.net/dialog/

.

/ команда dialog - mIRC - WikiChip


Полупроводники и вычислительная техника