diff options
Diffstat (limited to 'scripts/rotator.pl')
-rw-r--r-- | scripts/rotator.pl | 138 |
1 files changed, 138 insertions, 0 deletions
diff --git a/scripts/rotator.pl b/scripts/rotator.pl new file mode 100644 index 0000000..905293c --- /dev/null +++ b/scripts/rotator.pl @@ -0,0 +1,138 @@ +use Irssi; +use Irssi::TextUI; +use strict; + +use vars qw($VERSION %IRSSI); + +$VERSION="0.2.1"; +%IRSSI = ( + authors=> 'BC-bd', + contact=> 'bd@bc-bd.org', + name=> 'rotator', + description=> 'Displaye a small, changeing statusbar item to show irssi is still running', + sbitems=> 'rotator', + license=> 'GPL v2', + url=> 'https://bc-bd.org/svn/repos/irssi/trunk/', +); + +# rotator Displaye a small, changeing statusbar item to show irssi is still running +# for irssi 0.8.4 by bd@bc-bd.org +# +######### +# USAGE +### +# +# To use this script type f.e.: +# +# /statusbar window add -after more -alignment right rotator +# +# For more info on statusbars read the docs for /statusbar +# +######### +# OPTIONS +######### +# +# /set rotator_seperator <char> +# The character that is used to split the string in elements. +# +# /set rotator_chars <string> +# The string to display. Examples are: +# +# /set rotator_chars . o 0 O +# /set rotator_chars _ ¯ +# /set rotator_chars %r %Y- %g- +# +# /set rotator_speed <int> +# The number of milliseconds to display every char. +# 1 second = 1000 milliseconds. +# +# /set rotator_bounce <ON|OFF> +# * ON : reverse direction at the end of rotator_chars +# * OFF : start from the beginning +# +### +################ +### +# Changelog +# +# Version 0.2.1 +# - checking rotator_speed to be > 10 +# +# Version 0.2 +# - added rotator_bounce +# - added rotator_seperator +# - added support for elements longer than one char +# - fixed displaying of special chars (thx to peder for pointing this one out) +# +# Version 0.1 +# - initial release +# +### +################ + +my ($pos,$char,$timeout,$boundary,$direction); + +$char = ''; + +sub rotatorTimeout { + my @rot = split(Irssi::settings_get_str('rotator_seperator'), Irssi::settings_get_str('rotator_chars')); + my $len = scalar @rot; + + $char = quotemeta($rot[$pos]); + + if ($pos == $boundary) { + if (Irssi::settings_get_bool('rotator_bounce')) { + if ($direction < 0) { + $boundary = $len -1; + } else { + $boundary = 0; + } + $direction *= -1; + } else { + $pos = -1; + } + } + + $pos += $direction; + + Irssi::statusbar_items_redraw('rotator'); +} + +sub rotatorStatusbar() { + my ($item, $get_size_only) = @_; + + $item->default_handler($get_size_only, "{sb ".$char."}", undef, 1); +} + +sub rotatorSetup() { + my $time = Irssi::settings_get_int('rotator_speed'); + + Irssi::timeout_remove($timeout); + + $boundary = scalar split(Irssi::settings_get_str('rotator_seperator'), Irssi::settings_get_str('rotator_chars')) -1; + $direction = +1; + $pos = 0; + + if ($time < 10) { + Irssi::print("rotator: rotator_speed must be > 10"); + } else { + $timeout = Irssi::timeout_add($time, 'rotatorTimeout' , undef); + } +} + +Irssi::signal_add('setup changed', 'rotatorSetup'); + +Irssi::statusbar_item_register('rotator', '$0', 'rotatorStatusbar'); + +Irssi::settings_add_str('misc', 'rotator_chars', '. o 0 O 0 o'); +Irssi::settings_add_str('misc', 'rotator_seperator', ' '); +Irssi::settings_add_int('misc', 'rotator_speed', 2000); +Irssi::settings_add_bool('misc', 'rotator_bounce', 1); + +if (Irssi::settings_get_int('rotator_speed') < 10) { + Irssi::print("rotator: rotator_speed must be > 10"); +} else { + $timeout = Irssi::timeout_add(Irssi::settings_get_int('rotator_speed'), 'rotatorTimeout' , undef); +} + +rotatorSetup(); |