Dzen
Dzen 是 "一个通用的消息传递、通知和菜单程序,用于 X11。它被设计为可以使用任何语言编写脚本,并与诸如 dwm、wmii 和 xmonad 等窗口管理器良好集成,尽管它也可以与任何窗口管理器一起工作。"
安装
安装 dzen2 软件包,它包括 Xft、XPM 和 Xinerama 支持。
用法
Dzen 从管道接收字符串并以图形方式输出,这一特性使得 dzen 可以使用任何语言编写脚本。示例
$ echo "Hello World" | dzen2 -p
选项
Dzen 有很多选项。以下列表解释了其中的一些
-fg
前景色。-bg
背景色。-fn
字体。-ta
对齐标题窗口内容,l(eft,左), c(enter,中), r(ight,右)。-tw
标题窗口的宽度。-sa
对齐从属窗口内容。参见-ta
。-l
从属窗口中的行数。-e
事件和操作。-m
菜单模式。-u
同时更新标题窗口和从属窗口的内容。-p
持久化 EOF(可选超时秒数)。-x
X 坐标。-y
Y 坐标。-h
行高(默认值:字体高度 + 2 像素)。-w
窗口宽度。-v
版本。
-u
选项已弃用。使用 dzen 创建弹出窗口
以下代码将在屏幕的右上角打开一个 dzen 窗口。它的宽度为 100px,高度为 15px,黑色前景色和白色背景色(右键单击关闭 dzen)。
$ seq 1 3 | dzen2 -p -w '100' -h '15' -fg '#000000' -bg '#FFFFFF'
请注意,窗口中间的数字是 3,尝试使用 -l
选项运行相同的代码。
$ seq 1 3 | dzen2 -p -w '100' -h '15' -fg '#000000' -bg '#FFFFFF' -l '2'
现在,当您将鼠标悬停在 dzen 上时,它将展开从属窗口。如果您单击从属窗口中的行,则不会发生任何事情,请尝试使用 -m
选项。
$ seq 1 3 | dzen2 -p -w '100' -h '15' -fg '#000000' -bg '#FFFFFF' -l '2' -m
现在,如果您单击这些行,它将在您的终端中打印数字。此功能对于制作菜单很有用。
但是,如果您想将数字居中并将标题对齐到左侧,则需要以下选项:-sa
和 -ta
。
$ seq 1 3 | dzen2 -p -w '100' -h '15' -fg '#000000' -bg '#FFFFFF' -l '2' -m -ta 'l' -sa 'c'
配置
Dzen 能够从 X 资源 中读取字体和颜色设置。例如,您可以将以下行添加到 ~/.Xresources
dzen2.font: -*-fixed-*-*-*-*-*-*-*-*-*-*-*-* dzen2.foreground: #22EE11 dzen2.background: black
技巧与诀窍
使用 dzen 自定义字体
Dzen 遵循 X 逻辑字体描述,因此它只会查找 X 字体路径中的字体。有关详细信息,请参见 字体#旧应用程序。
Dzen 和 Conky
Conky 可以用于将信息直接通过管道传输到 dzen,以便在状态栏中输出。这可以使用 conky 和 conky-cliAUR,Conky 状态实用程序的精简版本来完成。
以下示例以红色显示平均负载值,并以默认 dzen 前景色显示当前时间
~/.conkyrc
conky.config = { background = false , out_to_console = true , out_to_x = false , update_interval = 1.0 , total_run_times = 0 , use_spacer = none } conky.text = [[^fg(\#ff0000)${loadavg 1 2 3} ^fg()${time %a %b %d %I:%M%P}]]
~/bin/dzconky
#!/bin/sh FG='#aaaaaa' BG='#1a1a1a' FONT='-*-terminus-*-r-normal-*-*-120-*-*-*-*-iso8859-*' conky | dzen2 -e - -h '16' -w '600' -ta r -fg $FG -bg $BG -fn $FONT &
只需在您的启动脚本中执行 dzconky
即可。
可点击区域和弹出窗口
dzen2 允许您使用 ^ca(button, command)Text^ca()
定义可点击区域。您可以使用此属性创建弹出窗口,提供任意信息,如 此 处的各种屏幕截图 gif 中所示。
一个简单的例子可以是
sysinfo_popup.sh
#/bin/bash #A simple popup showing system information HOST=$(uname -n) KERNEL=$(uname -r) UPTIME=$( uptime | sed 's/.* up //' | sed 's/[0-9]* us.*//' | sed 's/ day, /d /'\ | sed 's/ days, /d /' | sed 's/:/h /' | sed 's/ min//'\ | sed 's/,/m/' | sed 's/ / /') PACKAGES=$(pacman -Q | wc -l) UPDATED=$(awk '/upgraded/ {line=$0;} END { $0=line; gsub(/[\[\]]/,"",$0); \ printf "%s %s",$1,$2;}' /var/log/pacman.log) ( echo "System Information" # Fist line goes to title # The following lines go to slave window echo "Host: $HOST " echo "Kernel: $KERNEL" echo "Uptime: $UPTIME " echo "Pacman: $PACKAGES packages" echo "Last updated on: $UPDATED" ) | dzen2 -p -x "500" -y "30" -w "220" -l "5" -sa 'l' -ta 'c'\ -title-name 'popup_sysinfo' -e 'onstart=uncollapse;button1=exit;button3=exit' # "onstart=uncollapse" ensures that slave window is visible from start.
保存此脚本并使其可执行,然后在您的 conkyrc(或您通过管道传输到 dzen2 的脚本)中使用 ^ca()
属性来触发它。
^ca(1,<path to your script>)Sysinfo^ca()
这会将脚本绑定到鼠标按钮 1,并在单击文本时执行它。
小工具
dzen 上有一些小工具,可以用来进行良好的自定义。以下是一些小工具,并附带简要说明和示例。
dbar
Dbar 从另一个命令接收一个带有任意数字的管道,并使用它输出一个半图形化的进度条,默认情况下,100% 的最大数字是 100
。最大值和最小值可以使用 -max
/-min
分别更改。
输出示例
50% [============= ]
代码示例
~/test
#!/bin/sh ( amixer get Master | \ awk '/Left:/{gsub(/[[:punct:]]/,"",$5);left=$5} /Right:/{gsub(/[[:punct:]]/,"",$5);right=$5} END {print left ORS right}' ) | dbar -max 100 -min 0 -s '|' -l 'Vol'
有关详细信息,请参见 README.dbar。
gdbar
Gdbar 以及 dbar 都基于 100% 的值输出进度条,但这里它是全图形化的。Gdbar 具有与 dbar 相同的选项以及一些附加选项。其中一些选项是
-fg
设置前景色。-bg
设置背景色。-w
/-h
分别设置宽度和高度。
代码示例
~/test
#!/bin/sh ( amixer get Master | \ awk '/Left:/{gsub(/[[:punct:]]/,"",$5);left=$5} /Right:/{gsub(/[[:punct:]]/,"",$5);right=$5} END{print left ORS right}' ) | gdbar -max 100 -min 0 -l 'Vol ' -bg '#777777' -fg '#00ff00' -ss '2' | dzen2 -p -l '1' -w '150' -y '100' -x '100' -ta c -sa c -e 'onstartup=uncollapse;button3=exit'
有关详细信息,请参见 README.gdbar。
其他
有关其他小工具的信息,请访问 此处。
参见
论坛主题
- 2007-12-04 - Arch Linux - dzen & xmobar 黑客讨论主题