super basic irssi config
This commit is contained in:
parent
0ae54f73f0
commit
f20ab72edf
5 changed files with 3212 additions and 0 deletions
160
irssi-files/scripts/xchatnickcolor.pl
Normal file
160
irssi-files/scripts/xchatnickcolor.pl
Normal file
|
|
@ -0,0 +1,160 @@
|
|||
use strict;
|
||||
use Irssi 20020101.0250 ();
|
||||
use vars qw($VERSION %IRSSI);
|
||||
$VERSION = "1";
|
||||
%IRSSI = (
|
||||
authors => "Timo Sirainen, Ian Peters",
|
||||
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"
|
||||
);
|
||||
|
||||
# hm.. i should make it possible to use the existing one..
|
||||
Irssi::theme_register([
|
||||
'pubmsg_hilight', '{pubmsghinick $0 $3 $1}$2'
|
||||
]);
|
||||
|
||||
my %saved_colors;
|
||||
my %session_colors = {};
|
||||
my @colors = qw/ 2 3 4 5 6 7 9 10 11 12 13 14 15/;
|
||||
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
||||
close COLORS;
|
||||
}
|
||||
|
||||
sub save_colors {
|
||||
open COLORS, ">$ENV{HOME}/.irssi/saved_colors";
|
||||
|
||||
foreach my $nick (keys %saved_colors) {
|
||||
print COLORS "$nick:$saved_colors{$nick}\n";
|
||||
}
|
||||
|
||||
close COLORS;
|
||||
}
|
||||
|
||||
# If someone we've colored (either through the saved colors, or the hash
|
||||
# function) changes their nick, we'd like to keep the same color
|
||||
# associated
|
||||
# with them (but only in the session_colors, ie a temporary mapping).
|
||||
|
||||
sub sig_nick {
|
||||
my ($server, $newnick, $nick, $address) = @_;
|
||||
my $color;
|
||||
|
||||
$newnick = substr ($newnick, 1) if ($newnick =~ /^:/);
|
||||
|
||||
if ($color = $saved_colors{$nick}) {
|
||||
$session_colors{$newnick} = $color;
|
||||
} elsif ($color = $session_colors{$nick}) {
|
||||
$session_colors{$newnick} = $color;
|
||||
}
|
||||
}
|
||||
|
||||
# This gave reasonable distribution values when run across
|
||||
# /usr/share/dict/words
|
||||
|
||||
sub simple_hash {
|
||||
my ($string) = @_;
|
||||
chomp $string;
|
||||
my @chars = split //, $string;
|
||||
my $counter;
|
||||
|
||||
foreach my $char (@chars) {
|
||||
$counter += ord $char;
|
||||
}
|
||||
|
||||
$counter = $colors[$counter % 11];
|
||||
|
||||
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};
|
||||
|
||||
# Have -we- already assigned this nick a color?
|
||||
if (!$color) {
|
||||
$color = $session_colors{$nick};
|
||||
}
|
||||
|
||||
# Let's assign this nick a color
|
||||
if (!$color) {
|
||||
$color = simple_hash $nick;
|
||||
$session_colors{$nick} = $color;
|
||||
}
|
||||
|
||||
$color = "0".$color if ($color < 10);
|
||||
$server->command('/^format pubmsg %b<%w$2'.chr(3).$color.'$[-11]0%b>
|
||||
%K|%n $1');
|
||||
# $server->command('/^format action_public {pubaction
|
||||
# '.chr(3).$color.'$0}$1');
|
||||
}
|
||||
|
||||
sub cmd_color {
|
||||
my ($data, $server, $witem) = @_;
|
||||
my ($op, $nick, $color) = split " ", $data;
|
||||
|
||||
$op = lc $op;
|
||||
|
||||
if (!$op) {
|
||||
Irssi::print ("No operation given");
|
||||
} elsif ($op eq "save") {
|
||||
save_colors;
|
||||
} elsif ($op eq "set") {
|
||||
if (!$nick) {
|
||||
Irssi::print ("Nick not given");
|
||||
} elsif (!$color) {
|
||||
Irssi::print ("Color not given");
|
||||
} elsif ($color < 2 || $color > 14) {
|
||||
Irssi::print ("Color must be between 2 and 14 inclusive");
|
||||
} else {
|
||||
$saved_colors{$nick} = $color;
|
||||
}
|
||||
} elsif ($op eq "clear") {
|
||||
if (!$nick) {
|
||||
Irssi::print ("Nick not given");
|
||||
} else {
|
||||
delete ($saved_colors{$nick});
|
||||
}
|
||||
} elsif ($op eq "list") {
|
||||
Irssi::print ("\nSaved Colors:");
|
||||
foreach my $nick (keys %saved_colors) {
|
||||
Irssi::print (chr (3) . "$saved_colors{$nick}$nick" .
|
||||
chr (3) . "1 ($saved_colors{$nick})");
|
||||
}
|
||||
} elsif ($op eq "preview") {
|
||||
Irssi::print ("\nAvailable colors:");
|
||||
foreach my $i (2..14) {
|
||||
Irssi::print (chr (3) . "$i" . "Color #$i");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
load_colors;
|
||||
|
||||
Irssi::command_bind('color', 'cmd_color');
|
||||
|
||||
Irssi::signal_add('message public', 'sig_public');
|
||||
Irssi::signal_add('event nick', 'sig_nick');
|
||||
Loading…
Add table
Add a link
Reference in a new issue