【问题标题】:Create a countdown dialog menu box for a linux terminal?为linux终端创建一个倒计时对话框菜单框?
【发布时间】:2010-11-22 21:18:39
【问题描述】:

如何为 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 

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

【问题讨论】:

    标签: linux console-application


    【解决方案1】:

    为了坚持使用对话框,我通过将其拆分为两个对话框解决了类似的问题。首先会出现一个对话框,其中默认值(以及可选的替代选项)显示在屏幕上,并且有一个倒数计时器。用户可以按 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 循环并允许重复编辑直到用户满意为止。

    【讨论】:

      【解决方案2】:

      我相信Ncurses 就是您要找的。​​p>

      【讨论】:

      • 感谢您的回复。编码它,我同意。我希望有人已经这样做了。
      【解决方案3】:

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

      --暂停文字高宽秒

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

      【讨论】:

      • 感谢您指出让我注意到这一点。但是,暂停是一个显示消息、倒计时和确定/取消的小部件。它不是其他小部件的属性或修饰符。所以它不会实现带有倒计时的菜单。 --timeout 30 将在菜单中添加 30 秒超时,但没有进度指示。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-11
      • 1970-01-01
      • 2017-04-30
      相关资源
      最近更新 更多