]> git.99rst.org Git - irssi-scripts.irssi.org.git/commitdiff
add dynamic colour selection to popup
authorAilin Nemui <redacted>
Thu, 10 Dec 2015 13:46:55 +0000 (14:46 +0100)
committerAilin Nemui <redacted>
Thu, 10 Dec 2015 14:40:03 +0000 (15:40 +0100)
scripts/mirc_colour_popup.pl

index b12c4f68cb019ea57e89627867e07cb027379680..c7e3ac73c8c338c642934aa1c5524024b4038a8f 100644 (file)
@@ -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');
 
 
git clone https://git.99rst.org/PROJECT