]> git.99rst.org Git - irssi-scripts.irssi.org.git/commitdiff
reworked code to work better with default hidelevel
authorvague666 <redacted>
Mon, 17 Sep 2018 18:29:43 +0000 (20:29 +0200)
committervague666 <redacted>
Mon, 17 Sep 2018 18:29:43 +0000 (20:29 +0200)
scripts/toggle_hidelevel.pl

index a3588da13d785a73b0a0c603bcc0a650a47529e2..fea4f5189204790be29bb30d3a8937eb5a34088c 100644 (file)
@@ -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;
 }
git clone https://git.99rst.org/PROJECT