![当有人在 Irssi 上给我写消息时,tmux 会通知我](https://linux22.com/image/1350181/%E5%BD%93%E6%9C%89%E4%BA%BA%E5%9C%A8%20Irssi%20%E4%B8%8A%E7%BB%99%E6%88%91%E5%86%99%E6%B6%88%E6%81%AF%E6%97%B6%EF%BC%8Ctmux%20%E4%BC%9A%E9%80%9A%E7%9F%A5%E6%88%91.png)
我成功地在 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');
我不确定您是否希望收到所有通知还是仅收到私人消息,因此请适当选择。