X-Git-Url: https://git.madduck.net/code/irssi/scripts-bc-bd.git/blobdiff_plain/e581779d5e4efc99d1dfa74ad3880be840ed3393..a2216768e3b5ad42e86de97b6a2d931cb79978bd:/chanact.pl diff --git a/chanact.pl b/chanact.pl index f1f69f1..cecd635 100644 --- a/chanact.pl +++ b/chanact.pl @@ -4,7 +4,7 @@ use Irssi::TextUI; 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', @@ -30,6 +30,7 @@ $VERSION = "0.5.10"; # 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 , 2004-06-22 # Ivo Timmermans win->{hilight} patch # @@ -160,6 +161,18 @@ $VERSION = "0.5.10"; # * 3 : hide channels with text messages # * 4 : hide all channels (now why would you want to do that) # +# /set chanact_filter_windowlist +# * : 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 +# 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 ######### @@ -214,6 +227,7 @@ sub remake() { 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}) } @@ -233,6 +247,26 @@ sub remake() { !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; + } + + my $filter_level = Irssi::settings_get_int('chanact_filter'); + if ($match_windowlist) { + # window matches windowlist so use + # chanact_filter_windowlist_level to override + # chanact_filter + $filter_level = Irssi::settings_get_int('chanact_filter_windowlist_level'); + } + # 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 @@ -243,7 +277,7 @@ sub remake() { # 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; @@ -262,8 +296,6 @@ sub remake() { } } - 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} "; @@ -438,6 +470,9 @@ Irssi::settings_add_str('chanact', 'chanact_header', "Act: "); 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'); @@ -463,7 +498,13 @@ Irssi::signal_add_last('window refnum changed', 'refnum_changed'); ### # # 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