Закрыть вкладки в окне разговора на пиджине - PullRequest
2 голосов
/ 10 января 2012

Как закрыть несколько вкладок в окне разговора на пиджине из скрипта (некоторые вкладки #general и #nickserv).Я пытался использовать xdotool и devilspie, но безрезультатно.

1 Ответ

4 голосов
/ 11 февраля 2012

Вы можете использовать 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. Питон кажется намного чище.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...