our $VERSION = '0.02';
+sub irc_lc {
+ my ($bytes) = @_;
+
+ $bytes =~ y/A-Z[\\]^/a-z{|}~/;
+
+ return $bytes;
+}
+
my @rcolors;
BEGIN {
if (nickcmp(get_info('version'), '2.4.0') < 0) {
return sprintf "\003%d%s", $rcolors[$col % @rcolors], $nick;
}
+my %gui_commands = (
+ 'clear' => [ 'COLOR 0' ],
+ 'highlight' => [ 'FLASH' => 'COLOR 3' ],
+);
+
+sub gui {
+ my $commands = $gui_commands{$_[0] || 'nope'};
+ die 'Invalid command' unless defined $commands;
+ command "GUI $_" for @$commands;
+}
+
sub save_context {
my $cur_cxt = get_context;
bless \$cur_cxt, 'Xchat::XPI::Utils::ContextGuard';
set_context ${$_[0]};
}
+sub called_from_script (&) {
+ my $code = shift;
+ my $level = 0;
+ my ($package, $filename);
+ while (1) {
+ my @frame = caller $level;
+ last unless @frame;
+ if ($frame[0] !~ /^(?:Xchat|HexChat)::XPI\b/) {
+ ($package, $filename) = @frame[0, 1];
+ last;
+ }
+ ++$level;
+ }
+ if (defined $filename) {
+ my $internal_package = Xchat::Embed::file2pkg($filename);
+ my $mock = sub { $internal_package, $package };
+ no warnings 'redefine';
+ local *Xchat::Embed::find_pkg = $mock;
+ local *HexChat::Embed::find_pkg = $mock;
+ $code->();
+ }
+}
+
use base qw<Exporter>;
our @EXPORT = ();
our %EXPORT_TAGS = ('funcs' => [ qw<
+ irc_lc
dye_nick
+ gui
save_context local_context
+ called_from_script
> ]);
our @EXPORT_OK = map { @$_ } values %EXPORT_TAGS;
$EXPORT_TAGS{'all'} = [ @EXPORT_OK ];