当有人在 Irssi 上给我写消息时,tmux 会通知我

当有人在 Irssi 上给我写消息时,tmux 会通知我

我成功地在 tmux 中使用 Irssi 来管理聊天。我也尝试过很棒的tmux-电力线,看起来功能确实很齐全。

现在,我想知道是否有一种方法可以让 tmux 在有人在 tmux 中的 Irssi 窗口向我发送消息时通知我。

答案1

我写了一个名为 irssi 插件hilightnotify.pl

hilight当在 irssi 中设置/删除状态时,脚本会运行一个可配置的命令。我使用它在提到我的名字时执行闪烁的托盘图标,并在hilight删除状态时(意味着我已记下该消息)关闭该图标,如链接文章和脚本本身中所述,但您可以运行任何您想要的。如果您想要的 tmux 功能支持 CLI 触发器,那么它可能很容易适应您的情况。

答案2

我的情况类似,只是我使用的是 mcabber 而不是 irssi。由于您使用 tmux-powerline,因此您可能可以执行类似的操作。

我定制了 mcabber 将传入消息写入 ~/tmp/mcabber.out,然后在 ~/etc/tmux-powerline/segments/mcabber 中创建了一个 mcabber 段:

#!/usr/bin/env bash

segment_path=$(dirname $0)
source "$segment_path/../lib.sh"

echo $(roll_stuff "$(cat ~/tmp/mcabber.out)" 100 1)

exit 0

当然,我在我的状态左侧创建了一个条目:

declare -A mcabber
mcabber+=(["script"]="${segments_path}/mcabber")
mcabber+=(["foreground"]="colour1")
mcabber+=(["background"]="colour0")
mcabber+=(["separator"]="${default}")
register_segment "mcabber"

我将包含 mcabber 的窗口命名为“聊天”。为了将消息标记为已读,我查看了 $(list-windows) 的输出,并查看该聊天窗口是否在 ~/bin/mcabber_mark_read 中处于活动状态:

#!/usr/bin/env bash

sleep 5
# check to see that among the tmux windows, the active one is called 'chat'
tmux list-windows | grep chat | grep -q '(active)$'
if [[ $? -eq 0 ]]; then
    rm ~/tmp/mcabber.out
fi

在我的 .tmux.conf 中,每当我更改窗口时,我都会使用状态栏运行 ~/bin/mcabber_mark_read:

set-window-option -g window-status-current-format '[#(~/bin/mcabber_mark_read)#I:#W#F]'

我既不使用 perl 编程,也不使用 irssi,但花几分钟阅读手册页并使用谷歌,我可能会找到一个适用于 irssi 的解决方案;注意:这未经测试

$ mkdir -p ~/.irssi/scripts/autorun
$ cp /usr/share/irssi/scripts/msg-event.pl ~/.irssi/scripts/autorun/msg-event.pl

然后我编辑 msg-evnt.pl 使其看起来像这样:

use Irssi;
use strict;
use vars qw($VERSION %IRSSI);

sub event_msg {
    my ($server, $data, $nick, $host) = @_;
    open(MYFILE, '>', '~/tmp/mcabber.out');
    print MYFILE $text;
    close(MYFILE)
}

#Irssi::signal_add('event privmsg', 'event_msg');
Irssi::signal_add('event pubmsg', 'event_msg');

我不确定您是否希望收到所有通知还是仅收到私人消息,因此请适当选择。

相关内容