关闭pidgin对话窗口中的标签页

时间:2012-01-10 05:49:27

标签: linux bash command-line-interface pidgin

如何从脚本(部分#general#nickserv标签)关闭pidgin对话窗口中的多个标签页。我尝试使用xdotooldevilspie,但没有结果。

1 个答案:

答案 0 :(得分:4)

您可以使用Pidgin的DBus API来关闭对话。见Pidgin's DbusHowto。以下Python代码将关闭名称与to_close列表匹配的所有对话窗口。 (我使用IM用户名对此进行了测试,但没有使用IRC聊天室名称进行测试,因此可能需要对您的目的进行一些额外的调整。)

to_close = ["#general", "nickserv"]
for conv in purple.PurpleGetConversations():
    if purple.PurpleConversationGetName(conv) in to_close:
        purple.PurpleConversationDestroy(conv)

将以下内容放在Python文件的顶部以初始化purple对象,以便通过D-Bus(来自DbusHowTo)与Pidgin / Finch进行通信:

#!/usr/bin/env python
import dbus
import sys

# Based off http://developer.pidgin.im/wiki/DbusHowto
bus = dbus.SessionBus()
obj = bus.get_object("im.pidgin.purple.PurpleService",
                     "/im/pidgin/purple/PurpleObject")
purple = dbus.Interface(obj, "im.pidgin.purple.PurpleInterface")

对于那些不喜欢Python的人来说,sh使用purple-remote重写了同样的事情(注意for arg遍历脚本的参数):

#!/bin/sh
# Note that the result of sed here is a string like "(1234) (5678)".
for conversation in `purple-remote PurpleGetConversations | sed 's/^.*[[]//' | sed 's/].*$//' | sed s/dbus.Int32//g | sed s/,//g`
do
    conv_name=`purple-remote "PurpleConversationGetName$conversation"`
    for arg
    do
        if [ "$arg" = "$conv_name" ]
        then
            purple-remote "PurpleConversationDestroy$conversation"
        fi
    done
done

我完全不确定sed的管道是多么脆弱。 Python似乎更清晰。