]> git.99rst.org Git - irssi-scripts.irssi.org.git/commitdiff
[nickcolor.pl] Fix wrong output. Add two new (optional) functionalities
authorBruno Cattáneo <redacted>
Tue, 9 Jan 2018 00:54:42 +0000 (21:54 -0300)
committerBruno Cattáneo <redacted>
Tue, 9 Jan 2018 00:54:42 +0000 (21:54 -0300)
scripts/nickcolor.pl

index ff9915d1b994bc11b182361999b75f0a859717aa..4c7b583fe480626937cfcd9cb3713c66e9401bcf 100644 (file)
@@ -1,24 +1,36 @@
 use strict;
 use Irssi 20020101.0250 ();
-use vars qw($VERSION %IRSSI); 
-$VERSION = "2";
+use vars qw($VERSION %IRSSI);
+$VERSION = "2.1";
 %IRSSI = (
-    authors     => "Timo Sirainen, Ian Peters, David Leadbeater",
-    contact    => "tss\@iki.fi", 
+    authors     => "Timo Sirainen, Ian Peters, David Leadbeater, Bruno Cattáneo",
+    contact    => "tss\@iki.fi",
     name        => "Nick Color",
     description => "assign a different color for each nick",
     license    => "Public Domain",
     url                => "http://irssi.org/",
-    changed    => "Sun 15 Jun 19:10:44 BST 2014",
+    changed    => "Mon 08 Jan 21:28:53 BST 2018",
 );
 
 # Settings:
 #   nickcolor_colors: List of color codes to use.
 #   e.g. /set nickcolor_colors 2 3 4 5 6 7 9 10 11 12 13
 #   (avoid 8, as used for hilights in the default theme).
+#
+#   nickcolor_enable_prefix: Enables prefix for same nick.
+#
+#   nickcolor_enable_truncate: Enables nick truncation.
+#
+#   nickcolor_prefix_text: Prefix text for succesive messages.
+#   e.g. /set nickcolor_prefix_text -
+#
+#   nickcolor_truncate_value: Truncate nick value.
+#   e.g. /set nickcolor_truncate_value -7
+#   This will truncate nicknames at 7 characters and make them right aligned
 
 my %saved_colors;
 my %session_colors = {};
+my %saved_nicks; # To store each channel's last nickname
 
 sub load_colors {
   open my $color_fh, "<", "$ENV{HOME}/.irssi/saved_colors";
@@ -75,9 +87,18 @@ sub simple_hash {
   return $counter;
 }
 
+# process public (others) messages
 sub sig_public {
   my ($server, $msg, $nick, $address, $target) = @_;
 
+  my $enable_prefix = Irssi::settings_get_bool('nickcolor_enable_prefix');
+  my $enable_truncate = Irssi::settings_get_bool('nickcolor_enable_truncate');
+  my $prefix_text = Irssi::settings_get_str('nickcolor_prefix_text');
+  my $truncate_value = Irssi::settings_get_int('nickcolor_truncate_value');
+
+  # Set default nick truncate value to 0 if option is disabled
+  $truncate_value = 0 if (!$enable_truncate);
+
   # Has the user assigned this nick a color?
   my $color = $saved_colors{$nick};
 
@@ -93,7 +114,75 @@ sub sig_public {
   }
 
   $color = sprintf "\003%02d", $color;
-  $server->command('/^format pubmsg {pubmsgnick $2 {pubnick ' . $color . '$0}}$1');
+
+  # Optional: We check if it's the same nickname for current target
+  if ($saved_nicks{$target} eq $nick && $enable_prefix)
+  {
+    # Grouped message
+    Irssi::command('/^format pubmsg ' . $prefix_text . '$1');
+  }
+  else
+  {
+    # Normal message
+    Irssi::command('/^format pubmsg {pubmsgnick $2 {pubnick ' . $color . '$[' . $truncate_value . ']0}}$1');
+
+    # Save nickname for next message
+    $saved_nicks{$target} = $nick;
+  }
+
+}
+
+# process public (me) messages
+sub sig_me {
+  my ($server, $msg, $target) = @_;
+  my $nick = $server->{nick};
+
+  my $enable_prefix = Irssi::settings_get_bool('nickcolor_enable_prefix');
+  my $enable_truncate = Irssi::settings_get_bool('nickcolor_enable_truncate');
+  my $prefix_text = Irssi::settings_get_str('nickcolor_prefix_text');
+  my $truncate_value = Irssi::settings_get_int('nickcolor_truncate_value');
+
+  # Set default nick truncate value to 0 if option is disabled
+  $truncate_value = 0 if (!$enable_truncate);
+
+  # Optional: We check if it's the same nickname for current target
+  if ($saved_nicks{$target} eq $nick && $enable_prefix)
+  {
+    # Grouped message
+    Irssi::command('/^format own_msg ' . $prefix_text . '$1');
+  }
+  else
+  {
+    # Normal message
+    Irssi::command('/^format own_msg {ownmsgnick $2 {ownnick $[' . $truncate_value . ']0}}$1');
+
+    # Save nickname for next message
+    $saved_nicks{$target} = $nick;
+  }
+
+}
+
+# process public (others) actions
+sub sig_action_public {
+  my ($server, $msg, $nick, $address, $target) = @_;
+
+  my $enable_prefix = Irssi::settings_get_bool('nickcolor_enable_prefix');
+
+  # Empty current target nick if prefix option is enabled
+  $saved_nicks{$target} = '' if ($enable_prefix);
+
+}
+
+# process public (me) actions
+sub sig_action_me {
+  my ($server, $msg, $target) = @_;
+  my $nick = $server->{nick};
+
+  my $enable_prefix = Irssi::settings_get_bool('nickcolor_enable_prefix');
+
+  # Empty current target nick if prefix option is enabled
+  $saved_nicks{$target} = '' if ($enable_prefix);
+
 }
 
 sub cmd_color {
@@ -125,7 +214,7 @@ sub cmd_color {
   } elsif ($op eq "list") {
     Irssi::print ("\nSaved Colors:");
     foreach my $nick (keys %saved_colors) {
-      Irssi::print (chr (3) . "$saved_colors{$nick}$nick" .
+      Irssi::print (chr (3) . sprintf("%02d", $saved_colors{$nick}) . "$nick" .
                    chr (3) . "1 ($saved_colors{$nick})");
     }
   } elsif ($op eq "preview") {
@@ -139,7 +228,14 @@ sub cmd_color {
 load_colors;
 
 Irssi::settings_add_str('misc', 'nickcolor_colors', '2 3 4 5 6 7 9 10 11 12 13');
+Irssi::settings_add_bool('misc', 'nickcolor_enable_prefix', 0);
+Irssi::settings_add_bool('misc', 'nickcolor_enable_truncate', 0);
+Irssi::settings_add_str('misc', 'nickcolor_prefix_text' => '- ');
+Irssi::settings_add_int('misc', 'nickcolor_truncate_value' => 0);
 Irssi::command_bind('color', 'cmd_color');
 
 Irssi::signal_add('message public', 'sig_public');
+Irssi::signal_add('message own_public', 'sig_me');
+Irssi::signal_add('message irc action', 'sig_action_public');
+Irssi::signal_add('message irc own_action', 'sig_action_me');
 Irssi::signal_add('event nick', 'sig_nick');
git clone https://git.99rst.org/PROJECT