Created
February 25, 2013 00:58
-
-
Save uriel1998/5026598 to your computer and use it in GitHub Desktop.
colorize perl script for xchat. Lets you colorize nicks that are in the middle of messages. No longer online, so I snagged this copy from archive.org before it went away completely.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/perl | |
# This script was no no longer online, so I snagged it from archive.org at | |
# http://web.archive.org/web/20051216235430/http://ant.home.comcast.net/colorize/colorize-pod.html | |
# | |
# colorize-0.0.3.pl - Colorize messages, nicks in message text, or both. | |
# | |
# Usage: see the POD at the end of this file or type '/colorize ?' in Xchat. | |
# | |
# To customize the brackets that surround the sending nick, e.g. <nick>, | |
# modify any of the three variables in the section called 'BRACKET SETTINGS' | |
# below. | |
# | |
use strict; | |
use warnings; | |
my %color = ( | |
white => '00', | |
black => '01', | |
blue => '02', | |
green => '03', | |
red => '04', | |
darkgred => '05', | |
purple => '06', | |
darkyellow => '07', | |
yellow => '08', | |
brightgreen => '09', | |
darkgreen => '10', | |
green => '11', | |
blue => '12', | |
brightpurple => '13', | |
darkgrey => '14', | |
lightgrey => '15', | |
); | |
#----------------------------------------------------------------- | |
# BRACKET SETTINGS | |
# | |
# For surrounding the nick, e.g. <nick> | |
# | |
# Examples are in the following comments | |
# my $BRACKET_COLOR = $color{white}; | |
# my $LEFT_BRACKET_STYLE = '<'; | |
# my $RIGHT_BRACKET_STYLE = '>'; | |
# | |
my $BRACKET_COLOR = ""; | |
my $LEFT_BRACKET_STYLE = ''; | |
my $RIGHT_BRACKET_STYLE = ''; | |
#----------------------------------------------------------------- | |
my $script_name = 'colorize.pl'; | |
my $script_version = '0.0.3'; | |
# Text Event to listen in on | |
my $print_event = 'Channel Message'; | |
# Xchat command to set colorize option | |
my $config_command = 'colorize'; | |
# functions for colorizing [ nicks | messages | all ] | |
my %colorize_with = ( | |
'message and embedded nicks' => \&colorize_all, | |
'message only' => \&colorize_messages_only, | |
'embedded nicks only' => \&colorize_nicks_only, | |
); | |
# Default to colorizing 'enabled' and colorizing all | |
my $colorize_command = 'message and embedded nicks'; | |
my $colorize_enabled = 1; | |
# Formatting codes | |
my $start_coloring_with = "\cC"; | |
my $formatting_off = "\cO"; | |
# Brackets | |
my $left_bracket | |
= $start_coloring_with | |
. $BRACKET_COLOR | |
. $LEFT_BRACKET_STYLE | |
. $formatting_off | |
; | |
my $right_bracket | |
= $start_coloring_with | |
. $BRACKET_COLOR | |
. $RIGHT_BRACKET_STYLE | |
. $formatting_off | |
; | |
# Cache for color codes of seen nicks | |
my %color_code_for = (); | |
# Register plugin with Xchat | |
Xchat::register( $script_name , $script_version ); | |
# Print a notice that the plugin was loaded | |
Xchat::print( | |
"\cB$script_name\cB version \cB$script_version\cB " . "loaded\n" | |
); | |
# Intercept events | |
Xchat::hook_print( $print_event, \&do_colorize ); | |
Xchat::hook_command( $config_command, \&set_colorize_option ); | |
# Get/Set options | |
sub set_colorize_option { # {{{ | |
my ( $switch ) = $_[0][1]; | |
$switch ||= ''; | |
my $msg; | |
for ( $switch ) { | |
# No switch, report state | |
/^$/ and do { | |
$msg = report_state(); | |
last; | |
}; | |
# Show usage | |
/^\?$|^h/i and do { | |
$msg = usage(); | |
last; | |
}; | |
# Enable/Disable | |
# disable | |
/^d/i and do { | |
# off | |
$colorize_enabled = 0; | |
$msg = "$script_name: Colorizing disabled\n"; | |
last; | |
}; | |
# enable | |
/^e/i and do { | |
# on | |
$colorize_enabled = 1; | |
$msg = "$script_name: Colorizing enabled\n"; | |
last; | |
}; | |
# Colorizing scheme | |
# colorize all | |
/^a/i and do { | |
$colorize_command = 'message and embedded nicks'; | |
$msg | |
= "$script_name: Setting colorize scheme to " | |
. "'$colorize_command'\n"; | |
last; | |
}; | |
# colorize message only | |
/^m/i and do { | |
$colorize_command = 'message only'; | |
$msg | |
= "$script_name: Setting colorize scheme to " | |
. "'$colorize_command'\n"; | |
last; | |
}; | |
# colorize nicks only | |
/^n/i and do { | |
$colorize_command = 'embedded nicks only'; | |
$msg | |
= "$script_name: Setting colorize scheme to " | |
. "'$colorize_command'\n"; | |
last; | |
}; | |
# Unrecognized switch | |
$msg | |
= "$script_name: Unrecognized option '$switch', " | |
. "keeping current option: $colorize_command\n"; | |
} | |
Xchat::print( $msg ); | |
return Xchat::EAT_ALL; | |
} # }}} | |
# Calls appropriate colorizing function | |
sub do_colorize { # {{{ | |
my ( $nick, $text ) = @{ $_[0] }; | |
return Xchat::EAT_NONE unless $colorize_enabled; | |
# Get: message sender's nick color for future reference | |
# sender's nick without color coding for use as key in cache | |
my ( $nick_color, $nick_name_only ) = $nick =~ /^\x03(\d{2})(.*)$/; | |
# Stop processing if nicks aren't colored | |
return Xchat::EAT_NONE unless defined $nick_color; | |
my $channel = Xchat::get_info("channel"); | |
my $server = Xchat::get_info("server"); | |
# Cache the color code for the sender's nick | |
$color_code_for{$server}{$channel}{$nick_name_only} = $nick_color; | |
# Use appropriate colorize scheme | |
my $colorized = $colorize_with{$colorize_command}->( | |
channel => $channel, | |
server => $server, | |
nick => $nick, | |
text => $text, | |
nick_color => $nick_color, | |
); | |
# Print newly colorized [ nick | message | both ] | |
Xchat::print( | |
$colorized, | |
$channel, | |
$server | |
); | |
# Let other plugins/scripts still see this event | |
return Xchat::EAT_XCHAT; | |
} # }}} | |
sub colorize_messages_only { # {{{ | |
my %arg = @_; | |
my $nick = $arg{nick}; | |
my $text = $arg{text}; | |
my $nick_color = $arg{nick_color}; | |
# Colorize the message text | |
my $colorized_text | |
= $start_coloring_with | |
. $arg{nick_color} | |
. $arg{text}; | |
# Join nick and colorized text | |
my $colorized_message | |
= $left_bracket . $arg{nick} . $right_bracket | |
. "\t" | |
. $colorized_text | |
. "\n" | |
; | |
return $colorized_message; | |
} # }}} | |
sub colorize_nicks_only { # {{{ | |
my %arg = @_; | |
my $channel = $arg{channel}; | |
my $server = $arg{server}; | |
my $nick = $arg{nick}; | |
my $text = $arg{text}; | |
my $nick_color = $arg{nick_color}; | |
# Colorize the mention of any cached nicks in the message text | |
for my $cached_nick ( keys %{ $color_code_for{$server}{$channel} } ) { | |
# cached nick found in message | |
if ( $text =~ /(\b\Q$cached_nick\E\b)/ ) { | |
my $cached_nick_color | |
= $color_code_for{$server}{$channel}{$cached_nick}; | |
my $colorized_cached_nick | |
= $start_coloring_with | |
. $cached_nick_color | |
. $cached_nick | |
. $formatting_off; | |
$text =~ s/(\b)\Q$cached_nick\E(\b)/$1$colorized_cached_nick$2/g; | |
} | |
} | |
# Join sender's nick and colorized text | |
my $message_with_colored_nicks_only | |
= $left_bracket . $nick . $right_bracket | |
. "\t" | |
. $text | |
. "\n" | |
; | |
return $message_with_colored_nicks_only; | |
} # }}} | |
sub colorize_all { # {{{ | |
my %arg = @_; | |
my $channel = $arg{channel}; | |
my $server = $arg{server}; | |
my $nick = $arg{nick}; | |
my $text = $arg{text}; | |
my $nick_color = $arg{nick_color}; | |
# Colorize the mention of any cached nicks in the message text | |
for my $cached_nick ( keys %{ $color_code_for{$server}{$channel} } ) { | |
if ( $text =~ /(\b\Q$cached_nick\E\b)/ ) { | |
my $cached_nick_color | |
= $color_code_for{$server}{$channel}{$cached_nick}; | |
my $colorized_cached_nick | |
= $start_coloring_with | |
. $cached_nick_color | |
. $cached_nick | |
. $start_coloring_with | |
. $nick_color | |
; | |
$text =~ s/(\b)\Q$cached_nick\E(\b)/$1$colorized_cached_nick$2/g; | |
} | |
} | |
# Colorize the message | |
$text | |
= $start_coloring_with | |
. $nick_color | |
. $text; | |
# Join sender's nick and colorized text | |
my $colorized_message | |
= $left_bracket . $nick . $right_bracket | |
. "\t" | |
. $text | |
. "\n" | |
; | |
return $colorized_message; | |
} # }}} | |
sub report_state { # {{{ | |
my $msg; | |
if ( $colorize_enabled ) { | |
$msg | |
= "$script_name: Status - Colorizing is enabled. " | |
. "Colorization scheme set to '$colorize_command'\n"; | |
} | |
else { | |
$msg | |
= "$script_name: Status - Colorizing is disabled. " | |
. "Colorization scheme last set to '$colorize_command'\n"; | |
} | |
return $msg; | |
} # }}} | |
sub usage { # {{{ | |
return my $usage = <<END_USAGE; | |
------------------------------- | |
Usage: /$config_command [OPTION] | |
If no option is given, the default action is to show the current settings. | |
?, help - Display this help message | |
Enable/Disabling Colorization | |
enable - Enable colorizing | |
disable - Disable colorizing | |
Colorizing Schemes | |
all - Colorize message and embedded nicks in message | |
message - Colorize message only | |
nicks - Colorize embedded nicks only | |
Example. To set colorization scheme to only colorize embedded nicks: | |
/colorize nicks | |
Note that you only need to type the first letter of the option. So the | |
following command will also set the scheme to colorize just nicks: | |
/colorize n | |
------------------------------- | |
END_USAGE | |
} # }}} | |
__END__ | |
=head1 NAME | |
colorize.pl - Colorize messages and/or embedded nicks with corresponding | |
colors. | |
=head1 VERSION | |
This documentation refers to colorize.pl version 0.0.3. | |
=head1 INSTALLATION | |
Short answer: | |
Put this file in your Xchat data directory (e.g. ~/.xchat2 on | |
linux). Make sure you've turned on colored nick names in your preferences. | |
Long answer: | |
The following is from http://www.xchat.org/faq/#q218 | |
18. How do I auto-load scripts at startup? | |
You just have to place the scripts into XChat's data directory. XChat will | |
auto-load scripts if they have the right extension .e.g If a filename ends in | |
.pl, it will be loaded as a Perl script. This data directory is different on | |
each platform: | |
Windows | |
It depends on your version of Windows and where it stores the Application Data | |
folder. On Windows XP it is usually: | |
C:\Documents and Settings\username\Application Data\X-Chat 2\ | |
UNIX | |
~/.xchat2/ Where "~" represents your home directory i.e.: $HOME/.xchat2/ | |
=head1 USAGE | |
/colorize [OPTION] | |
If no option is given, the default action is to show the current settings. | |
?, help - Display this help message | |
Enable/Disabling Colorization | |
enable - Enable colorizing | |
disable - Disable colorizing | |
Colorizing Schemes | |
all - Colorize message and embedded nicks in message | |
message - Colorize message only | |
nicks - Colorize embedded nicks only | |
Example. To set colorization scheme to only colorize embedded nicks: | |
/colorize nicks | |
Note that you only need to type the first letter of the option. So the | |
following command will also set the scheme to colorize just nicks: | |
/colorize n | |
=head1 CONFIGURATION | |
You can customize the type and color of the brackets that surround the | |
nick names. The default is to not have any surrounding brackets. | |
To change the bracket type and color, go to the section labeled | |
"BRACKET SETTINGS" towards the top of the script and edit the three | |
variables: | |
my $BRACKET_COLOR = ""; | |
my $LEFT_BRACKET_STYLE = ''; | |
my $RIGHT_BRACKET_STYLE = ''; | |
You can use the %color hash defined at the top of the script for defining | |
$BRACKET_COLOR. For example, to set the bracket color to green, set | |
the following: | |
my $BRACKET_COLOR = $color{green}; | |
The brackets can be any characters you want, you are not limited to | |
the usual '<' and '>'. For example, to set the bracket type to use | |
parentheses, set the following: | |
my $LEFT_BRACKET_STYLE = '('; | |
my $RIGHT_BRACKET_STYLE = ')'; | |
=head1 INCOMPATIBILITIES | |
Xchat 2.0.8 or above is required to load this plugin. | |
=head1 BUGS AND LIMITATIONS | |
Please report any bugs you find to the author. | |
This version only colorizes messages sent by other users. It does not | |
colorize messages sent by you or for you. | |
Patches welcome. :-) | |
=head1 SEE ALSO | |
http://ant.home.comcast.net/colorize is where this plugin is hosted. | |
http://www.xchat.org/docs/xchat2-perl.html has good documentation on | |
writing perl plugins. | |
=head1 AUTHOR | |
jf3 at swift.fastmail.fm | |
=head1 LICENSE AND COPYRIGHT | |
This plugin is made available under the same license as XChat, which | |
is the GPL. You can read it at http://www.gnu.org/licenses/gpl.txt. |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment