如何从脚本(一些#general
和#nickserv
选项卡)关闭 pidgin 对话窗口中的多个选项卡。我尝试使用xdotool
但devilspie
没有结果。
问问题
397 次
1 回答
4
您可以使用 Pidgin 的 DBus API 关闭对话。请参阅Pidgin 的 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 与 Pidgin/Finch 通信的对象(来自DbusHowTo):
#!/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
用 using重写的相同内容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
s 的管道有多脆弱。Python 看起来更干净。
于 2012-02-10T20:40:58.150 回答