add pair of my draft scripts as well as some known ones
This commit is contained in:
142
autoaway.pl
Normal file
142
autoaway.pl
Normal file
@@ -0,0 +1,142 @@
|
||||
# /AUTOAWAY <n> - Mark user away after <n> seconds of inactivity
|
||||
# /AWAY - play nice with autoaway
|
||||
# New, brighter, whiter version of my autoaway script. Actually works :)
|
||||
# (c) 2000 Larry Daffner (vizzie@airmail.net)
|
||||
# You may freely use, modify and distribute this script, as long as
|
||||
# 1) you leave this notice intact
|
||||
# 2) you don't pretend my code is yours
|
||||
# 3) you don't pretend your code is mine
|
||||
#
|
||||
# share and enjoy!
|
||||
|
||||
# A simple script. /autoaway <n> will mark you as away automatically if
|
||||
# you have not typed any commands in <n> seconds. (<n>=0 disables the feature)
|
||||
# It will also automatically unmark you away the next time you type a command.
|
||||
# Note that using the /away command will disable the autoaway mechanism, as
|
||||
# well as the autoreturn. (when you unmark yourself, the autoaway wil
|
||||
# restart again)
|
||||
|
||||
# Thanks to Adam Monsen for multiserver and config file fix
|
||||
|
||||
use Irssi;
|
||||
use Irssi::Irc;
|
||||
|
||||
use vars qw($VERSION %IRSSI);
|
||||
$VERSION = "0.3";
|
||||
%IRSSI = (
|
||||
authors => 'Larry "Vizzie" Daffner',
|
||||
contact => 'vizzie@airmail.net',
|
||||
name => 'Automagic away setting',
|
||||
description => 'Automatically goes away after defined inactivity',
|
||||
license => 'BSD',
|
||||
url => 'http://www.flamingpackets.net/~vizzie/irssi/',
|
||||
changed => 'Tue Oct 19 14:41:15 CDT 2010',
|
||||
changes => 'Applied multiserver/store config patch from Adam Monsen'
|
||||
);
|
||||
|
||||
my ($autoaway_sec, $autoaway_to_tag, $autoaway_state);
|
||||
$autoaway_state = 0;
|
||||
|
||||
#
|
||||
# /AUTOAWAY - set the autoaway timeout
|
||||
#
|
||||
sub cmd_autoaway {
|
||||
my ($data, $server, $channel) = @_;
|
||||
|
||||
if (!($data =~ /^[0-9]+$/)) {
|
||||
Irssi::print("autoaway: usage: /autoaway <seconds>");
|
||||
return 1;
|
||||
}
|
||||
|
||||
$autoaway_sec = $data;
|
||||
|
||||
if ($autoaway_sec) {
|
||||
Irssi::settings_set_int("autoaway_timeout", $autoaway_sec);
|
||||
Irssi::print("autoaway timeout set to $autoaway_sec seconds");
|
||||
} else {
|
||||
Irssi::print("autoway disabled");
|
||||
}
|
||||
|
||||
if (defined($autoaway_to_tag)) {
|
||||
Irssi::timeout_remove($autoaway_to_tag);
|
||||
$autoaway_to_tag = undef;
|
||||
}
|
||||
|
||||
if ($autoaway_sec) {
|
||||
$autoaway_to_tag =
|
||||
Irssi::timeout_add($autoaway_sec*1000, "auto_timeout", "");
|
||||
}
|
||||
}
|
||||
|
||||
#
|
||||
# away = Set us away or back, within the autoaway system
|
||||
sub cmd_away {
|
||||
my ($data, $server, $channel) = @_;
|
||||
|
||||
if ($data eq "") {
|
||||
$autoaway_state = 0;
|
||||
# If $autoaway_state is 2, we went away by typing /away, and need
|
||||
# to restart autoaway ourselves. Otherwise, we were autoaway, and
|
||||
# we'll let the autoaway return take care of business.
|
||||
|
||||
if ($autoaway_state eq 2) {
|
||||
if ($autoaway_sec) {
|
||||
$autoaway_to_tag =
|
||||
Irssi::timeout_add($autoaway_sec*1000, "auto_timeout", "");
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if ($autoaway_state eq 0) {
|
||||
Irssi::timeout_remove($autoaway_to_tag);
|
||||
$autoaway_to_tag = undef;
|
||||
$autoaway_state = 2;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
sub auto_timeout {
|
||||
my ($data, $server) = @_;
|
||||
|
||||
# we're in the process.. don't touch anything.
|
||||
$autoaway_state = 3;
|
||||
foreach my $server (Irssi::servers()) {
|
||||
$server->command("/AWAY autoaway after $autoaway_sec seconds");
|
||||
}
|
||||
|
||||
Irssi::timeout_remove($autoaway_to_tag);
|
||||
$autoaway_state = 1;
|
||||
}
|
||||
|
||||
sub reset_timer {
|
||||
if ($autoaway_state eq 1) {
|
||||
$autoaway_state = 3;
|
||||
foreach my $server (Irssi::servers()) {
|
||||
$server->command("/AWAY");
|
||||
}
|
||||
|
||||
$autoaway_state = 0;
|
||||
}
|
||||
if ($autoaway_state eq 0) {
|
||||
if (defined($autoaway_to_tag)) {
|
||||
Irssi::timeout_remove($autoaway_to_tag);
|
||||
$autoaway_to_tag = undef();
|
||||
}
|
||||
if ($autoaway_sec) {
|
||||
$autoaway_to_tag = Irssi::timeout_add($autoaway_sec*1000
|
||||
, "auto_timeout", "");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Irssi::settings_add_int("misc", "autoaway_timeout", 0);
|
||||
|
||||
$autoaway_default = Irssi::settings_get_int("autoaway_timeout");
|
||||
if ($autoaway_default) {
|
||||
$autoaway_to_tag =
|
||||
Irssi::timeout_add($autoaway_default*1000, "auto_timeout", "");
|
||||
|
||||
}
|
||||
|
||||
Irssi::command_bind('autoaway', 'cmd_autoaway');
|
||||
Irssi::command_bind('away', 'cmd_away');
|
||||
Irssi::signal_add('send command', 'reset_timer');
|
||||
26
dispatch.pl
Normal file
26
dispatch.pl
Normal file
@@ -0,0 +1,26 @@
|
||||
use strict;
|
||||
use warnings;
|
||||
use Irssi;
|
||||
use Irssi::Irc;
|
||||
use vars qw($VERSION %IRSSI);
|
||||
|
||||
$VERSION = "0.0.2";
|
||||
%IRSSI = (
|
||||
authors => "Sebastian 'yath' Schmidt",
|
||||
contact => "yathen\@web.de",
|
||||
name => "Command dispatcher",
|
||||
description => "This scripts sends unknown commands to the server",
|
||||
license => "GNU GPLv2",
|
||||
changed => "Tue Mar 5 14:55:29 CET 2002",
|
||||
);
|
||||
|
||||
sub event_default_command {
|
||||
my ($command, $server) = @_;
|
||||
return if (Irssi::settings_get_bool("dispatch_unknown_commands") == 0
|
||||
|| !$server);
|
||||
$server->send_raw($command);
|
||||
Irssi::signal_stop();
|
||||
}
|
||||
|
||||
Irssi::settings_add_bool("misc", "dispatch_unknown_commands", 1);
|
||||
Irssi::signal_add_first("default command", "event_default_command");
|
||||
157
img_wget.pl
Normal file
157
img_wget.pl
Normal file
@@ -0,0 +1,157 @@
|
||||
#use strict;
|
||||
#use warnings "all";
|
||||
use threads;
|
||||
use threads::shared;
|
||||
use URI::URL;
|
||||
use Image::Magick;
|
||||
use Irssi qw (command_bind
|
||||
settings_get_bool settings_add_bool
|
||||
settings_get_str settings_add_str);
|
||||
use vars qw($VERSION %IRSSI);
|
||||
|
||||
sub info_cmd;
|
||||
sub notify_cmd;
|
||||
sub event_msg;
|
||||
|
||||
sub dlfunc(@);
|
||||
sub cdlfunc($); # thread, that checks and downloads stuff
|
||||
sub is_picture($);
|
||||
sub urlencode($);
|
||||
|
||||
|
||||
$VERSION = '1.00';
|
||||
%IRSSI = (
|
||||
authors => 'Eleksir',
|
||||
contact => 'eleksir@exs-elm.ru',
|
||||
name => 'Image downloader',
|
||||
description => 'Sample script to test irssi api.',
|
||||
license => 'Public Domain',
|
||||
changed => 'Sun Oct 02 12:21 CET 2016',
|
||||
);
|
||||
|
||||
my $wgetpath;
|
||||
|
||||
if (-f "/bin/wget") {
|
||||
$wgetpath = '/bin/wget';
|
||||
} elsif (-f "/usr/bin/wget") {
|
||||
$wgetpath = '/usr/bin/wget';
|
||||
} elsif (-f "/usr/local/bin/wget") {
|
||||
$wgetpath = '/usr/local/bin/wget';
|
||||
}
|
||||
|
||||
Irssi::signal_add_last("message public", "hookfn");
|
||||
|
||||
my $active = 0;
|
||||
share($active);
|
||||
my $hook;
|
||||
|
||||
sub hookfn {
|
||||
my ($a, $text, $b, $c) = @_;
|
||||
my @words = split(/\s+/, $text);
|
||||
|
||||
foreach (@words) {
|
||||
if ($_ =~ m{:?https?://([a-zA-Z0-9.-]+\.[a-zA-Z]+)/(?:.*)}) {
|
||||
$active = 1;
|
||||
my $t = undef;
|
||||
|
||||
do {
|
||||
$t = threads->create('cdlfunc', $_);
|
||||
sleep 1 unless(defined($t));
|
||||
} unless (defined($t));
|
||||
|
||||
undef $t;
|
||||
|
||||
if ($active == 1) {
|
||||
$hook = Irssi::timeout_add(500, "timeraction", '');
|
||||
}
|
||||
# catch only first link
|
||||
last;
|
||||
}
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
sub cdlfunc($) {
|
||||
my $url = shift;
|
||||
my $extension = is_picture($url);
|
||||
|
||||
if (defined($extension)) {
|
||||
my $savepath = sprintf("%s/imgsave", $ENV{'HOME'});
|
||||
mkdir ($savepath) unless (-d $savepath);
|
||||
$savepath = $savepath . "/" . s/[^\w!., -#]/_/gr . ".$extension";
|
||||
|
||||
if ( (lc($url) =~ /\.(gif|jpeg|png|webm|mp4)$/) and ($1 eq $extension) ){
|
||||
$savepath = $ENV{'HOME'} . "/imgsave/" . s/[^\w!., -#]/_/gr;
|
||||
}
|
||||
|
||||
dlfunc($url, $savepath);
|
||||
}
|
||||
|
||||
$active = 0;
|
||||
return;
|
||||
}
|
||||
|
||||
sub dlfunc(@) {
|
||||
my $url = shift;
|
||||
my $file = shift;
|
||||
|
||||
$url = urlencode($url);
|
||||
system($wgetpath, '--no-check-certificate', '-q', '-T', '20', '-O', $file, '-o', '/dev/null', $url);
|
||||
|
||||
if ($file =~ /(png|jpe?g|gif)$/i){
|
||||
my $im = Image::Magick->new();
|
||||
my $rename = 1;
|
||||
my (undef, undef, undef, $format) = $im->Ping($file);
|
||||
|
||||
if (defined($format)) {
|
||||
$rename = 0 if (($format eq 'JPEG') and ($file =~ /jpe?g$/i));
|
||||
$rename = 0 if (($format eq 'GIF') and ($file =~ /gif$/i));
|
||||
$rename = 0 if (($format =~ /^PNG/) and ($file =~ /png$/i));
|
||||
rename $file, sprintf("%s.%s", $file, lc($format)) if ($rename == 1);
|
||||
}
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
sub is_picture($) {
|
||||
my $url = shift;
|
||||
$url = urlencode($url);
|
||||
my $r = undef;
|
||||
|
||||
$r = `$wgetpath --no-check-certificate -q --method=HEAD -S --timeout=5 "$url" 2>&1`;
|
||||
|
||||
foreach (split(/\n/, $r)) {
|
||||
next unless($_ =~ /Content\-Type: (.+)/);
|
||||
$r = ($1); chomp($r);
|
||||
last;
|
||||
}
|
||||
|
||||
if (defined($r)) {
|
||||
if ($r =~ /^image\/gif/) {return 'gif';};
|
||||
if ($r =~ /^image\/jpe?g/){return 'jpeg';};
|
||||
if ($r =~ /^image\/png/) {return 'png';};
|
||||
if ($r =~ /^video\/webm/) {return 'webm';};
|
||||
if ($r =~ /^video\/mp4/) {return 'mp4';};
|
||||
}
|
||||
|
||||
return undef;
|
||||
}
|
||||
|
||||
sub urlencode($) {
|
||||
my $url = shift;
|
||||
my $urlobj = url $url;
|
||||
$url = $urlobj->as_string;
|
||||
undef $urlobj;
|
||||
return $url;
|
||||
}
|
||||
|
||||
sub timeraction {
|
||||
if (($active == 0) and (defined($hook))) {
|
||||
Irssi::timeout_remove($hook);
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
93
info.pl
Normal file
93
info.pl
Normal file
@@ -0,0 +1,93 @@
|
||||
#use strict;
|
||||
#use warnings "all";
|
||||
use threads;
|
||||
use threads::shared;
|
||||
use URI::URL;
|
||||
use Image::Magick;
|
||||
use Irssi qw (command_bind
|
||||
settings_get_bool settings_add_bool
|
||||
settings_get_str settings_add_str);
|
||||
use vars qw($VERSION %IRSSI);
|
||||
|
||||
sub notify_cmd;
|
||||
sub notify;
|
||||
sub hookfn;
|
||||
sub timeraction;
|
||||
|
||||
$VERSION = '1.00';
|
||||
%IRSSI = (
|
||||
authors => 'Eleksir',
|
||||
contact => 'eleksir@exs-elm.ru',
|
||||
name => 'Test command script',
|
||||
description => 'Sample script to test irssi api.',
|
||||
license => 'Public Domain',
|
||||
changed => 'Sun Oct 02 12:21 CET 2016',
|
||||
);
|
||||
|
||||
Irssi::command_bind( 'test' => 'notify_cmd' );
|
||||
Irssi::signal_add_last("message public", "hookfn");
|
||||
Irssi::signal_add_last("message private", "hookfn");
|
||||
|
||||
my $active = 0;
|
||||
share($active);
|
||||
|
||||
my $hook;
|
||||
|
||||
sub notify_cmd {
|
||||
my ($argstring, $serverhref, $channelhref) = @_;
|
||||
sleep 300;
|
||||
my %SERVER = %{$serverhref};
|
||||
my %CHANNEL = %{$channelhref};
|
||||
foreach (keys(%SERVER)){
|
||||
Irssi::active_win()->print("SERVER $_ = $SERVER{$_}");
|
||||
}
|
||||
foreach (keys(%CHANNEL)){
|
||||
Irssi::active_win()->print("CHANNEL $_ = $CHANNEL{$_}");
|
||||
}
|
||||
Irssi::active_win()->print("$argstring");
|
||||
Irssi::active_win()->print("With limited HP you either die fast or live long enough to become suka blya");
|
||||
}
|
||||
|
||||
sub notify {
|
||||
my ($topic, $message) = @_;
|
||||
threads->detach();
|
||||
$topic =~ s/\\/\\\\/g;
|
||||
$topic =~ s/\'/\\'/g;
|
||||
$message =~ s/\\/\\\\/g;
|
||||
$message =~ s/\'/\\'/g;
|
||||
system("notify-send", "-u", "normal", "-t", "12000", "-a", "hexchat", $topic, "-i", "hexchat", $message);
|
||||
$active = 0;
|
||||
}
|
||||
|
||||
sub hookfn {
|
||||
my ($server, $message, $nick, $nick_address, $chan) = @_;
|
||||
|
||||
$active = 1;
|
||||
$message = Irssi::strip_codes($message);
|
||||
$nick = Irssi::strip_codes($nick);
|
||||
my $topic = sprintf("%s at %s says:\n", $nick, $chan);
|
||||
|
||||
#Irssi::active_win()->print(sprintf("%s at %s says: %s", $nick, $chan, $message));
|
||||
|
||||
my $t = undef;
|
||||
|
||||
do {
|
||||
$t = threads->create(\¬ify, $topic, $message);
|
||||
sleep 1 unless(defined($t));
|
||||
} unless (defined($t));
|
||||
|
||||
undef $t;
|
||||
|
||||
if ($active == 1) {
|
||||
$hook = Irssi::timeout_add(250, "timeraction", '');
|
||||
}
|
||||
}
|
||||
|
||||
sub timeraction {
|
||||
if (($active == 0) and (defined($hook))) {
|
||||
Irssi::timeout_remove($hook);
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
175
timer.pl
Normal file
175
timer.pl
Normal file
@@ -0,0 +1,175 @@
|
||||
# Fixes for multiple servers and window items by dg
|
||||
#
|
||||
# 2003-08-27 coekie:
|
||||
# - use item names and server tags, fixes irssi crash if window item or server is destroyed
|
||||
#
|
||||
# 2003-08-19
|
||||
# - changed timer stop code a bit.
|
||||
# should fix the random timer o.O never happened to me before.
|
||||
#
|
||||
# 2002-12-21 darix:
|
||||
# - nearly complete rewrite ;) the old version wasnt "use strict;" capable =)
|
||||
# - still some warnings with "use warnings;"
|
||||
# - use of command_runsub now :)
|
||||
#
|
||||
|
||||
use strict;
|
||||
use Data::Dumper;
|
||||
use warnings;
|
||||
use vars qw ($VERSION %IRSSI);
|
||||
use Irssi 20020325 qw (command_bind command_runsub command timeout_add timeout_remove signal_add_first);
|
||||
|
||||
$VERSION = '0.5';
|
||||
%IRSSI = (
|
||||
authors => 'Kimmo Lehto, Marcus Rueckert',
|
||||
contact => 'kimmo@a-men.org, darix@irssi.org' ,
|
||||
name => 'Timer',
|
||||
description => 'Provides /timer command for mIRC/BitchX type timer functionality.',
|
||||
license => 'Public Domain',
|
||||
changed => '2003-08-27'
|
||||
);
|
||||
|
||||
our %timers;
|
||||
# my %timer = { repeat => \d+, command => '' , windowitem => NULL , server=> NULL, timer = NULL};
|
||||
|
||||
sub timer_command {
|
||||
my ( $name ) = @_;
|
||||
if ( exists ( $timers{$name} ) ) {
|
||||
if ( $timers{$name}->{'repeat'} != -1 ) {
|
||||
if ( $timers{$name}->{'repeat'}-- == 0) {
|
||||
cmd_timerstop( $name );
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
my ($server, $item);
|
||||
if ($timers{$name}->{'server'}) {
|
||||
$server = Irssi::server_find_tag( $timers{$name}->{'server'} );
|
||||
}
|
||||
if ( $server ) {
|
||||
if ( $timers{$name}->{'windowitem'}) {
|
||||
$item = $server->window_find_item( $timers{$name}->{'windowitem'} );
|
||||
}
|
||||
($item ? $item : $server)->command( $timers{$name}->{'command'} );
|
||||
} else {
|
||||
command( $timers{$name}->{'command'} );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
sub cmd_timerstop {
|
||||
my ( $name ) = @_;
|
||||
|
||||
if ( exists ( $timers{$name} ) ) {
|
||||
timeout_remove($timers{$name}->{'timer'});
|
||||
$timers{$name} = ();
|
||||
delete ( $timers{$name} );
|
||||
print( CRAP "Timer \"$name\" stopped." );
|
||||
}
|
||||
else {
|
||||
print( CRAP "\cBTimer:\cB No such timer \"$name\"." );
|
||||
}
|
||||
}
|
||||
|
||||
sub cmd_timer_help {
|
||||
print ( <<EOF
|
||||
|
||||
TIMER LIST
|
||||
TIMER ADD <name> <internal in seconds> [<repeat>] <command>
|
||||
TIMER STOP <name>
|
||||
|
||||
repeat value of 0 means unlimited too
|
||||
|
||||
EOF
|
||||
);
|
||||
}
|
||||
|
||||
command_bind 'timer add' => sub {
|
||||
my ( $data, $server, $item ) = @_;
|
||||
my ( $name, $interval, $times, $command );
|
||||
|
||||
if ( $data =~ /^\s*(\w+)\s+(\d+)\s+(-?\d+)\s+(.*)$/ ) {
|
||||
( $name, $interval, $times, $command ) = ( $1, $2, $3, $4 );
|
||||
$times = -1 if ( $times == 0 );
|
||||
}
|
||||
elsif ( $data =~ /^\s*(\w+)\s+(\d+)\s+(.*)$/ )
|
||||
{
|
||||
( $name, $interval, $times, $command ) = ( $1, $2, -1, $3 );
|
||||
}
|
||||
else {
|
||||
print( CRAP "\cBTimer:\cB parameters not understood. commandline was: timer add $data");
|
||||
return;
|
||||
};
|
||||
|
||||
if ( $times < -1 ) {
|
||||
print( CRAP "\cBTimer:\cB repeat should be greater or equal to -1" );
|
||||
return;
|
||||
};
|
||||
|
||||
if ( $command eq "" ) {
|
||||
print( CRAP "\cBTimer:\cB command is empty commandline was: timer add $data" );
|
||||
return;
|
||||
};
|
||||
|
||||
if ( exists ( $timers{$name} ) ) {
|
||||
print( CRAP "\cBTimer:\cB Timer \"$name\" already active." );
|
||||
}
|
||||
else {
|
||||
#$timers{$name} = {};
|
||||
$timers{$name}->{'repeat'} = $times;
|
||||
$timers{$name}->{'interval'} = $interval;
|
||||
$timers{$name}->{'command'} = $command;
|
||||
if ($item) {
|
||||
$timers{$name}->{'windowitem'} = $item->{'name'};
|
||||
}
|
||||
if ($server) {
|
||||
$timers{$name}->{'server'} = $server->{'tag'};
|
||||
}
|
||||
|
||||
if ( $times == -1 ) {
|
||||
$times = 'until stopped.';
|
||||
}
|
||||
else {
|
||||
$times .= " times.";
|
||||
}
|
||||
|
||||
print( CRAP "Starting timer \"$name\" repeating \"$command\" every $interval seconds $times" );
|
||||
|
||||
$timers{$name}->{'timer'} = timeout_add( $interval * 1000, \&timer_command, $name );
|
||||
}
|
||||
};
|
||||
|
||||
command_bind 'timer list' => sub {
|
||||
print( CRAP "Active timers:" );
|
||||
foreach my $name ( keys %timers ) {
|
||||
if ( $timers{$name}->{repeat} == -1 ) {
|
||||
print( CRAP "$name = $timers{$name}->{'command'} (until stopped)");
|
||||
}
|
||||
else {
|
||||
print( CRAP "$name = $timers{$name}->{'command'} ($timers{$name}->{'repeat'} repeats left)" );
|
||||
}
|
||||
}
|
||||
print( CRAP "End of /timer list" );
|
||||
};
|
||||
|
||||
command_bind 'timer stop' => sub {
|
||||
my ( $data, $server, $item ) = @_;
|
||||
cmd_timerstop ($data);
|
||||
};
|
||||
|
||||
command_bind 'timer help' => sub { cmd_timer_help() };
|
||||
|
||||
command_bind 'timer' => sub {
|
||||
my ( $data, $server, $item ) = @_;
|
||||
$data =~ s/\s+$//g;
|
||||
command_runsub ( 'timer', $data, $server, $item ) ;
|
||||
};
|
||||
|
||||
|
||||
signal_add_first 'default command timer' => sub {
|
||||
#
|
||||
# gets triggered if called with unknown subcommand
|
||||
#
|
||||
cmd_timer_help()
|
||||
}
|
||||
|
||||
189
trackbar.pl
Normal file
189
trackbar.pl
Normal file
@@ -0,0 +1,189 @@
|
||||
# trackbar.pl
|
||||
#
|
||||
# This little script will do just one thing: it will draw a line each time you
|
||||
# switch away from a window. This way, you always know just upto where you've
|
||||
# been reading that window :) It also removes the previous drawn line, so you
|
||||
# don't see double lines.
|
||||
#
|
||||
# Usage:
|
||||
#
|
||||
# The script works right out of the box, but if you want you can change
|
||||
# the working by /set'ing the following variables:
|
||||
#
|
||||
# trackbar_string The characters to repeat to draw the bar
|
||||
# trackbar_style The style for the bar, %r is red for example
|
||||
# See formats.txt that came with irssi
|
||||
#
|
||||
# /mark is a command that will redraw the line at the bottom. However! This
|
||||
# requires irssi version after 20021228. otherwise you'll get the error
|
||||
# redraw: unknown command, and your screen is all goofed up :)
|
||||
#
|
||||
# /upgrade & buf.pl notice: This version tries to remove the trackbars before
|
||||
# the upgrade is done, so buf.pl does not restore them, as they are not removeable
|
||||
# afterwards by trackbar. Unfortiounatly, to make this work, trackbar and buf.pl
|
||||
# need to be loaded in a specific order. Please experiment to see which order works
|
||||
# for you (strangely, it differs from configuration to configuration, something I will
|
||||
# try to fix in a next version)
|
||||
#
|
||||
# Authors:
|
||||
# - Main maintainer & author: Peter 'kinlo' Leurs
|
||||
# - Many thanks to Timo 'cras' Sirainen for placing me on my way
|
||||
# - on-upgrade-remove-line patch by Uwe Dudenhoeffer
|
||||
#
|
||||
# Version history:
|
||||
# 1.4: - Changed our's by my's so the irssi script header is valid
|
||||
# - Removed utf-8 support. In theory, the script should work w/o any
|
||||
# problems for utf-8, just set trackbar_string to a valid utf-8 character
|
||||
# and everything *should* work. However, this script is being plagued by
|
||||
# irssi internal bugs. The function Irssi::settings_get_str does NOT handle
|
||||
# unicode strings properly, hence you will notice problems when setting the bar
|
||||
# to a unicode char. For changing your bar to utf-8 symbols, read the line sub.
|
||||
# 1.3: - Upgrade now removes the trackbars.
|
||||
# - Some code cleanups, other defaults
|
||||
# - /mark sets the line to the bottom
|
||||
# 1.2: - Support for utf-8
|
||||
# - How the bar looks can now be configured with trackbar_string
|
||||
# and trackbar_style
|
||||
# 1.1: - Fixed bug when closing window
|
||||
# 1.0: - Initial release
|
||||
#
|
||||
#
|
||||
# Call for help!
|
||||
#
|
||||
# There is a trackbar version 2.0 that properly handles resizes and immediate config change
|
||||
# activation. However, there is/are some bug(s) in irssi's main buffer/window code that causes
|
||||
# irssi to 'forget' lines, which is ofcourse completly unaccepteable. I haven't found the time
|
||||
# nor do I know the irssi's internals enough to find and fix this bug, if you want to help, please
|
||||
# contact me, I'll give you a copy of the 2.0 version that will immediatly show you the problems.
|
||||
#
|
||||
# Known bugs:
|
||||
# - if you /clear a window, it will be uncleared when returning to the window
|
||||
# - UTF-8 characters in the trackbar_string doesnt work. This is an irssi bug.
|
||||
# - if you resize your irssi (in xterm or so) the bar is not resized
|
||||
# - changing the trackbar style is only visible after returning to a window
|
||||
# however, changing style/resize takes in effect after you left the window.
|
||||
#
|
||||
# Whishlist/todo:
|
||||
# - instead of drawing a line, just invert timestamp or something,
|
||||
# to save a line (but I don't think this is possible with current irssi)
|
||||
# - some pageup keybinding possibility, to scroll up upto the trackbar
|
||||
# - <@coekie> kinlo: if i switch to another window, in another split window, i
|
||||
# want the trackbar to go down in the previouswindow in that splitwindow :)
|
||||
# - < bob_2> anyway to clear the line once the window is read?
|
||||
# - < elho> kinlo: wishlist item: a string that gets prepended to the repeating pattern
|
||||
# - < elho> an option to still have the timestamp in front of the bar
|
||||
# - < elho> oh and an option to not draw it in the status window :P
|
||||
#
|
||||
# BTW: when you have feature requests, mailing a patch that works is the fastest way
|
||||
# to get it added :p
|
||||
|
||||
use strict;
|
||||
use 5.6.1;
|
||||
use Irssi;
|
||||
use Irssi::TextUI;
|
||||
|
||||
my $VERSION = "1.4";
|
||||
|
||||
my %IRSSI = (
|
||||
authors => "Peter 'kinlo' Leurs",
|
||||
contact => "peter\@pfoe.be",
|
||||
name => "trackbar",
|
||||
description => "Shows a bar where you've last read a window",
|
||||
license => "GPLv2",
|
||||
url => "http://www.pfoe.be/~peter/trackbar/",
|
||||
changed => "Thu Feb 20 16:18:08 2003",
|
||||
);
|
||||
|
||||
my %config;
|
||||
|
||||
Irssi::settings_add_str('trackbar', 'trackbar_string' => '-');
|
||||
$config{'trackbar_string'} = Irssi::settings_get_str('trackbar_string');
|
||||
|
||||
Irssi::settings_add_str('trackbar', 'trackbar_style' => '%K');
|
||||
$config{'trackbar_style'} = Irssi::settings_get_str('trackbar_style');
|
||||
|
||||
Irssi::signal_add(
|
||||
'setup changed' => sub {
|
||||
$config{'trackbar_string'} = Irssi::settings_get_str('trackbar_string');
|
||||
$config{'trackbar_style'} = Irssi::settings_get_str('trackbar_style');
|
||||
if ($config{'trackbar_style'} =~ /(?<!%)[^%]|%%|%$/) {
|
||||
Irssi::print(
|
||||
"trackbar: %RWarning!%n 'trackbar_style' seems to contain "
|
||||
. "printable characters. Only use format codes (read "
|
||||
. "formats.txt).", MSGLEVEL_CLIENTERROR);
|
||||
}
|
||||
}
|
||||
);
|
||||
|
||||
Irssi::signal_add(
|
||||
'window changed' => sub {
|
||||
my (undef, $oldwindow) = @_;
|
||||
|
||||
if ($oldwindow) {
|
||||
my $line = $oldwindow->view()->get_bookmark('trackbar');
|
||||
$oldwindow->view()->remove_line($line) if defined $line;
|
||||
$oldwindow->print(line($oldwindow->{'width'}), MSGLEVEL_NEVER);
|
||||
$oldwindow->view()->set_bookmark_bottom('trackbar');
|
||||
}
|
||||
}
|
||||
);
|
||||
|
||||
sub line {
|
||||
my $width = shift;
|
||||
my $string = $config{'trackbar_string'};
|
||||
$string = '-' unless defined $string;
|
||||
|
||||
# There is a bug in irssi's utf-8 handling on config file settings, as you
|
||||
# can reproduce/see yourself by the following code sniplet:
|
||||
#
|
||||
# my $quake = pack 'U*', 8364; # EUR symbol
|
||||
# Irssi::settings_add_str 'temp', 'temp_foo' => $quake;
|
||||
# Irssi::print length $quake;
|
||||
# # prints 1
|
||||
# Irssi::print length Irssi::settings_get_str 'temp_foo';
|
||||
# # prints 3
|
||||
#
|
||||
#
|
||||
# Trackbar used to have a workaround, but on recent versions of perl/irssi
|
||||
# it does no longer work. Therefore, if you want your trackbar to contain
|
||||
# unicode characters, uncomment the line below for a nice full line, or set
|
||||
# the string to whatever char you want.
|
||||
|
||||
# $string = pack('U*', 0x2500);
|
||||
|
||||
|
||||
my $length = length $string;
|
||||
|
||||
if ($length == 0) {
|
||||
$string = '-';
|
||||
$length = 1;
|
||||
}
|
||||
|
||||
my $times = $width / $length;
|
||||
$times = int(1 + $times) if $times != int($times);
|
||||
$string =~ s/%/%%/g;
|
||||
return $config{'trackbar_style'} . substr($string x $times, 0, $width);
|
||||
}
|
||||
|
||||
# Remove trackbars on upgrade - but this doesn't really work if the scripts are not loaded in the correct order... watch out!
|
||||
|
||||
Irssi::signal_add_first( 'session save' => sub {
|
||||
for my $window (Irssi::windows) {
|
||||
next unless defined $window;
|
||||
my $line = $window->view()->get_bookmark('trackbar');
|
||||
$window->view()->remove_line($line) if defined $line;
|
||||
}
|
||||
}
|
||||
);
|
||||
|
||||
sub cmd_mark {
|
||||
my $window = Irssi::active_win();
|
||||
# return unless defined $window;
|
||||
my $line = $window->view()->get_bookmark('trackbar');
|
||||
$window->view()->remove_line($line) if defined $line;
|
||||
$window->print(line($window->{'width'}), MSGLEVEL_NEVER);
|
||||
$window->view()->set_bookmark_bottom('trackbar');
|
||||
Irssi::command("redraw");
|
||||
}
|
||||
|
||||
Irssi::command_bind('mark', 'cmd_mark');
|
||||
81
znc_timestamp.pl
Normal file
81
znc_timestamp.pl
Normal file
@@ -0,0 +1,81 @@
|
||||
#!/usr/bin/env perl
|
||||
|
||||
use Irssi;
|
||||
use Irssi::Irc;
|
||||
|
||||
use strict;
|
||||
|
||||
use vars qw($VERSION %IRSSI);
|
||||
|
||||
$VERSION = "0.01";
|
||||
%IRSSI = (
|
||||
authors => 'Domen Puncer',
|
||||
contact => 'domen@cba.si',
|
||||
name => 'znc_timestamp',
|
||||
description => 'Replace znc timestamps with native irssi ones',
|
||||
license => 'GPLv2',
|
||||
);
|
||||
|
||||
# this script was based on bitlbee_timestamp by Tijmen "timing" Ruizendaal
|
||||
|
||||
my $tf = Irssi::settings_get_str('timestamp_format');
|
||||
|
||||
my $prev_date = '';
|
||||
|
||||
sub privmsg {
|
||||
my ($server, $data, $nick, $address) = @_;
|
||||
my ($target, $text) = split(/ :/, $data, 2);
|
||||
action($server, $text, $nick, $address, $target, 1);
|
||||
}
|
||||
|
||||
sub action {
|
||||
my ($server, $text, $nick, $address, $target, $privmsg) = @_;
|
||||
|
||||
# What we need to match: ^[17:05]
|
||||
if ($text =~ /^(\x01ACTION )?\[\d\d:\d\d\]/) {
|
||||
my $window;
|
||||
my $time = $text;
|
||||
my $date;
|
||||
$time =~ s/^(\x01ACTION )?\[(\d\d:\d\d)\] .*/$2/g;
|
||||
$text =~ s/\[(..:..)\] //;
|
||||
|
||||
|
||||
my $mday; my $mon; my $year;
|
||||
(undef,undef,undef,$mday,$mon,$year,undef) = localtime;
|
||||
$date = sprintf("%04s-%02s-%02s\n", $year + 1900, $mon + 1, $mday, );
|
||||
|
||||
|
||||
if( $date ne $prev_date ){
|
||||
if( $target =~ /#|&/ ){ # find channel window based on target
|
||||
$window = Irssi::window_find_item($target);
|
||||
} else { # find query window based on nick
|
||||
$window = Irssi::window_find_item($nick);
|
||||
}
|
||||
if( $window != undef ){
|
||||
my($year, $month, $day) = split(/-/, $date);
|
||||
my $formatted_date = $day.' '.$month.' '.$year;
|
||||
$window->print('Day changed to '.$formatted_date, MSGLEVEL_NEVER);
|
||||
}
|
||||
}
|
||||
$prev_date = $date;
|
||||
|
||||
#print "change timestamp to |$time| because of:".$server->{tag}.$target." <$nick> $text";
|
||||
Irssi::settings_set_str('timestamp_format', $time);
|
||||
|
||||
# different arguments for privmsg vs. action
|
||||
if ($privmsg) {
|
||||
Irssi::signal_continue($server, $target . ' :' . $text, $nick, $address);
|
||||
} else {
|
||||
Irssi::signal_continue($server, $text, $nick, $address, $target);
|
||||
}
|
||||
|
||||
my $escaped = $tf;
|
||||
$escaped =~ s/%/%%/g;
|
||||
#print "change back to $escaped";
|
||||
Irssi::settings_set_str('timestamp_format', $tf);
|
||||
}
|
||||
}
|
||||
|
||||
Irssi::signal_add('event privmsg', 'privmsg');
|
||||
Irssi::signal_add('event notice', 'privmsg');
|
||||
Irssi::signal_add('ctcp action', 'action');
|
||||
Reference in New Issue
Block a user