use vars qw($VERSION %IRSSI);
-$VERSION = "0.5.10";
+$VERSION = "0.5.11";
%IRSSI = (
authors => 'BC-bd, Veli',
contact => 'bd@bc-bd.org, veli@piipiip.net',
# qrczak@knm.org.pl chanact_abbreviate_names
# qerub@home.se Extra chanact_show_mode and chanact_chop_status
# madduck@madduck.net Better channel aliasing (case-sensitive, cross-network)
+# chanact_filter_windowlist
# Jan 'jast' Krueger <jast@heapsort.de>, 2004-06-22
# Ivo Timmermans <ivo@o2w.nl> win->{hilight} patch
#
# * 3 : hide channels with text messages
# * 4 : hide all channels (now why would you want to do that)
#
+# /set chanact_filter_windowlist <string>
+# * <string> : space-separated list of windows for which to use
+# chanact_filter_windowlist_level instead of
+# chanact_filter.
+# 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.
+#
#########
# HINTS
#########
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');
if (Irssi::settings_get_bool('chanact_sort_by_activity')) {
@windows = sort { ($b->{last_line} <=> $a->{last_line}) }
!ref($active) && next;
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
+ next if ($win->{data_level} < $filter_level);
# (status) is an awfull long name, so make it short to 'S'
# some people don't like it, so make it configurable
# check if we should show the mode
$mode = "";
- if ($active->{type} eq "CHANNEL") {
+ if ($type eq "CHANNEL") {
my $server = $win->{active_server};
!ref($server) && next;
}
}
- next if (Irssi::settings_get_int('chanact_filter') > $win->{data_level});
-
# in case we have a specific hilightcolor use it
if ($win->{hilight_color}) {
$hilight = "{sb_act_hilight_color $win->{hilight_color} ";
Irssi::settings_add_bool('chanact', 'chanact_chop_status', 1);
Irssi::settings_add_bool('chanact', 'chanact_sort_by_activity', 1);
Irssi::settings_add_int('chanact', 'chanact_filter', 0);
+Irssi::settings_add_str('chanact', 'chanact_filter_windowlist', "");
+Irssi::settings_add_int('chanact', 'chanact_filter_windowlist_level',
+ Irssi::settings_get_int('chanact_filter') < 4 ? 4 : 2);
# register the statusbar item
Irssi::statusbar_item_register('chanact', '$0', 'chanact');
###
#
# Changelog
-#
+#
+# 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
+# (madduck@madduck.net).
+#
# 0.5.10
# - fixed irssi crash when using Irssi::print from within remake()
# - added option to filter out some data levels, based on a patch by