web-dev-qa-db-ja.com

誰かがIrssiに私を書いたときにtmuxが通知する

Tmux内でIrssiを使用してチャットを正常に管理しています。私も素晴らしい tmux-powerline を試しましたが、これは本当にフル機能のようです。

さて、誰かがtmuxのIrssiウィンドウで私にメッセージを送信したときにtmuxに通知させる方法があるかどうか疑問に思っています。

6
fradeve

hilightnotify.pl というirssiプラグインを作成しました。

Irssi内でhilight statusが設定/削除されると、スクリプトは構成可能なコマンドを実行します。リンクされた記事とスクリプト自体で説明されているように、私の名前が言及されたときに点滅するトレイアイコンを実行し、hilightステータスが削除されたときにアイコンを強制終了するために使用します(メッセージをメモしたことを意味します)が、やりたいことを実行できます。あなたが求めているtmux関数がCLIトリガーをサポートしている場合、それはおそらくあなたの状況に簡単に適応できます。

1

Irssiの代わりにmcabberを使用することを除いて、私は同様の状況にあります。 tmux-powerlineを使用しているので、このようなことができるかもしれません。

着信メッセージを〜/ tmp/mcabber.outに書き込むようにmcabberをカスタマイズしてから、〜/ 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も使用していませんが、manページを読んでグーグルを使用する数分で、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');

すべてのメッセージを通知するのか、プライベートメッセージだけを通知するのかわからないため、適切に選択してください。

0
John Schmitt