diff options
| author | David Leadbeater | 2014-06-15 19:25:03 +0100 |
|---|---|---|
| committer | David Leadbeater | 2014-06-15 19:25:03 +0100 |
| commit | e382d976193c20918e8c490db4ae575b7440c75b (patch) | |
| tree | 2a1ebbb7c5dcc59c14c6d25fa26da4cf22c61285 | |
| parent | c61a2a39dc12a7206cf05cc541271972b2cd039e (diff) | |
| download | scripts.irssi.org-e382d976193c20918e8c490db4ae575b7440c75b.tar.bz2 | |
Update nickcolor a bit
Remove a 12 year old fixme that was actually fixed, but remove the cruft
related to it.
Add ability to configure colours to avoid needing to edit the script.
| -rw-r--r-- | _data/scripts.yaml | 4 | ||||
| -rw-r--r-- | scripts/nickcolor.pl | 47 |
2 files changed, 20 insertions, 31 deletions
diff --git a/_data/scripts.yaml b/_data/scripts.yaml index c18a447..29d8267 100644 --- a/_data/scripts.yaml +++ b/_data/scripts.yaml @@ -2746,11 +2746,11 @@ contact: "tss@iki.fi," description: "assign a different color for each nick" filename: "nickcolor.pl" - modified: "2008-05-17 17:39:11" + modified: "2014-06-15 19:13" license: "Public Domain" name: "Nick Color" url: "http://irssi.org/" - version: "1" + version: "2" - authors: "Kalle rpr Marjola" changed: "26.8.2003" diff --git a/scripts/nickcolor.pl b/scripts/nickcolor.pl index 69f2936..54d3e7a 100644 --- a/scripts/nickcolor.pl +++ b/scripts/nickcolor.pl @@ -1,39 +1,32 @@ use strict; use Irssi 20020101.0250 (); use vars qw($VERSION %IRSSI); -$VERSION = "1"; +$VERSION = "2"; %IRSSI = ( - authors => "Timo Sirainen, Ian Peters", + authors => "Timo Sirainen, Ian Peters, David Leadbeater", contact => "tss\@iki.fi", name => "Nick Color", description => "assign a different color for each nick", license => "Public Domain", url => "http://irssi.org/", - changed => "2002-03-04T22:47+0100"
+ changed => "Sun 15 Jun 19:10:44 BST 2014", ); -# hm.. i should make it possible to use the existing one.. -Irssi::theme_register([ - 'pubmsg_hilight', '{pubmsghinick $0 $3 $1}$2' -]); +# 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). my %saved_colors; my %session_colors = {}; -my @colors = qw/2 3 4 5 6 7 9 10 11 12 13/; sub load_colors { - open COLORS, "$ENV{HOME}/.irssi/saved_colors"; - - while (<COLORS>) { - # I don't know why this is necessary only inside of irssi - my @lines = split "\n"; - foreach my $line (@lines) { - my($nick, $color) = split ":", $line; - $saved_colors{$nick} = $color; - } + open my $color_fh, "<", "$ENV{HOME}/.irssi/saved_colors"; + while (<$color_fh>) { + chomp; + my($nick, $color) = split ":"; + $saved_colors{$nick} = $color; } - - close COLORS; } sub save_colors { @@ -76,19 +69,14 @@ sub simple_hash { $counter += ord $char; } - $counter = $colors[$counter % 11]; + my @colors = split / /, Irssi::settings_get_str('nickcolor_colors'); + $counter = $colors[$counter % @colors]; return $counter; } -# FIXME: breaks /HILIGHT etc. sub sig_public { my ($server, $msg, $nick, $address, $target) = @_; - my $chanrec = $server->channel_find($target); - return if not $chanrec; - my $nickrec = $chanrec->nick_find($nick); - return if not $nickrec; - my $nickmode = $nickrec->{op} ? "@" : $nickrec->{voice} ? "+" : ""; # Has the user assigned this nick a color? my $color = $saved_colors{$nick}; @@ -104,8 +92,8 @@ sub sig_public { $session_colors{$nick} = $color; } - $color = "0".$color if ($color < 10); - $server->command('/^format pubmsg {pubmsgnick $2 {pubnick '.chr(3).$color.'$0}}$1'); + $color = sprintf "\003%02d", $color; + $server->command('/^format pubmsg {pubmsgnick $2 {pubnick ' . $color . '$0}}$1'); } sub cmd_color { @@ -115,7 +103,7 @@ sub cmd_color { $op = lc $op; if (!$op) { - Irssi::print ("No operation given"); + Irssi::print ("No operation given (save/set/clear/list/preview)"); } elsif ($op eq "save") { save_colors; } elsif ($op eq "set") { @@ -150,6 +138,7 @@ sub cmd_color { load_colors; +Irssi::settings_add_str('misc', 'nickcolor_colors', '2 3 4 5 6 7 9 10 11 12 13'); Irssi::command_bind('color', 'cmd_color'); Irssi::signal_add('message public', 'sig_public'); |
