在过去的六到九个月里,我一直在定期使用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!