代码之家  ›  专栏  ›  技术社区  ›  Paul

是否为linux终端创建倒计时对话框菜单框?

  •  2
  • Paul  · 技术社区  · 17 年前

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

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

    3 回复  |  直到 11 年前
        1
  •  3
  •   JStrahl    12 年前

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

    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
  •  1
  •   Steve K    17 年前

    我相信 Ncurses

        3
  •  1
  •   Bombe    17 年前

    我建议你读一下报纸 dialog

    --暂停文字高度宽度秒

    暂停框沿框底部显示一个米。仪表指示暂停结束前的剩余秒数。当达到超时或用户按下OK按钮(状态OK)或用户按下CANCEL按钮或Esc键时,暂停退出。