开放的编程资料库

当前位置:我爱分享网 > PHP教程 > 正文

Mumbles irssi 集成

在过去的六到九个月里,我一直在定期使用IRC,这在很大程度上是由于Freenode#zftalk频道上不断壮大的ZF社区(不幸的是,我根本没有时间不再使用那个特定频道,但您通常可以在#zftalk.dev中找到我),同时也可以与其他同行、朋友和同事保持联系。

然而,一个困难是在使用IRC的同时保持高生产力。Tome,当有人提到我的名字或观看词时,最终客户会向我发送通知——让我可以在闲暇时阅读频道,但仍会及时回复人们。

这几个月我尝试了各种IRC客户端,从Pidgin(IRC的糟糕界面)、mirc(弄清楚UI的巨大困难)、xchat(不错,但似乎有点重)、Chatzilla(我喜欢界面,但是一旦你有很多选项卡,在它们之间切换就很笨拙;我也讨厌Firefox死机或重启导致Chatzilla做同样的事情),现在irssi。

到目前为止,irssi是我尝试过的最好的——我可以在屏幕上运行它,只要我的机器在运行,我就可以让它保持打开状态。界面合理,干净利落地将频道与私人消息分开。打开、关闭和操作窗口很容易。而且它是高度可编写脚本的……包括在我实际使用的语言中!perl绑定是一流的,尽管有时很神秘。然而,重要的是,如果您想尝试做某事,那里有很多示例。所以,我想我应该写一个quickplugin来触发通知。

我一直在为linux使用许多不同的通知服务器,并且个人喜欢gnotify和mumbles。两者都非常轻量级,并提供用于触发通知的网络协议。

我首先尝试使用gnotify。它有一个非常非常简单的TCP协议,我已经成功地从shell、PHP和perl创建了消息。不幸的是,出于某种原因,在irssi中使用它会显示一些奇怪的行为:从通知触发到完成(即通知消失),我会失去光标和输入输入的能力。分叉进程似乎没有帮助。

所以,我决定尝试mumbles。Mumbles是用Python编写的,并且具有可主题化的通知——这已经是一个优势。它默认通过dbus运行,但也可以选择生成一个实现Growl协议的服务器——使任何进程都可以访问它以发送通知。此外,它还有一个用于触发通知的命令行实用程序——默认情况下通过dbus,但如果正在运行,则可以选择联系growl服务器。

Growl的协议有点复杂,我不想在这上面花太多时间。所以,我做了一个快速、肮脏的hack:我使用反引号来触发CLI实用程序。而且它的效果非常好——没有任何延迟。这是代码:

# $HOME/.irssi/scripts/mumbles.pl
use strict;
use Irssi;
use Irssi::Irc;
use vars qw($VERSION %IRSSI);

$VERSION = '0.1.0';
%IRSSI = (
    authors     => "Matthew Weier O'Phinney",
    contact     => 'matthew@weierophinney.net',
    name        => 'Mumbles notifications for irssi',
    description => 'This script enables mumbles notifications for irssi',
    license     => 'New BSD',
    changed     => "2008-12-10"
);


sub mumbles_sig_printtext {
  my ($dest, $text, $stripped) = @_;

  if (($dest->{level} & (MSGLEVEL_HILIGHT|MSGLEVEL_MSGS)) && ($dest->{level} & MSGLEVEL_NOHILIGHT) == 0)
  {
    if ($dest->{level} & MSGLEVEL_PUBLIC)
    {
      mumbles($dest->{target} . " : " . $text);
    }
  }
}

sub mumbles {
    my $message = shift;
    my $response;

    $message =~ s/[^!-~\s]//g;

    `/usr/bin/mumbles-send -g 127.0.0.1 -s "IRC" "$message"`;
}

Irssi::command_bind 'mumbles' => sub {
    my ($message) = @_;
    mumbles($message);
};

Irssi::signal_add({
  'print text'    => \&mumbles_sig_printtext
});

这会触发任何“突出显示”事件的通知-基本上,任何时候任何人在频道中“说出”我的名字,或提到我标记为突出显示的关键字。此外,我创建了一个mumbles命令,以便我可以发送测试消息(用法:/mumbles“这是消息...”)。您当然可以绑定到其他事件,例如主题更改、加入、部分等——我只对突出显示事件感兴趣。

您可能会注意到其中的正则表达式。我发现的一件事是,大多数消息都包含控制字符和非ascii字符,这通常会导致无法读取通知,以及irssi报告的一些令人讨厌的消息。正则表达式会在发出通知之前删除不在ascii字符集中或空白定义集中的任何内容。

我需要做的另一件事是配置compiz以确保通知确实在我的窗口上方弹出。为此,我进入了compiz配置管理器,选择“常规选项”,选择“焦点和提升行为”选项卡,然后将“焦点预防窗口”修改为如下内容:

(any) & !(class=Mumbles)

为了测试它,我将脚本放在$HOME/.irssi/scripts/mumbles.pl中,然后在irssi中执行/loadmumbles.pl.

一旦我喜欢它,我就将它符号链接到我的$HOME/.irssi/scripts/autorun/目录,让它在irssi加载后立即运行。我现在可以让irssi在屏幕会话中运行,或者最小化终端,并获得通知——让我保持高效并同时了解情况。

2008-12-12更新:添加了有关如何加载脚本的信息,并将位置固定为自动运行目录。谢谢,@sidhighwind!

未经允许不得转载:我爱分享网 » Mumbles irssi 集成

感觉很棒!可以赞赏支持我哟~

赞(0) 打赏