aboutsummaryrefslogtreecommitdiffstats
path: root/activity_bar.pl
blob: 1b5e5b027d81e5adf12bff834161a2523c2b38a6 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
use strict;
use warnings;

use IO::Socket::INET;

weechat::register(
	'activity_bar',
	'Teddy Wing',
	'1.0',
	'GPL-3.0-or-later',
	'Monitor activity in all buffers and update AnyBar',
	'shutdown',
	''
);

# Flush socket immediately.
$| = 1;

my $socket = IO::Socket::INET->new(
	PeerAddr => 'localhost',
	PeerPort => '1738',
	Proto => 'udp',
) or die "error: can't create socket: $!";

sub shutdown {
	$socket->close();
}


my $print_hook = weechat::hook_print('', '', '', 0, 'print_cb', '');
weechat::hook_command(
	'activity_bar',
	'Activity Bar commands',
	'[clear] | [enable|disable]',
	'To disable activity notifications when WeeChat is focused, turn on terminal focus events:

    /set weechat.startup.command_after_plugins "/print -stdout \033[?1004h\n"
    /trigger add reset_focus signal "quit" "" "" "/print -stdout \033[?1004l\n"

Then disable activity_bar on focus, and enable it on unfocus:

    /key bind meta2-I /activity_bar disable
    /key bind meta2-O /activity_bar enable

  clear: change AnyBar icon to hollow
 enable: enable activity notification
disable: clear the AnyBar icon and disable activity notification',
	'clear
		 || enable
		 || disable',
	'activity_bar_command_cb',
	''
);

sub print_cb {
	my ($data, $buffer, $date, $tags, $displayed, $highlight, $prefix, $message) = @_;

	my $buffer_type = weechat::buffer_get_string($buffer, 'localvar_type');

	if ($buffer_type eq 'private') {
		anybar_send('blue');
	}
	elsif ($highlight == 1) {
		anybar_send('purple');
	}
	else {
		anybar_send('orange');
	}

	return weechat::WEECHAT_RC_OK;
}

sub anybar_send {
	my ($message) = @_;

	$socket->send($message);
}

sub activity_bar_command_cb {
	my ($data, $buffer, $args) = @_;

	if ($args eq 'clear') {
		anybar_send('hollow');
	}
	if ($args eq 'disable') {
		anybar_send('hollow');
		weechat::unhook($print_hook);
		$print_hook = undef;
	}
	if ($args eq 'enable' && !$print_hook) {
		$print_hook = weechat::hook_print('', '', '', 0, 'print_cb', '');
	}

	return weechat::WEECHAT_RC_OK;
}