2

スクリプトから pidgin 会話ウィンドウの複数のタブを閉じる方法 (いくつか#general#nickservタブ)。を使用してみましたが、結果はxdotoolありdevilspieません。

4

1 に答える 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)

purpleD-Bus を介して Pidgin/Finch と通信するためのオブジェクトを初期化するために、Python ファイルの先頭に次の行を追加します ( 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 が苦手な方のために、同じことをshusingで書き直したものを次に示します (スクリプトへの引数を反復処理することに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

ただし、その s のパイプラインがどれほどもろいかは完全にはわかりsedません。Python はずっときれいに見えます。

于 2012-02-10T20:40:58.150 に答える