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