30.19 对话框

对话框是弹出菜单的一种变体——外观略有不同,始终出现在框架中央,只有一级菜单和一个或多个按钮。对话框主要用于向用户提问,可选回答通常为 “是(yes)”、“否(no)” 及少量其他选项。只带一个按钮的对话框也可用于强制用户确认重要信息。当通过鼠标点击触发命令时,函数 y-or-n-pyes-or-no-p 会使用对话框而非键盘交互。

Function: x-popup-dialog position contents &optional header

该函数显示一个弹出对话框,并返回用户的选择结果。参数 contents 指定提供的选项,格式如下:

(title (string . value)...)

该格式与 x-popup-menu 中指定单个面板的列表类似。

返回值为选中选项对应的 value

x-popup-menu 类似,列表中的元素可以只是字符串,而非 cons 单元格 (string . value),这类条目为不可选项。

若列表中出现 nil,它会分隔左右两侧的选项:nil 之前的选项显示在左侧,之后的显示在右侧。若列表中不含 nil,选项会大致均分在两侧。

对话框始终显示在框架中央;参数 position 指定使用哪个框架。其可选值与 x-popup-menu 相同,但精确坐标或具体窗口无关,仅框架生效。

header 为非 nil,对话框的框架标题为 ‘提示信息’,否则为 ‘询问’。前者用于 message-box (see message-box)。(在文本终端上,不显示对话框标题。)

在某些配置下,Emacs 无法显示真实对话框,会改为在框架中央以弹出菜单形式显示相同选项。

若用户未做出有效选择便关闭对话框(例如通过窗口管理器),会触发退出操作,x-popup-dialog 不返回。