2

如何为 Linux 控制台(不是 X,而是“终端”控制台)制作一个对话框小部件,该小部件会在可能是菜单列表或文本框的小部件旁边显示以秒为单位的倒计时?

理想情况下,这可能是一个独立的程序,如对话框,提供参数来控制其行为。

当倒计时到达 0 时,返回小部件的选定值。如果没有人在场(或者人更喜欢默认值),可能会有一个默认值。像 grub 和 lilo 这样的引导加载程序已经可以做到这一点,几乎。我浏览了对话框手册页,找不到这个功能集。

到目前为止尝试过:

dialog --timeout 30 --menu 'Menu Title' 20 60 3 'A' 'Choose A' 'B' 'Choose B' 'C' 'Choose C'已接近,但未显示 30 秒计时器正在计时。

dialog --pause 'Hurry!' 10 60 30 --显示一条消息并在计时器运行时确定/取消,但仅是插页式的,不适用于用户输入。

可以像这样组合多行:

dialog --menu 'Menu Title' 10 60 3 'A' 'Choose A' 'B' 'Choose B' 'C' 'Choose C' --pause 'Hurry up' 10 60 30 

但这会按顺序显示小部件,而不是在一页上组合。在这里,在没有计时器回答菜单后,您会收到带有计时器的消息。

4

3 回答 3

3

为了坚持使用对话框,我通过将其拆分为两个对话框来解决类似的问题。首先会出现一个对话框,其中默认值(以及可选的替代选项)显示在屏幕上,并且有一个倒数计时器。用户可以按 esc 或按取消来更改选项,或者倒计时达到 0 并且程序继续使用默认设置。如果用户点击转义,则会出现第二个对话框,允许编辑选项。我不想在我们的 deb-live / clonezilla 自定义操作系统构建中添加更多软件,所以我必须找到一种对话方式。

dialog --title Some options to choose from, showing default --pause "\n\n Do you accept these options?:  \n  ${options_in_nice_format_for_display}" 20 60 5
[ $? -ne 0 ] && EDIT_IP=true || EDIT_IP=false

if ${EDIT_IP}; then
    dialog --editbox ${MY_OPTIONS_FILE} 20 60 2> ${EDITED_OPTIONS_FILE}
fi

要获得更好的解决方案(我已经使用过但不想在此处添加多余的代码),您可以添加一个基于布尔值的 while 循环,并允许重复编辑直到用户满意为止。

于 2013-12-13T13:02:11.833 回答
1

我相信Ncurses是您正在寻找的。

于 2009-08-26T06:11:11.357 回答
1

我建议你阅读dialog手册页。哦,你已经这样做了,你说?那么有什么问题:

--暂停文本高度宽度秒

暂停框在框的底部显示一个仪表。仪表指示距离暂停结束还剩多少秒。当达到超时或用户按下 OK 按钮(状态 OK)或用户按下 CANCEL 按钮或 Esc 键时,暂停退出。

于 2009-08-26T06:12:07.827 回答