# * <string> : space-separated list of windows for which to use
# chanact_filter_windowlist_level instead of
# chanact_filter.
+# Alternatively, an entry can be postfixed with
+# a colon (':') and the level to use for that
+# window.
# The special string @QUERIES matches all queries.
#
# /set chanact_filter_windowlist_level <int>
-# like chanact_filter for windows in chanact_filter_windowlist. Defaults to
-# chanact_filter<4 ? 4 : 2, making chanact_filter_windowlist a list of
-# windows never to show if chanact_filter<4, and a list of windows to show
-# when there is reasonable activity if all channels would be hidden.
+# like chanact_filter for windows in chanact_filter_windowlist, which do not
+# have a specific value. Defaults to chanact_filter<4 ? 4 : 2, making
+# chanact_filter_windowlist a list of windows never to show if
+# chanact_filter<4, and a list of windows to show when there is reasonable
+# activity if all channels would be hidden.
#
#########
# HINTS
$item->default_handler($get_size_only, $actString, undef, 1);
}
+sub get_filterlevel {
+ my $windows = shift;
+ my $kwregexp = '(?:' . join('|', map quotemeta, @_) . ')';
+ my $defaultlevel = Irssi::settings_get_int('chanact_filter_windowlist_level');
+ foreach my $win (@$windows) {
+ return ($1 ? $1 : $defaultlevel) if $win =~ /^$kwregexp(?:\:(\d+))?$/;
+ }
+ return undef;
+}
+
+use Data::Dumper;
+
# this is the real creation method
sub remake() {
my ($afternumber,$finish,$hilight,$mode,$number,$display,@windows);
my $abbrev = Irssi::settings_get_int('chanact_abbreviate_names');
my $remove_prefix = Irssi::settings_get_str('chanact_remove_prefix');
my $remove_hash = Irssi::settings_get_bool('chanact_remove_hash');
- my $windowlist = Irssi::settings_get_str('chanact_filter_windowlist');
+ my @windowlist = split ' ', Irssi::settings_get_str('chanact_filter_windowlist');
if (Irssi::settings_get_bool('chanact_sort_by_activity')) {
@windows = sort { ($b->{last_line} <=> $a->{last_line}) }
my $name = $win->get_active_name;
my $type = $active->{type};
- # determine whether we have a match with the windowlist
- my @windowlist = split ' ', $windowlist;
- my $match_windowlist = grep { $_ eq $name } @windowlist;
- if ($type eq 'QUERY') {
- # if this is a query, also try to match @QUERIES
- $match_windowlist ||= grep { $_ eq '@QUERIES' } @windowlist;
- }
-
- # choose filter_level according to whether the window is in
- # the windowlist
- my $filter_level = $match_windowlist
- ? Irssi::settings_get_int('chanact_filter_windowlist_level')
- : Irssi::settings_get_int('chanact_filter');
-
- # skip windows with data of level lower than the applicable
- # filter setting
+ ## determine the filter_level to use to determine whether the
+ ## activity on the current window is worth the bother
+ #
+ my @matchlist; push @matchlist, $name;
+ # if this is a query, also try to match @QUERIES
+ push @matchlist, '@QUERIES' if ($type eq 'QUERY');
+ # get_filterlevel matches all items in @matchlist against the
+ # @windowlist and returns the applicable filterlevel
+ my $filter_level = get_filterlevel(\@windowlist, @matchlist);
+ # if we don't have a match (undef), then use the
+ # chanact_filter value
+ $filter_level = Irssi::settings_get_int('chanact_filter') unless $filter_level;
+
+ # now, skip windows with data of level lower than the
+ # filter level
next if ($win->{data_level} < $filter_level);
+ # alright, the activity is important, let's show the window
+ my $level = $win->{data_level};
+
# (status) is an awfull long name, so make it short to 'S'
# some people don't like it, so make it configurable
if (Irssi::settings_get_bool('chanact_chop_status')
# 0.5.11
# - added chanact_filter_windowlist, which is a space-separated list of
# windows for which to use chanact_filter_windowlist_level instead of
-# chanact_filter. You can use @QUERIES to match all queries
+# chanact_filter. Each window can also have a specific level
+# specified. You can use @QUERIES to match all queries
# (madduck@madduck.net).
#
# 0.5.10