30.19 Диалоговые окна

Диалоговое окно — это разновидность всплывающего меню; оно выглядит немного иначе, всегда появляется в центре фрейма и имеет только один уровень и одну или несколько кнопок. Основное применение диалоговых окон — задавание вопросов, на которые пользователь может ответить «да», «нет» и несколькими другими вариантами. С одной кнопкой они также могут заставить пользователя подтвердить важную информацию. Функции y-or-n-p и yes-or-no-p используют диалоговые окна вместо клавиатуры, когда они вызываются из команд, инициированных щелчками мыши.

Функция: x-popup-dialog position contents &optional header

Эта функция отображает всплывающее диалоговое окно и возвращает указание на то, какой выбор сделал пользователь. Аргумент contents задаёт предлагаемые альтернативы; он имеет следующий формат:

(title (string . value)…)

который выглядит как список, задающий одну панель для x-popup-menu.

Возвращаемое значение — это value из выбранной альтернативы.

Как и для x-popup-menu, элемент списка может быть просто строкой вместо точечной пары (string . value). Это создаёт кнопку, которую нельзя выбрать.

Если в списке встречается nil, он разделяет элементы левой части от элементов правой части; элементы, предшествующие nil, появляются слева, а элементы, следующие за nil, — справа. Если вы не включаете nil в список, то примерно половина элементов появляется с каждой стороны.

Диалоговые окна всегда появляются в центре фрейма; аргумент position задаёт, какой именно фрейм. Возможные значения такие же, как в x-popup-menu, но точные координаты или конкретное окно не имеют значения; важен только фрейм.

Если header не равен nil, заголовок окна будет «Информация», в противном случае — «Вопрос». Первый вариант используется для message-box (см. message-box). (На текстовых терминалах заголовок окна не отображается.)

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

Если пользователь закрывает диалоговое окно без совершения допустимого выбора, например, с помощью оконного менеджера, то это вызывает прерывание (quit) и x-popup-dialog не возвращает значение.