- my ($nick, $col) = ($_[0], 0);
- $col += ord for split //, $nick;
- my @rcolors = (nickcmp(get_info('version'), '2.4.0') < 0)
- ? (3, 4, 6, 8, 9, 10, 11, 12, 13)
- : (19, 20, 22, 24, 25, 26, 27, 28, 29);
- $col %= @rcolors;
- return sprintf "\003%d%s", $rcolors[$col], $nick;
+ my $nick = $_[0];
+ my $col = 0;
+ $col += ord for split //, $nick;
+ return sprintf "\003%d%s", $rcolors[$col % @rcolors], $nick;
+}
+
+sub save_context {
+ my $cur_cxt = get_context;
+ bless \$cur_cxt, 'Xchat::XPI::Utils::ContextGuard';
+}
+
+sub local_context {
+ return unless @_ >= 2;
+ my $code = pop;
+ my $new_cxt = (@_ == 1) ? $_[0] : find_context(@_);
+ my $cur_cxt = get_context;
+ if (set_context $new_cxt) {
+ my $guard = bless \$cur_cxt, 'Xchat::XPI::Utils::ContextGuard';
+ return $code->();
+ } else {
+ return undef;
+ }