summaryrefslogtreecommitdiffstats
path: root/scripts/rotator.pl
diff options
context:
space:
mode:
Diffstat (limited to 'scripts/rotator.pl')
-rw-r--r--scripts/rotator.pl138
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();