From 4c8623a5266407bef0f3b4b52464f64147dd7b98 Mon Sep 17 00:00:00 2001 From: Ailin Nemui Date: Thu, 10 Dec 2015 14:46:55 +0100 Subject: add dynamic colour selection to popup --- scripts/mirc_colour_popup.pl | 54 ++++++++++++++++++++++++++++++++------------ 1 file changed, 39 insertions(+), 15 deletions(-) (limited to 'scripts') 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'); -- cgit v1.2.3