# 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
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) {
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;
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 {
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 {
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;
}