曲径通幽论坛

 找回密码
 立即注册
搜索
查看: 3994|回复: 0
打印 上一主题 下一主题

dialog -- 制作文本样式窗口

[复制链接]

4918

主题

5880

帖子

3万

积分

GROAD

曲径通幽,安觅芳踪。

Rank: 6Rank: 6

积分
34397
跳转到指定楼层
楼主
发表于 2011-5-6 10:37:54 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
dialog 使用命令行来生成文本样式窗口,它的风格如下图所示:



dialog 命令支持许多对话框小部件(widget),这些小部件如下表所列:
小部件描述
calendar提供了一个可以在其中选择日期的日历
checklist显示多个项目,这些项目均可以被打开或关闭
form允许建立一个可以填写标签和文本字段的表单
fselect提供一个文本选择窗口以浏览文件
gauge显示一个说明完成百分比的仪表
infobox显示信息而不等待响应
inputbox显示单一的文本窗体框以输入文本
inputmenu提供一个可编辑的菜单
menu显示一系列可供选择的选项
msgbox显示消息并要求用户选择OK按钮
pause显示一个说明指定暂停阶段状态的仪表
passwordbox显示一个可以隐藏输入文本的单一文本框
passwordform显示一个带标签和隐藏文本字段的表单
radiolist提供一组菜单项,但是只可选择一个项目
tailbox利用 tail 命令在滚动的窗口中显示文件中的文本
tailboxbg与 tailbox 相同,但是需要在背景模式下操作
texbox在滚动窗口中显示文件的内容
timebox提供一个用来选择时、分、秒得窗口
yesno提供一个含有 Yes/No 按钮的简单消息


使用 dialog 显示小部件命令格式:
dialog --widget parameters
其中 widget 就是上表所列出的小部件;后面的 parameters 参数可以查看 man 来参考。


小部件的输出结果通过两种形式提供:
      使用标准错误 STDERR
      使用退出代码状态
使用退出代码状态示例:

$dialog --yesno "are you ok?" 10 20
选择 NO 按钮后查看退出代码:
$ echo $?
1



使用标准错误 STDERR 返回输出示例:
$dialog --inputbox "Input your wish:" 10 20 2>wish.txt
这样在 inputbox 中输入的内容会输出到 wish.txt 文件中。


textbox 这个小部件可以在窗口内显示大量信息,如果内容过多,它还能滚动显示,使用方法:
$ dialog --textbox /etc/passwd 15 45
效果如下图所示:



菜单小部件 --menu 使用格式:
--menu text height width menu-height [ tag item ] ...
示例:
$ dialog --menu "System Admin" 20 30 10 1 "Diskspace" 2 "memory usage" 3 "clean rubish" 4 "check a log"
效果:

第 1 个参数是这个菜单的标题。
第 2 个参数菜单的高度。
第 3 个参数是菜单的宽度。
第 4 个参数是菜单可以容纳的选择条数。
第 5 个参数这里就是 tag,就是 1,2,3,4 这些标签。
第 6 个参数就是 item ,表示菜单选项。
当选择 OK 退出后,选择结果会发往 STDERR,当然选择结果不是菜单 item 字符串,而是标签 tag 。


fselect 小部件可以用来浏览整个目录以选择文件,使用方法如:
$ dialog --title "select a file" --fselect $HOME/ 10 50 2>file.txt
效果:

其中 --title "select a file" 指定了该部件的标题。
--fselect 后的第 1 个参数(这里是 $HOME/) 指定了窗口使用的起始位置,这里为我的家目录。上图中的左侧窗口是目录列表,而右侧窗口中是左侧窗口中所选择目录下面的所有文件列表。在左侧窗口中可以通过两次空格键以打开一个目录,还可以通过文本框中直接输入要选择的目录或文件。该小部件的通过 STDERR 来输出,输出内容为所选择的内容。


上面,在 fselect 中使用了一个 --title 选项,它给出了 fselect 窗口的标题,实际上还有很多这样的设置选项,它们允许自定义窗口的外观和行为,下标列出这些选项:
选项描述
--add-widged除非按Esc或Cancel键,否则继续进入下一个对话框
--aspect ratio指定窗口宽度/高度的纵横比
--backtitle title指定在屏幕顶部、背景上显示的标题
--begin x y指定窗口左上角的起始位置
--cancel-label label为 Cancel 按钮指定一个可供选择的标签
--clear使用对话框默认背景色清除显示
--colors允许在对话框文本中嵌入 ANSI 颜色代码
--cr-wrap允许在对话框文本中加入换行符,强制换行
--create-rc file转储样本配置文件至指定文件
--defaultno将 yes/no 对话框默认值设置为 NO
--default-item string设置检查列表、表单或菜单对话框的默认项目
--exit-label lable为 Exit 按钮指定可供选择的标签
--help显示 dialog 命令的帮助信息
--help-button在 OK 和 Cancel 按钮之后显示 help 按钮
--help-label label为 help 按钮指定可供选择的标签
--help-status在 help 按钮中的帮助信息被选中后,记录下检查列表、单选框列表或表单信息
--ignore忽略 diglog 不能识别的选项
--input-fd fd除 STDIN 之外,指定其他可供选择的文件描述符
---insecure更改 password 小部件以在输入时以星号显示
--item-help在屏幕的底部,为检查列表、单选框列表、菜单中的每一个标签添加该标签的帮助
--keep-window不要清除屏幕上的旧小部件
--max-input size指定输入字符串的最大数,默认为2048
--nocancel禁止 cancel 按钮
--no-collapse在对话框文本中,不要将制表换行符转换为空格
--no-kill将 tailboxbg 对话框放在背景中,并禁止该进程的 SIGHUP
--no-label label为 No 按钮指定一个可供选择的标签
--no-shadow不要为对话框窗口显示阴影
--ok-label label为 OK 按钮指定一个可供选择的标签
--output-fd fd除了 STDERR 之外,指定可供选择的输出文件描述符
--print-maxsize打印对话框窗口允许输出的最大尺寸
--print-size将每个对话框窗口的尺寸打印至输出
--print-version将对话框版本打印至输出
--separator-output无需引用,将 checklist 小部件的结果一次一行的输出
--separator-widget string指定一个字符串来隔离每个小部件的输出
--shadow绘制阴影至每一个窗口的右下方
--single-quoted需要时对检查列表输出使用单引用
--sleep sec在处理对话框窗口后延迟指定的秒数
--stderr将输出发送至 STDERR (默认行为)
--stdout将输出发送至 STDOUT
--tab-correct将换行符转换为空格
--tab-len n指定一个制表符所使用的空格数(默认值为8)
--timeout sec指定在没有用户输入的情况下,用错误代码退出所需的秒数
--title title指定对话框的窗口名称
--trim删除对话框文本中字符串首部的空格和换行符
--visit-items为了把项目列表包含在内,而修改对话框窗口中的制表符
--yes-label label为 yes 按钮指定一个可供选择的标签
--extra-label label为 Extra 按钮指定可供选择的标签
--extra-button在 OK 和 Cancel 按钮之间,显示一个其他的按钮
--separator string指定一个字符串来隔离每个小部件的输出


在脚本使用 dialog :
[Bash shell] 纯文本查看 复制代码
#!/bin/bash

temp=`mktemp -t test.XXXXXX`
temp2=`mktemp -t test2.XXXXXX`

function diskspace {
    df -k > $temp
    dialog --textbox $temp 20 60
}

function whois {
    whoami > $temp
    dialog --textbox $temp 20 50
}

function memusage {
    cat /proc/meminfo > $temp
    dialog --textbox $temp 20 50
}

while [ 1 ]
do
    dialog --menu "System Admin" 20 30 10 1 "Disk space" 2 "who is" 3 "memory usage" 0 "Exit" 2>$temp2
    if [ $? -eq 1 ]
    then
        break
    fi
    selection=`cat $temp2`

    case $selection in
    1)
        diskspace ;;
    2)
        whois ;;
    3)
        memusage ;;
    0)
        break ;;
    *)
        dialog --msgbox "Sorry, wrong selection" 10 30
    esac
done

rm -f $temp 2> /dev/null
rm -f $temp2 2> /dev/null
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|曲径通幽 ( 琼ICP备11001422号-1|公安备案:46900502000207 )

GMT+8, 2025-6-18 14:23 , Processed in 0.079738 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表