aboutsummaryrefslogtreecommitdiff
path: root/.irssi/scripts/nickcolor.pl
diff options
context:
space:
mode:
authorRyan Kavanagh <rak@debian.org>2018-03-21 11:39:59 -0400
committerRyan Kavanagh <rak@debian.org>2018-03-21 11:51:13 -0400
commit8c0412269bd4a90145ec74cca00b337c571d3fb8 (patch)
tree52d9b34e77f4f0d00465a246b6af8f30395311c3 /.irssi/scripts/nickcolor.pl
parentirssi (diff)
Update irssi config
Diffstat (limited to '')
-rw-r--r--.irssi/scripts/nickcolor.pl122
1 files changed, 115 insertions, 7 deletions
diff --git a/.irssi/scripts/nickcolor.pl b/.irssi/scripts/nickcolor.pl
index ff9915d..95b7b63 100644
--- a/.irssi/scripts/nickcolor.pl
+++ b/.irssi/scripts/nickcolor.pl
@@ -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,21 @@ 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');
+
+ # Reference for server/channel
+ my $tagtarget = "$server->{tag}/$target";
+
+ # 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 +117,84 @@ 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{$tagtarget} 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{$tagtarget} = $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');
+
+ # Reference for server/channel
+ my $tagtarget = "$server->{tag}/$target";
+
+ # 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{$tagtarget} 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{$tagtarget} = $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');
+
+ # Reference for server/channel
+ my $tagtarget = "$server->{tag}/$target";
+
+ # Empty current target nick if prefix option is enabled
+ $saved_nicks{$tagtarget} = '' 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');
+
+ # Reference for server/channel
+ my $tagtarget = "$server->{tag}/$target";
+
+ # Empty current target nick if prefix option is enabled
+ $saved_nicks{$tagtarget} = '' if ($enable_prefix);
+
}
sub cmd_color {
@@ -125,7 +226,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 +240,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');