From: vague666 Date: Mon, 17 Sep 2018 18:29:43 +0000 (+0200) Subject: reworked code to work better with default hidelevel X-Git-Url: http://git.99rst.org/?a=commitdiff_plain;h=8e1081b15538f82e5e5231dcaa2372279ef9789c;p=irssi-scripts.irssi.org.git reworked code to work better with default hidelevel --- diff --git a/scripts/toggle_hidelevel.pl b/scripts/toggle_hidelevel.pl index a3588da..fea4f51 100644 --- a/scripts/toggle_hidelevel.pl +++ b/scripts/toggle_hidelevel.pl @@ -1,5 +1,5 @@ # Settings: -# window_hidden_levels - levels to hide/show with below commands +# window_default_hidden_level - levels to hide/show with below commands # Included commands: # /window togglelevel - hide/show levels in active window # /show_levels_all - show levels in all windows @@ -12,19 +12,27 @@ use Irssi::TextUI; use Data::Dumper; use vars qw($VERSION %IRSSI); -$VERSION = "0.3.2"; +$VERSION = "0.5.0"; %IRSSI = ( authors => 'Jari Matilainen', contact => 'vague!#irssi@freenode on irc', name => 'toggle_hidelevel', description => 'Toggle hidden levels on per window basis', licence => "GPLv2", - changed => "17.01.2018 01:00pm CET" + changed => "17.09.2018 20:30 CEST" ); my $windows; my $processing = 0; +Irssi::command_bind('hide_levels_all' => sub { + set_mode_all(1); +}); + +Irssi::command_bind('show_levels_all' => sub { + set_mode_all(0); +}); + sub set_mode_all { my ($mode) = @_; for my $win (Irssi::windows) { @@ -34,19 +42,12 @@ sub set_mode_all { sub set_mode { my ($win, $mode) = @_; - my $lvlbits = ($win->view->{hidden_level} - Irssi::level2bits('HIDDEN')) || ($windows->{$win->{refnum}}{levels} ? $windows->{$win->{refnum}}{levels} - Irssi::level2bits('HIDDEN') : 0); + my $lvlbits = $win->view->{hidden_level} || $windows->{$win->{refnum}}{levels}; my $levels = Irssi::bits2level($lvlbits); my $val; - unless($levels && length $levels) { - $val = '-ALL +HIDDEN'; - $windows->{$win->{refnum}}{mode} = 0; - } - else { - $mode = ($windows->{$win->{refnum}}{mode} // 0) ^ 1 unless defined $mode; - $val = $levels =~ s/(\w+)/sprintf("%s%s", $mode ? '+' : '-', $1)/gre; - $windows->{$win->{refnum}}{mode} = $mode; - } + $val = $levels =~ s/(\w+)/sprintf("%s%s", $mode ? '+' : '-', $1)/gre; + $windows->{$win->{refnum}}{mode} = $mode; if($val) { $processing += 1; @@ -60,9 +61,9 @@ Irssi::signal_add('message join' => sub { my $win = $server->window_find_item($target); my $levels = $win->view->{hidden_level}; - $windows->{$win->{refnum}}{levels} = $levels - Irssi::level2bits('HIDDEN') ? $levels : Irssi::settings_get_level('window_default_hidden_level'); - $windows->{$win->{refnum}}{mode} = $levels - Irssi::level2bits('HIDDEN') ? 1 : 0; - set_mode($win, 1) unless $levels - Irssi::level2bits('HIDDEN'); + $windows->{$win->{refnum}}{levels} = $levels; + $windows->{$win->{refnum}}{mode} = $levels ? 1 : 0; +# set_mode($win, 1) if $levels; }); Irssi::signal_add('window destroyed' => sub { @@ -76,18 +77,10 @@ Irssi::signal_add('window refnum changed' => sub { delete $windows->{$old_refnum}; }); -Irssi::command_bind('hide_levels_all' => sub { - set_mode_all(1); -}); - -Irssi::command_bind('show_levels_all' => sub { - set_mode_all(0); -}); - Irssi::command_bind('window togglelevel' => sub { my ($args, $server, $witem) = @_; return unless $witem; - set_mode($witem->window, undef); + set_mode($witem->window, ($windows->{$witem->window->{refnum}}{mode} // 0) ^ 1); }); Irssi::command_bind_last('window hidelevel' => sub { @@ -103,21 +96,23 @@ Irssi::command_bind_last('window hidelevel' => sub { if($args) { my $levels = $witem->window->view->{hidden_level}; $windows->{$witem->window->{refnum}}{levels} = $levels; - $windows->{$witem->window->{refnum}}{mode} = $levels - Irssi::level2bits('HIDDEN') ? 1 : 0; + $windows->{$witem->window->{refnum}}{mode} = $levels ? 1 : 0; } }); Irssi::command_bind('dump_window_hash' => sub { - for my $key (keys %$windows) { - warn Dumper($key, Irssi::bits2level($windows->{$key}{levels}), $windows->{$key}{mode}); + for my $key (sort {$a <=> $b} keys %$windows) { + print Data::Dumper->Dump([$key, Irssi::bits2level($windows->{$key}{levels}), $windows->{$key}{mode}], [qw(refnum levels mode)]); } }); -Irssi::settings_add_level('lookandfeel', 'window_default_hidden_level', 'HIDDEN'); +unless(Irssi::settings_get_str('window_default_hidelevel')) { + Irssi::settings_add_level('lookandfeel', 'window_default_hidelevel', 'HIDDEN'); +} for my $win (Irssi::windows) { my $view = $win->view(); - my $levels = ($view->{hidden_level} ? $view->{hidden_level} - Irssi::level2bits('HIDDEN') : 0) || ($windows->{$win->{refnum}}{levels} ? $windows->{$win->{refnum}}{levels} - Irssi::level2bits('HIDDEN') : 0); - $windows->{$win->{refnum}}{levels} = $levels // Irssi::settings_get_level('window_default_hidden_level'); + my $levels = $view->{hidden_level}; + $windows->{$win->{refnum}}{levels} = $levels; $windows->{$win->{refnum}}{mode} = $levels ? 1 : 0; }