summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--scripts/mirc_colour_popup.pl54
1 files changed, 39 insertions, 15 deletions
diff --git a/scripts/mirc_colour_popup.pl b/scripts/mirc_colour_popup.pl
index b12c4f6..c7e3ac7 100644
--- a/scripts/mirc_colour_popup.pl
+++ b/scripts/mirc_colour_popup.pl
@@ -5,56 +5,80 @@
#
# usage:
#
-# after loading the script, add the statusbar item somewhere convenient:
-# /statusbar window add -after barstart colours
+# after loading the script, add the statusbar item somewhere convenient:
+# /statusbar prompt add -before input -alignment right colours
#
use strict;
+use warnings;
use Irssi;
use Irssi::TextUI;
use vars qw($VERSION %IRSSI);
-$VERSION = "1.0";
+$VERSION = "1.1"; # 6c78efbfcb07c71
%IRSSI = (
- authors => "Michael Kowalchuk",
+ authors => "Michael Kowalchuk, Nei",
contact => "michael.kowalchuk\@gmail.com",
name => "mirc_colour_popup",
description => "Shows a mIRC-style colour popup when you hit ^C.",
license => "Public Domain",
- changed => "9.26.2008",
);
my $vis;
+my ($efg, $ebg) = (-1, -1);
+my $ext_colour = Irssi::version >= 20140701;
my @colours = ('W','k','b','g','R','r','m','y','Y','G','c','C','B','P','K','w');
+if ($ext_colour) {
+ @colours = (
+ qw(0F 00 01 02 0C 04 05 06 0E 0A 03 0B 09 0D 08 07),
+ qw(20 36 3C 26 16 1D 17 18 11 22 21 31),
+ qw(30 46 4I 2C 1C 1J 1E 19 12 33 32 41),
+ qw(40 56 5O 3I 1I 1X 1L 1H 13 45 43 51),
+ qw(60 6C 6U 4U 1U 2Y 1Z 2N 15 5B 65 62),
+ qw(67 6J 6V 5V 2V 3Y 2Z 3N 2B 5H 6B 69),
+ qw(6L 6R 6X 5X 4X 4Y 4Z 4T 4N 5N 6N 6G),
+ qw(10 7B 7D 7F 7H 7J 7M 7P 7S 7W 6Z),'n');
+}
+
sub colours_sb {
my ($item, $get_size_only) = @_;
- my $txt;
+ my $txt = '';
if( $vis ) {
+ unless ($ext_colour) {
$txt = join " ", map { "\%$colours[$_]$_" } 0 .. 15;
+ } else {
+ my $sc = $ebg >= 0 && $ebg < 99 ? $ebg : $efg;
+ $txt = join " ", map { '%'.($ebg>=0?'x':'X').$colours[$_].(0+$_).'%n' }
+ $sc >= 0 ? grep /^0?$sc/, '00' .. '99' : ('00' .. '15');
+ $txt =~ s/%[xX]n/%n/g;
+ }
}
- $item->default_handler($get_size_only, "{sb $txt}", undef, 1);
+ $item->default_handler($get_size_only, "%0{sb $txt}", '', 1);
}
-
Irssi::signal_add_last 'gui key pressed' => sub {
my ($key) = @_;
-
- if( not $vis and $key eq 3 ) {
- $vis = 1;
- Irssi::statusbar_items_redraw('colours');
+ my $text = Irssi::parse_special('$L');
+ if ((substr $text, 0, Irssi::gui_input_get_pos()) =~ /\cC(?:(\d{1,2})(?:,(\d{1,2}))?|\d{1,2}(,))?$/) {
+ my ($fg, $bg) = ($1//-1, $2//($3?99:-1));
+ if ($fg != $efg || $bg != $ebg || not $vis ) {
+ $vis = 1;
+ ($efg, $ebg) = ($fg, $bg);
+ Irssi::statusbar_items_redraw('colours');
+ }
}
-
- elsif( $vis and $key ne 3 ) {
+ elsif( $vis ) {
$vis = undef;
+ ($efg, $ebg) = (-1, -1);
Irssi::statusbar_items_redraw('colours');
}
};
-Irssi::statusbar_item_register('colours', undef, 'colours_sb');
+Irssi::statusbar_item_register('colours', '$0', 'colours_sb');