跳转至内容

Dzen

来自 ArchWiki

Dzen 是一个“用于 X11 的通用消息、通知和菜单程序。它被设计成可以用任何语言进行脚本化,并能与 dwm、wmii 和 xmonad 等窗口管理器很好地集成,尽管它也能与任何窗口管理器配合使用。”

安装

安装 dzen2 包,该包包含 Xft、XPM 和 Xinerama 支持。

用法

Dzen 从管道接收字符串并以图形方式输出,这一事实使得 dzen 可以用任何语言进行脚本化。示例:

$ echo "Hello World" | dzen2 -p

选项

Dzen 有很多选项。以下列表解释了其中一些选项:

  • -fg 前景色。
  • -bg 背景色。
  • -fn 字体。
  • -ta 对齐标题窗口内容,l(左)、c(中)、r(右)。
  • -tw 标题窗口的宽度。
  • -sa 对齐从属窗口内容。参见 -ta
  • -l 从属窗口的行数。
  • -e 事件和动作。
  • -m 菜单模式。
  • -u 同时更新标题和从属窗口的内容。
  • -p 持续 EOF (可选超时秒数)。
  • -x X 坐标。
  • -y Y 坐标。
  • -h 行高(默认:字体高度 + 2 像素)。
  • -w 窗口宽度。
  • -v 版本。
警告 -u 选项已弃用。

使用 dzen 创建弹出窗口

以下代码将在屏幕右上方打开一个 dzen 窗口。它宽度为 100 像素,高度为 15 像素,前景色为黑色,背景色为白色(右键单击关闭 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 字体路径中找到字体。有关详细信息,请参阅 Fonts#Older applications

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 版本中才有用。

其他

有关其他小工具的信息可以在 这里找到。

参见

论坛帖子