/var/www/www.irssi.org-old/scripts/html/rotator.pl


   1 use Irssi;
   2 use Irssi::TextUI;
   3 use strict;
   4 
   5 use vars qw($VERSION %IRSSI);
   6 
   7 $VERSION="0.2.1";
   8 %IRSSI = (
   9 	authors=> 'BC-bd',
  10 	contact=> 'bd@bc-bd.org',
  11 	name=> 'rotator',
  12 	description=> 'Displaye a small, changeing statusbar item to show irssi is still running',
  13 	license=> 'GPL v2',
  14 	url=> 'https://bc-bd.org/svn/repos/irssi/trunk/',
  15 );
  16 
  17 # rotator Displaye a small, changeing statusbar item to show irssi is still running
  18 # for irssi 0.8.4 by bd@bc-bd.org
  19 #
  20 #########
  21 # USAGE
  22 ###
  23 # 
  24 # To use this script type f.e.:
  25 #
  26 #		/statusbar window add -after more -alignment right rotator
  27 #
  28 # For more info on statusbars read the docs for /statusbar
  29 #
  30 #########
  31 # OPTIONS
  32 #########
  33 #
  34 # /set rotator_seperator <char>
  35 # 	The character that is used to split the string in elements.
  36 #
  37 # /set rotator_chars <string>
  38 # 	The string to display. Examples are:
  39 #
  40 # 		/set rotator_chars . o 0 O
  41 # 		/set rotator_chars _ ­ ¯
  42 # 		/set rotator_chars %r­ %Y- %g-
  43 #
  44 # /set rotator_speed <int>
  45 # 	The number of milliseconds to display every char.
  46 # 	1 second = 1000 milliseconds.
  47 #
  48 # /set rotator_bounce <ON|OFF>
  49 #		* ON  : reverse direction at the end of rotator_chars
  50 #		* OFF : start from the beginning
  51 #
  52 ###
  53 ################
  54 ###
  55 # Changelog
  56 #
  57 # Version 0.2.1
  58 #  - checking rotator_speed to be > 10
  59 #
  60 # Version 0.2
  61 #  - added rotator_bounce
  62 #  - added rotator_seperator
  63 #  - added support for elements longer than one char
  64 #  - fixed displaying of special chars (thx to peder for pointing this one out)
  65 #
  66 # Version 0.1
  67 #  - initial release
  68 #
  69 ###
  70 ################
  71 
  72 my ($pos,$char,$timeout,$boundary,$direction);
  73 
  74 $char = '';
  75 
  76 sub rotatorTimeout {
  77 	my @rot = split(Irssi::settings_get_str('rotator_seperator'), Irssi::settings_get_str('rotator_chars'));
  78 	my $len = scalar @rot;
  79 
  80 	$char = quotemeta($rot[$pos]);
  81 
  82 	if ($pos == $boundary) {
  83 		if (Irssi::settings_get_bool('rotator_bounce')) {
  84 			if ($direction < 0) {
  85 				$boundary = $len -1;
  86 			} else {
  87 				$boundary = 0;
  88 			}
  89 			$direction *= -1;
  90 		} else {
  91 			$pos = -1;
  92 		}
  93 	}
  94 
  95 	$pos += $direction;
  96 
  97 	Irssi::statusbar_items_redraw('rotator');
  98 }
  99 
 100 sub rotatorStatusbar() {
 101 	my ($item, $get_size_only) = @_;
 102 
 103 	$item->default_handler($get_size_only, "{sb ".$char."}", undef, 1);
 104 }
 105 
 106 sub rotatorSetup() {
 107 	my $time = Irssi::settings_get_int('rotator_speed');
 108 
 109 	Irssi::timeout_remove($timeout);
 110 
 111 	$boundary = scalar split(Irssi::settings_get_str('rotator_seperator'), Irssi::settings_get_str('rotator_chars')) -1;
 112 	$direction = +1;
 113 	$pos = 0;
 114 
 115 	if ($time < 10) {
 116 		Irssi::print("rotator: rotator_speed must be > 10");
 117 	} else {
 118 		$timeout = Irssi::timeout_add($time, 'rotatorTimeout' , undef);
 119 	}
 120 }
 121 
 122 Irssi::signal_add('setup changed', 'rotatorSetup');
 123 
 124 Irssi::statusbar_item_register('rotator', '$0', 'rotatorStatusbar');
 125 
 126 Irssi::settings_add_str('misc', 'rotator_chars', '. o 0 O 0 o');
 127 Irssi::settings_add_str('misc', 'rotator_seperator', ' ');
 128 Irssi::settings_add_int('misc', 'rotator_speed', 2000);
 129 Irssi::settings_add_bool('misc', 'rotator_bounce', 1);
 130 
 131 if (Irssi::settings_get_int('rotator_speed') < 10) {
 132 	Irssi::print("rotator: rotator_speed must be > 10");
 133 } else {
 134 	$timeout = Irssi::timeout_add(Irssi::settings_get_int('rotator_speed'), 'rotatorTimeout' , undef);
 135 }
 136 
 137 rotatorSetup();