Вы можете использовать DBus API Pidgin, чтобы закрыть диалог. См. DbusHowto Пиджина . Следующий код Python закрывает все диалоговые окна с именами, соответствующими списку to_close
. (Я проверил это с именами пользователей чата, но не с именами чатов IRC, поэтому для ваших целей может потребоваться дополнительная настройка.)
to_close = ["#general", "nickserv"]
for conv in purple.PurpleGetConversations():
if purple.PurpleConversationGetName(conv) in to_close:
purple.PurpleConversationDestroy(conv)
Поместите следующее в начало вашего файла Python, чтобы инициализировать объект purple
для связи с Pidgin / Finch через D-Bus (из 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
с использованием 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. Питон кажется намного чище.