为什么以下 osd_cat 脚本失败?

为什么以下 osd_cat 脚本失败?

我正在编写一个osd_cat基于简单的实用程序来显示通过 libpurple(例如,通过 Finch 或 Pidgin)接收的消息。

到目前为止,这就是我已经成功创建的:

dbus-monitor "interface=im.pidgin.purple.PurpleInterface, member=ReceivedImMsg" | awk '/string/ && (NR%2==1) {split($0, sender, "\"") }; /string/ && (NR%2==0) {print sender[2] ": " substr($0,11) }' | osd_cat --pos=top --align=right --indent=8 -O 4 -u white

或者分成多行以增强阅读乐趣:

dbus-monitor "interface=im.pidgin.purple.PurpleInterface, member=ReceivedImMsg"
 | awk '/string/ && (NR%2==1) {split($0, sender, "\"") };
        /string/ && (NR%2==0) {print sender[2] ": " substr($0,11) }'
 | osd_cat --pos=top --align=right --indent=8 -O 4 -u white

我做了一些实验,发现以下内容有效:

yes | osd_cat
echo "text" | osd_cat
dbus-monitor | osd_cat
dbus-monitor | awk '{print $0}' | osd_cat
dbus-monitor "interface=im.pidgin.purple.PurpleInterface, member=ReceivedImMsg" | osd_cat

但以下不起作用:

dbus-monitor | awk '{print $1 $2}' | osd_cat
dbus-monitor "interface=im.pidgin.purple.PurpleInterface, member=ReceivedImMsg" | awk '{print $0}' |osd_cat

我完全迷失了。

答案1

老问题,但对于谷歌人来说:

我也遇到过类似的问题,但规模要简单得多。我只是想做

echo "Some string\nWith a bunch of chars" | osd_cat

我发现 osd_cat 似乎存在一些问题,要么是 OSD 机制可用性检测滞后,要么是输入缓冲问题。

如果输入字符串太长(在我的系统上它在 7 到 11 个可打印字符之间变化),它将在延迟时间内挂起,然后退出而不显示任何内容。

如果我使用--waitosd_cat 选项,我的问题就消失了。
然而,副作用是消息可能需要超过 5 秒才会出现(在我的系统上)。您为 osd_cat 指定的任何延迟时间仅在消息可见时才开始,但这可能意味着默认显示 5 秒的消息将需要 5 秒才能显示,然后在消失之前再显示 5 秒。

在相关说明中,这似乎也是构建在 osd_cat 之上的所有工具的问题,并且没有一个能够解释它。原作者提供的这些工具的列表位于他的页面(如 osd_cat 的手册页中所列):http://ignavus.net/xosd
这包括更常见的osdsh,这就是我试图找到替代方案的原因,因为当我偶然发现 时,它会间歇性地在调用时不显示任何内容osd_cat

相关内容