Dzen

出自 ArchWiki

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,以便在状态栏中输出。这可以使用 conkyconky-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

注意: Gdbar 仅在与 dzen >= 0.7.0 结合使用时才有用。

其他

有关其他小工具的信息,请访问 此处

参见

论坛主题