diff options
| -rw-r--r-- | _data/scripts.yaml | 10 | ||||
| -rw-r--r-- | scripts/scriptassist.pl | 18 | ||||
| -rw-r--r-- | scripts/wlstat.pl | 669 | 
3 files changed, 9 insertions, 688 deletions
| diff --git a/_data/scripts.yaml b/_data/scripts.yaml index 18791e6..9c6d05f 100644 --- a/_data/scripts.yaml +++ b/_data/scripts.yaml @@ -4374,16 +4374,6 @@    url: "http://matin.maapallo.org/softa/irssi"    version: "1.1" -- authors: "BC-bd, Veli, Timo cras Sirainen, Wouter Coekaerts, Nei" -  contact: "bd@bc-bd.org, veli@piipiip.net, tss@iki.fi, wouter@coekaerts.be, Nei@QuakeNet" -  description: "Adds a window list in the status area. Based on chanact.pl by above authors." -  filename: "wlstat.pl" -  modified: "2008-05-17 17:39:11" -  license: "GNU GPLv2 or later" -  modules: "Encode" -  name: "wlstat" -  version: "0.5" -  - authors: "Jesper Lindh"    changed: "2004-03-12"    contact: "rakblad@midgard.liu.se" diff --git a/scripts/scriptassist.pl b/scripts/scriptassist.pl index 8b63139..12678db 100644 --- a/scripts/scriptassist.pl +++ b/scripts/scriptassist.pl @@ -94,7 +94,7 @@ sub call_openurl ($) {      my ($url) = @_;      no strict "refs";      # check for a loaded openurl -    if (defined %{ "Irssi::Script::openurl::" }) { +    if ( %{ "Irssi::Script::openurl::" }) {          &{ "Irssi::Script::openurl::launch_url" }($url);      } else {          print CLIENTCRAP "%R>>%n Please install openurl.pl"; @@ -204,7 +204,7 @@ sub script_info ($) {      my %result;      my $xml = get_scripts();      foreach (@{$scripts}) { -	next unless (defined $xml->{$_.".pl"} || (defined %{ 'Irssi::Script::'.$_.'::' } && defined %{ 'Irssi::Script::'.$_.'::IRSSI' })); +	next unless (defined $xml->{$_.".pl"} || ( %{ 'Irssi::Script::'.$_.'::' } &&  %{ 'Irssi::Script::'.$_.'::IRSSI' }));  	$result{$_}{version} = get_remote_version($_, $xml);  	my @headers = ('authors', 'contact', 'description', 'license', 'source');  	foreach my $entry (@headers) { @@ -686,8 +686,8 @@ sub list_sbitems ($) {      my $text;      foreach (@$scripts) {  	no strict 'refs'; -	next unless defined %{ "Irssi::Script::${_}::" }; -	next unless defined %{ "Irssi::Script::${_}::IRSSI" }; +	next unless  %{ "Irssi::Script::${_}::" }; +	next unless  %{ "Irssi::Script::${_}::IRSSI" };  	my %header = %{ "Irssi::Script::${_}::IRSSI" };  	next unless $header{sbitems};  	$text .= '%9"'.$_.'"%9 provides the following statusbar item(s):'."\n"; @@ -774,7 +774,7 @@ sub print_update (%) {  sub contact_author ($) {      my ($script) = @_;      no strict 'refs'; -    return unless defined %{ "Irssi::Script::${script}::" }; +    return unless  %{ "Irssi::Script::${script}::" };      my %header = %{ "Irssi::Script::${script}::IRSSI" };      if (defined $header{contact}) {  	my @ads = split(/ |,/, $header{contact}); @@ -854,7 +854,7 @@ sub get_remote_version ($$) {  sub get_local_version ($) {      my ($script) = @_;      no strict 'refs'; -    return unless defined %{ "Irssi::Script::${script}::" }; +    return unless  %{ "Irssi::Script::${script}::" };      my $version = ${ "Irssi::Script::${script}::VERSION" };      return $version;  } @@ -1087,8 +1087,8 @@ sub sig_command_script_load ($$$) {      my ($script, $server, $witem) = @_;      no strict;      $script = $2 if $script =~ /(.*\/)?(.*?)\.pl$/; -    if (defined %{ "Irssi::Script::${script}::" }) { -	if (defined &{ "Irssi::Script::${script}::pre_unload" }) { +    if ( %{ "Irssi::Script::${script}::" }) { +	if ( &{ "Irssi::Script::${script}::pre_unload" }) {  	    print CLIENTCRAP "%R>>%n Triggering pre_unload function of $script...";  	    &{ "Irssi::Script::${script}::pre_unload" }();  	} @@ -1120,7 +1120,7 @@ sub sig_complete ($$$$$) {  } -Irssi::settings_add_str($IRSSI{name}, 'scriptassist_script_sources', 'http://www.irssi.org/scripts/scripts.dmp'); +Irssi::settings_add_str($IRSSI{name}, 'scriptassist_script_sources', 'http://scripts.irssi.org/scripts.dmp');  Irssi::settings_add_bool($IRSSI{name}, 'scriptassist_cache_sources', 1);  Irssi::settings_add_bool($IRSSI{name}, 'scriptassist_update_verbose', 1);  Irssi::settings_add_bool($IRSSI{name}, 'scriptassist_check_verbose', 1); diff --git a/scripts/wlstat.pl b/scripts/wlstat.pl deleted file mode 100644 index 1bac546..0000000 --- a/scripts/wlstat.pl +++ /dev/null @@ -1,669 +0,0 @@ -use strict; # use warnings; - -# FIXME COULD SOMEONE PLEASE TELL ME HOW TO SHUT UP -# -# ... -# Variable "*" will not stay shared at (eval *) line *. -# Variable "*" will not stay shared at (eval *) line *. -# ... -# Can't locate package Irssi::Nick for @Irssi::Irc::Nick::ISA at (eval *) line *. -# ... -# -# THANKS - -use Irssi (); # which is the minimum required version of Irssi ? -use Irssi::TextUI; - -use vars qw($VERSION %IRSSI); - -$VERSION = '0.5'; -%IRSSI = ( -    authors     => 'BC-bd, Veli, Timo \'cras\' Sirainen, Wouter Coekaerts, Nei', -    contact     => 'bd@bc-bd.org, veli@piipiip.net, tss@iki.fi, wouter@coekaerts.be, Nei@QuakeNet', -    name        => 'wlstat', -    description => 'Adds a window list in the status area. Based on chanact.pl by above authors.', -    license     => 'GNU GPLv2 or later', -); - -# adapted by Nei - -############### -# original comment -# ########### -# # Adds new powerful and customizable [Act: ...] item (chanelnames,modes,alias). -# # Lets you give alias characters to windows so that you can select those with -# # meta-<char>. -# # -# # for irssi 0.8.2 by bd@bc-bd.org -# # -# # inspired by chanlist.pl by 'cumol@hammerhart.de' -# # -# ######### -# # Contributors -# ######### -# # -# # veli@piipiip.net   /window_alias code -# # qrczak@knm.org.pl  chanact_abbreviate_names -# # qerub@home.se      Extra chanact_show_mode and chanact_chop_status -# # -# -# FURTHER THANKS TO -# ############ -# # buu, fxn, Somni, Khisanth, integral, tybalt89   for much support in any aspect perl -# # and the channel in general ( #perl @ freenode ) and especially the ir_* functions -# # -# # Valentin 'senneth' Batz ( vb@g-23.org ) for the pointer to grep.pl, continuous support -# #                                         and help in digging up ir_strip_codes -# # -# # OnetrixNET technology networks for the debian environment -# # -# # Monkey-Pirate.com / Spaceman Spiff for the webspace -# # -# - -###### -# M A I N    P R O B L E M -##### -# -# It is impossible to place the wlstat on a statusbar together with other items, because I -# do not know how to calculate the size that it is going to get granted, and therefore I -# cannot do the linebreaks properly. -# This is what is missing to make a nice script out of wlstat. -# If you have any ideas, please contact me ASAP :). -# -###### - -###### -# UTF-8 PROBLEM -##### -# -# Please help me find a solution to this: -# this be your statusbar, it is using up the maximum term size -# [[1=1]#abc [2=2]#defghi] -#  -# now consider this example: "ascii" characters are marked with ., utf-8 characters with * -# [[1=1]#... [2=2]#...***] -# -# you should think that this is how it would be displayed? WRONG! -# [[1=1]#... [2=2]#...***   ] -# -# this is what Irssi does.. I believe my length calculating code to be correct, however, I'd -# love to be proven wrong (or receive any other fix, too, of course!) -# -###### - -######### -# USAGE -### -# -# copy the script to ~/.irssi/scripts/ -# -# In irssi: -# -#		/script load wlstat -# -# -# Hint: to get rid of the old [Act:] display -#     /statusbar window remove act -# -# to get it back: -#     /statusbar window add -after lag -priority 10 act -# -########## -# OPTIONS -######## -# -# /set wlstat_display_nokey <string> -# /set wlstat_display_key <string> -#		* string : Format String for one window. The following $'s are expanded: -#		    $C : Name -#		    $N : Number of the Window -#		    $Q : meta-Keymap -#		    $H : Start highlighting -#		    $S : Stop highlighting -#     IMPORTANT: don't forget to use $S if you used $H before! -# -# /set wlstat_separator <string> -#     * string : Charater to use between the channel entries -#     you'll need to escape " " space and "$" like this: -#     "/set wlstat_separator \ " -#     "/set wlstat_separator \$" -#     and {}% like this: -#     "/set wlstat_separator %{" -#     "/set wlstat_separator %}" -#     "/set wlstat_separator %%" -#     (reason being, that the separator is used inside a {format }) -# -# /set wlstat_hide_data <num> -#     * num : hide the window if its data_level is below num -#     set it to 0 to basically disable this feature, -#               1 if you don't want windows without activity to be shown -#               2 to show only those windows with channel text or hilight -#               3 to show only windows with hilight -# -# /set wlstat_maxlines <num> -#     * num : number of lines to use for the window list (0 to disable) -# -# /set wlstat_sort <-data_level|-last_line|refnum> -#     * you can change the window sort order with this variable -#         -data_level : sort windows with hilight first -#         -last_line  : sort windows in order of activity -#         refnum      : sort windows by window number -# -# /set wlstat_placement <top|bottom> -# /set wlstat_position <num> -#     * these settings correspond to /statusbar because wlstat will create -#       statusbars for you -#     (see /help statusbar to learn more) -# -# /set wlstat_all_disable <ON|OFF> -#     * if you set wlstat_all_disable to ON, wlstat will also remove the -#       last statusbar it created if it is empty. -#       As you might guess, this only makes sense with wlstat_hide_data > 0 ;) -# -### -# WISHES -#### -# -# if you fiddle with my mess, provide me with your fixes so I can benefit as well -# -# Nei =^.^= ( QuakeNet accountname: ailin ) -# - -my $actString = [];   # statusbar texts -my $currentLines = 0; -my $resetNeeded;      # layout/screen has changed, redo everything -my $needRemake;       # "normal" changes -#my $callcount = 0; -my $globTime = undef; # timer to limit remake() calls - -my %statusbars;       # currently active statusbars - -# maybe I should just tie the array ? -sub add_statusbar { -	for (@_) { -		# add subs -		for my $l ($_) { eval { -			no strict 'refs'; # :P -			*{"wlstat$l"} = sub { wlstat($l, @_) }; -		}; } -		Irssi::command("statusbar wl$_ reset"); -		Irssi::command("statusbar wl$_ enable"); -		if (lc Irssi::settings_get_str('wlstat_placement') eq 'top') { -			Irssi::command("statusbar wl$_ placement top"); -		} -		if ((my $x = int Irssi::settings_get_int('wlstat_position')) != 0) { -			Irssi::command("statusbar wl$_ position $x"); -		} -		Irssi::command("statusbar wl$_ add -priority 100 -alignment left barstar"); -		Irssi::command("statusbar wl$_ add wlstat$_"); -		Irssi::command("statusbar wl$_ add -priority 100 -alignment right barend"); -		Irssi::command("statusbar wl$_ disable"); -		Irssi::statusbar_item_register("wlstat$_", '$0', "wlstat$_"); -		$statusbars{$_} = {}; -	} -} - -sub remove_statusbar { -	for (@_) { -		Irssi::command("statusbar wl$_ reset"); -		Irssi::statusbar_item_unregister("wlstat$_"); # XXX does this actually work ? -		# DO NOT REMOVE the sub before you have unregistered it :)) -		for my $l ($_) { eval { -			no strict 'refs'; -			undef &{"wlstat$l"}; -		}; } -		delete $statusbars{$_}; -	} -} - -sub syncLines { -	my $temp = $currentLines; -	$currentLines = @$actString; -	#Irssi::print("current lines: $temp new lines: $currentLines"); -	my $currMaxLines = Irssi::settings_get_int('wlstat_maxlines'); -	if ($currMaxLines > 0 and @$actString > $currMaxLines) { -		$currentLines = $currMaxLines; -	} -	return if ($temp == $currentLines); -	if ($currentLines > $temp) { -		for ($temp .. ($currentLines - 1)) { -			add_statusbar($_); -			Irssi::command("statusbar wl$_ enable"); -		} -	} -	else { -		for ($_ = ($temp - 1); $_ >= $currentLines; $_--) { -			Irssi::command("statusbar wl$_ disable"); -			remove_statusbar($_); -		} -	} -} - -my %keymap; - -sub get_keymap { -	my ($textDest, undef, $cont_stripped) = @_; -	if ($textDest->{'level'} == 524288 and $textDest->{'target'} eq '' and !defined($textDest->{'server'})) { -		if ($cont_stripped =~ m/meta-(.)\s+change_window (\d+)/) { $keymap{$2} = "$1"; } -		Irssi::signal_stop(); -	} -} - -sub update_keymap { -	%keymap = (); -	Irssi::signal_remove('command bind' => 'watch_keymap'); -	Irssi::signal_add_first('print text' => 'get_keymap'); -	Irssi::command('bind'); # stolen from grep -	Irssi::signal_remove('print text' => 'get_keymap'); -	Irssi::signal_add('command bind' => 'watch_keymap'); -	Irssi::timeout_add_once(100, 'eventChanged', undef); -} - -# watch keymap changes -sub watch_keymap { -	Irssi::timeout_add_once(1000, 'update_keymap', undef); -} - -update_keymap(); - -sub expand { -	my ($string, %format) = @_; -	my ($exp, $repl); -	$string =~ s/\$$exp/$repl/g while (($exp, $repl) = each(%format)); -	return $string; -} - -# FIXME implement $get_size_only check, and user $item->{min|max-size} ?? -sub wlstat { -	my ($line, $item, $get_size_only) = @_; - -	if ($needRemake) { -		$needRemake = undef; -		remake(); -	} - -	my $text = $actString->[$line];  # DO NOT set the actual $actString->[$line] to '' here or -	$text = '' unless defined $text; # you'll screw up the statusbar counter ($currentLines) -	$item->default_handler($get_size_only, $text, '', 1); -} - -my %strip_table = ( -	# fe-common::core::formats.c:format_expand_styles -	#      delete                format_backs  format_fores bold_fores   other stuff -	(map { $_ => '' } (split //, '04261537' .  'kbgcrmyw' . 'KBGCRMYW' . 'U9_8:|FnN>#[')), -	#      escape -	(map { $_ => $_ } (split //, '{}%')), -); -sub ir_strip_codes { # strip %codes -	my $o = shift; -	$o =~ s/(%(.))/exists $strip_table{$2} ? $strip_table{$2} : $1/gex; -	$o -} - -sub ir_parse_special { -	my $o; my $i = shift; -	my $win = Irssi::active_win(); -	my $server = Irssi::active_server(); -	if (ref $win and ref $win->{'active'}) { -		$o = $win->{'active'}->parse_special($i); -	} -	elsif (ref $win and ref $win->{'active_server'}) { -		$o = $win->{'active_server'}->parse_special($i); -	} -	elsif (ref $server) { -		$o =  $server->parse_special($i); -	} -	else { -		$o = Irssi::parse_special($i); -	} -	$o -} - -sub sb_expand { # expand {format }s (and apply parse_special for $vars) -	ir_parse_special( -		Irssi::current_theme->format_expand( -			shift, -			( -				Irssi::EXPAND_FLAG_IGNORE_REPLACES -					| -				Irssi::EXPAND_FLAG_IGNORE_EMPTY -			) -		) -	) -} -sub sb_strip { -	ir_strip_codes( -		sb_expand(shift) -	); # does this get us the actual length of that s*ty bar :P ? -} -sub sb_length { -	# unicode cludge, d*mn broken Irssi -	# screw it, this will fail from broken joining anyway (and cause warnings) -	if (lc Irssi::settings_get_str('term_type') eq 'utf-8') { -		my $temp = sb_strip(shift); -		# try to switch on utf8 -		eval { -			no warnings; -			require Encode; -			#$temp = Encode::decode_utf8($temp); # thanks for the hint, but I have my reasons for _utf8_on -			Encode::_utf8_on($temp); -		}; -		length($temp) -	} -	else { -		length(sb_strip(shift)) -	} -} - -# !!! G*DD*MN Irssi is adding an additional layer of backslashitis per { } layer -# !!! AND I still don't know what I need to escape. -# !!! and NOONE else seems to know or care either. -# !!! f*ck open source. I mean it. -# XXX any Irssi::print debug statement leads to SEGFAULT - why ? - -# major parts of the idea by buu (#perl @ freenode) -# thanks to fxn and Somni for debugging -#	while ($_[0] =~ /(.)/g) { -#		my $c = $1; # XXX sooo... goto kills $1 -#		if ($q eq '%') { goto ESC; } - -## <freenode:#perl:tybalt89> s/%(.)|(\{)|(\})|(\\|\$)/$1?$1:$2?($level++,$2):$3?($level>$min_level&&$level--,$3):'\\'x(2**$level-1).$4/ge;  # untested... -sub ir_escape { -	my $min_level = $_[1] || 0; my $level = $min_level; -	my $o = shift; -	$o =~ s/ -		(	%.	)	| # $1 -		(	\{	)	| # $2 -		(	\}	)	| # $3 -		(	\\	)	| # $4 -		(	\$(?=.)	)	| # $5 -		(	\$	) # $6 -	/ -		if ($1) { $1 } # %. escape -		elsif ($2) { $level++; $2 } # { nesting start -		elsif ($3) { if ($level > $min_level) { $level--; } $3 } # } nesting end -		elsif ($4) { '\\'x(2**$level) } # \ needs \\escaping -		elsif ($5) { '\\'x(2**$level-1) . '$' . '\\'x(2**$level-1) } # and $ needs even more because of "parse_special" -		else { '\\'x(2**$level-1) . '$' } # $ needs \$ escaping -	/gex; -	$o -} -#sub ir_escape { -#	my $min_level = $_[1] || 0; my $level = $min_level; -#	my $o = shift; -#	$o =~ s/ -#		(	%.	)	| # $1 -#		(	\{	)	| # $2 -#		(	\}	)	| # $3 -#		(	\\	|	\$	)	# $4 -#	/ -#		if ($1) { $1 } # %. escape -#		elsif ($2) { $level++; $2 } # { nesting start -#		elsif ($3) { if ($level > $min_level) { $level--; } $3 } # } nesting end -#		else { '\\'x(2**($level-1)-1) . $4 } # \ or $ needs \\escaping -#	/gex; -#	$o -#} - -sub ir_fe { # try to fix format stuff -	my $x = shift; -	# XXX why do I have to use two/four % here instead of one/two ?? answer: you screwed up in ir_escape -	$x =~ s/([%{}])/%$1/g; -	$x =~ s/(\\|\$)/\\$1/g; -	#$x =~ s/(\$(?=.))|(\$)/$1?"\\\$\\":"\\\$"/ge; # I think this should be here (logic), but it doesn't work that way :P -	#$x =~ s/\\/\\\\/g; # that's right, escape escapes -	$x -} - -sub remake () { -	#$callcount++; -	#my $xx = $callcount; Irssi::print("starting remake [ $xx ]"); -	my ($hilight, $number, $display); -	my $separator = '{sb_act_sep ' . Irssi::settings_get_str('wlstat_separator') . '}'; -	my $custSort = Irssi::settings_get_str('wlstat_sort'); -	my $custSortDir = 1; -	if ($custSort =~ /^[-!](.*)/) { -		$custSortDir = -1; -		$custSort = $1; -	} - -	$actString = []; -	my ($line, $width) = (0, [Irssi::windows]->[0]{'width'} - sb_length('{sb x}')); -	foreach my $win ( -		sort { -			( -				( (int($a->{$custSort}) <=> int($b->{$custSort})) * $custSortDir ) -					|| -				($a->{'refnum'} <=> $b->{'refnum'}) -			) -		} Irssi::windows -	) { -		$actString->[$line] = '' unless defined $actString->[$line] or Irssi::settings_get_bool('wlstat_all_disable'); - -		# all stolen from chanact, what does this code do and why do we need it ? -		!ref($win) && next; - -		my $name = $win->get_active_name; -		my $active = $win->{'active'}; -		my $colour = $win->{'hilight_color'}; -		if (!defined $colour) { $colour = ''; } - -		if ($win->{'data_level'} < Irssi::settings_get_int('wlstat_hide_data')) { next; } # for Geert -		if    ($win->{'data_level'} == 0) { $hilight = '{sb_act_none '; } -		elsif ($win->{'data_level'} == 1) { $hilight = '{sb_act_text '; } -		elsif ($win->{'data_level'} == 2) { $hilight = '{sb_act_msg '; } -		elsif ($colour             ne '') { $hilight = "{sb_act_hilight_color $colour "; } -		elsif ($win->{'data_level'} == 3) { $hilight = '{sb_act_hilight '; } -		else                              { $hilight = '{sb_act_special '; } - -		$number = $win->{'refnum'}; -		$display = (defined $keymap{$number} and $keymap{$number} ne '') -				? -			( -				Irssi::settings_get_str('wlstat_display_key') -					|| -				Irssi::settings_get_str('wlstat_display_nokey') -			) -				: -			Irssi::settings_get_str('wlstat_display_nokey') -		; - -		my $add = expand($display, -			C => ir_fe($name), -			N => $number, -			Q => ir_fe($keymap{$number}), -			H => $hilight, -			S => '}{sb_background}' -		); -		#$temp =~ s/\{\S+?(?:\s(.*?))?\}/$1/g; -		#$temp =~ s/\\\\\\\\/\\/g; # XXX I'm actually guessing here, someone point me to docs please -		$actString->[$line] = '' unless defined $actString->[$line]; - -		# XXX how can I check whether the content still fits in the bar? this would allow -		# XXX wlstatus to reside on a statusbar together with other items... -		if (sb_length(ir_escape($actString->[$line] . $add)) >= $width) { # XXX doesn't correctly handle utf-8 multibyte ... help !!? -			$actString->[$line] .= ' ' x ($width - sb_length(ir_escape($actString->[$line]))); -			$line++; -		} -		$actString->[$line] .= $add . $separator; -		# XXX if I use these prints, output layout gets screwed up... why ? -		#Irssi::print("line $line: ".$actString->[$line]); -		#Irssi::print("temp $line: ".$temp); -	} - -	# XXX the Irssi::print statements lead to the MOST WEIRD results -	# e.g.: the loop gets executed TWICE for p > 0 ?!? -	for (my $p = 0; $p < @$actString; $p++) { # wrap each line in {sb }, escape it properly, etc. -		my $x = $actString->[$p]; -		$x =~ s/\Q$separator\E([ ]*)$/$1/; -		#Irssi::print("[$p]".'current:'.join'.',split//,sb_strip(ir_escape($x,0))); -		#Irssi::print("assumed length before:".sb_length(ir_escape($x,0))); -		$x = "{sb $x}"; -		#Irssi::print("[$p]".'new:'.join'.',split//,sb_expand(ir_escape($x,0))); -		#Irssi::print("[$p]".'new:'.join'.',split//,ir_escape($x,0)); -		#Irssi::print("assumed length after:".sb_length(ir_escape($x,0))); -		$x = ir_escape($x); -		#Irssi::print("[$p]".'REALnew:'.join'.',split//,sb_strip($x)); -		$actString->[$p] = $x; -		# XXX any Irssi::print debug statement leads to SEGFAULT (sometimes) - why ? -	} -	#Irssi::print("remake [ $xx ] finished"); -} - -sub wlstatHasChanged () { -	$globTime = undef; -	my $temp = Irssi::settings_get_str('wlstat_placement').Irssi::settings_get_int('wlstat_position'); -	if ($temp ne $resetNeeded) { wlreset(); return; } -	#Irssi::print("wlstat has changed, calls to remake so far: $callcount"); -	$needRemake = 1; - -	#remake(); -	if ( -		($needRemake and Irssi::settings_get_bool('wlstat_all_disable')) -			or -		(!Irssi::settings_get_bool('wlstat_all_disable') and $currentLines < 1) -	) { -		$needRemake = undef; -		remake(); -	} -	# XXX Irssi crashes if I try to do this without timer, why ? What's the minimum delay I need to use in the timer ? -	Irssi::timeout_add_once(100, 'syncLines', undef); - -	for (keys %statusbars) { -		Irssi::statusbar_items_redraw("wlstat$_"); -	} -} - -sub eventChanged () { # Implement a change queue/blocker -.-) -	if (defined $globTime) { -		Irssi::timeout_remove($globTime); -	} # delay the update further -	$globTime = Irssi::timeout_add_once(10, 'wlstatHasChanged', undef); -} - -#$needRemake = 1; -sub resizeTerm () { -	Irssi::timeout_add_once(100, 'eventChanged', undef); -} - -Irssi::settings_add_str('wlstat', 'wlstat_display_nokey', '[$N]$H$C$S'); -Irssi::settings_add_str('wlstat', 'wlstat_display_key', '[$Q=$N]$H$C$S'); -Irssi::settings_add_str('wlstat', 'wlstat_separator', "\\ "); -Irssi::settings_add_int('wlstat', 'wlstat_hide_data', 0); -Irssi::settings_add_int('wlstat', 'wlstat_maxlines', 9); -Irssi::settings_add_str('wlstat', 'wlstat_sort', 'refnum'); -Irssi::settings_add_str('wlstat', 'wlstat_placement', 'bottom'); -Irssi::settings_add_int('wlstat', 'wlstat_position', 0); -Irssi::settings_add_bool('wlstat', 'wlstat_all_disable', 0); - -# remove old statusbars -my %killBar; -sub get_old_status { -	my ($textDest, $cont, $cont_stripped) = @_; -	if ($textDest->{'level'} == 524288 and $textDest->{'target'} eq '' and !defined($textDest->{'server'})) { -		if ($cont_stripped =~ m/^wl(\d+)\s/) { $killBar{$1} = {}; } -		Irssi::signal_stop(); -	} -} -sub killOldStatus { -	%killBar = (); -	Irssi::signal_add_first('print text' => 'get_old_status'); -	Irssi::command('statusbar'); -	Irssi::signal_remove('print text' => 'get_old_status'); -	remove_statusbar(keys %killBar); -} -#killOldStatus(); - -sub wlreset { -	$actString = []; -	$currentLines = 0; # 1; # mhmmmm .. we actually enable one line down there so let's try this. -	$resetNeeded = Irssi::settings_get_str('wlstat_placement').Irssi::settings_get_int('wlstat_position'); -	#update_keymap(); -	killOldStatus(); -	# Register statusbar -	#add_statusbar(0); -	#Irssi::command('statusbar wl0 enable'); -	resizeTerm(); -} - -wlreset(); - -my $Unload; -sub unload ($$$) { -	$Unload = 1; -	Irssi::timeout_add_once(10, sub { $Unload = undef; }, undef); # pretend we didn't do anything ASAP -} -Irssi::signal_add_first('gui exit' => sub { $Unload = undef; }); # last try to catch a sigsegv -sub UNLOAD { -	if ($Unload) { # this might well crash Irssi... try /eval /script unload someotherscript ; /quit (= SEGFAULT !) -		$actString = ['']; # syncLines(); # XXX Irssi crashes when trying to disable all statusbars ? -		killOldStatus(); -	} -} - -sub addPrintTextHook { # update on print text -	return if $_[0]->{'level'} == 262144 and $_[0]->{'target'} eq '' and !defined($_[0]->{'server'}); -	if (Irssi::settings_get_str('wlstat_sort') =~ /^[-!]?last_line$/) { -		Irssi::timeout_add_once(100, 'eventChanged', undef); -	} -} - -#sub _x { my ($x, $y) = @_; ($x, sub { Irssi::print('-->signal '.$x); eval "$y();"; }) } -#sub _x { @_ } -Irssi::signal_add_first( -	'command script unload' => 'unload' -); -Irssi::signal_add_last({ -	'setup changed' => 'eventChanged', -	'print text' => 'addPrintTextHook', -	'terminal resized' => 'resizeTerm', -	'setup reread' => 'wlreset', -	'window hilight' => 'eventChanged', -}); -Irssi::signal_add({ -	'window created' => 'eventChanged', -	'window destroyed' => 'eventChanged', -	'window name changed' => 'eventChanged', -	'window refnum changed' => 'eventChanged', -	'window changed' => 'eventChanged', -	'window changed automatic' => 'eventChanged', -}); - -#Irssi::signal_add('nick mode changed', 'chanactHasChanged'); # relicts - -############### -### -# -# Changelog -# -# 0.5a -# - add setting to also hide the last statusbar if empty (wlstat_all_disable) -# - reverted to old utf8 code to also calculate broken utf8 length correctly -# - simplified dealing with statusbars in wlreset -#  -# 0.4d -# - fixed order of disabling statusbars -# - several attempts at special chars, without any real success -#   and much more weird new bugs caused by this -# - setting to specify sort order -# - reduced timeout values -# - added wlstat_hide_data for Geert Hauwaerts ( geert@irssi.org ) :) -# - make it so the dynamic sub is actually deleted -# - fix a bug with removing of the last separator -# - take into consideration parse_special -#  -# 0.3b -# - automatically kill old statusbars -# - reset on /reload -# - position/placement settings -# -# 0.2 -# - automated retrieval of key bindings (thanks grep.pl authors) -# - improved removing of statusbars -# - got rid of status chop -# -# 0.1 -# - rewritten to suit my needs -# - based on chanact 0.5.5 - | 
