-#! /usr/bin/perl
#
-# $Id: autochannel.pl,v 1.2 2007/09/20 06:58:11 peder Exp $
-#
-# Copyright (C) 2007 by Peder Stray <peder@ninja.no>
+# Copyright (C) 2007-2019 by Peder Stray <peder@ninja.no>
#
use strict;
use Data::Dumper;
$Data::Dumper::Indent = 1;
-# ======[ Script Header ]===============================================
-
use vars qw{$VERSION %IRSSI};
($VERSION) = ' $Revision: 1.2 $ ' =~ / (\d+\.\d+) /;
%IRSSI = (
- name => 'autochannel',
- authors => 'Peder Stray',
- contact => 'peder@ninja.no',
- url => 'http://ninja.no/irssi/autochannel.pl',
- license => 'GPL',
- description => 'Auto add channels to channel list on join',
- );
+ name => 'autochannel',
+ authors => 'Peder Stray',
+ contact => 'peder@ninja.no',
+ url => 'http://ninja.no/irssi/autochannel.pl',
+ license => 'GPL',
+ description => 'Auto add channels to channel list on join',
+ );
-# ======[ Signal hooks ]================================================
# "message join", SERVER_REC, char *channel, char *nick, char *address
sub sig_message_join {
return unless $nick eq $server->{nick};
return unless $server->{chatnet};
return unless Irssi::settings_get_bool('channel_add_on_join');
-
+
Irssi::command(sprintf "channel add %s %s %s",
Irssi::settings_get_bool('channel_add_with_auto')
? '-auto' : '',
}
}
-# ======[ Setup ]=======================================================
-
-# --------[ Settings ]--------------------------------------------------
-
Irssi::settings_add_bool('autochannel', 'channel_add_on_join', 1);
Irssi::settings_add_bool('autochannel', 'channel_add_with_auto', 1);
Irssi::settings_add_bool('autochannel', 'channel_remove_auto_on_part', 1);
Irssi::settings_add_bool('autochannel', 'channel_remove_on_part', 0);
-# --------[ Signals ]---------------------------------------------------
-
Irssi::signal_add_last('message join', 'sig_message_join');
Irssi::signal_add_last('message part', 'sig_message_part');
-
-# ======[ END ]=========================================================
-
-# Local Variables:
-# header-initial-hide: t
-# mode: header-minor
-# end:
-#! /usr/bin/perl
#
-# $Id: chansort.pl,v 1.4 2004/11/02 22:52:33 peder Exp $
-#
-# Copyright (C) 2004 by Peder Stray <peder@gzip.ninja.no>
+# Copyright (C) 2004-2019 by Peder Stray <peder@ninja.no>
#
use strict;
use Irssi;
use Irssi::Irc;
-# ======[ Script Header ]===============================================
-
use vars qw{$VERSION %IRSSI};
($VERSION) = '$Revision: 1.4 $' =~ / (\d+\.\d+) /;
%IRSSI = (
- name => 'chansort',
- authors => 'Peder Stray',
- contact => 'peder@ninja.no',
- url => 'http://ninja.no/irssi/chansort.pl',
- license => 'GPL',
- description => 'Sort all channel and query windows',
- );
-
-# ======[ Hooks ]=======================================================
-
-# --------[ sig_sort_trigger ]------------------------------------------
+ name => 'chansort',
+ authors => 'Peder Stray',
+ contact => 'peder@ninja.no',
+ url => 'http://ninja.no/irssi/chansort.pl',
+ license => 'GPL',
+ description => 'Sort all channel and query windows',
+ );
sub sig_sort_trigger {
return unless Irssi::settings_get_bool('chansort_autosort');
cmd_chansort();
}
-# ======[ Commands ]====================================================
-
-# --------[ CHANSORT ]--------------------------------------------------
-
# Usage: /CHANSORT
sub cmd_chansort {
my(@windows);
for (sort {$a->[0] cmp $b->[0]} @windows) {
my($key,$win) = @$_;
my($act) = $win->{active};
-
-# printf("win[%d->%d]: t[%s] [%s] [%s] {%s}\n",
+
+# printf("win[%d->%d]: t[%s] [%s] [%s] {%s}\n",
# $win->{refnum},
# $minwin,
# $act->{type},
}
}
-# ======[ Setup ]=======================================================
-
-# --------[ Register commands ]-----------------------------------------
-
Irssi::command_bind('chansort', 'cmd_chansort');
-# --------[ Register settings ]-----------------------------------------
-
Irssi::settings_add_bool('chansort', 'chansort_autosort', 0);
-# --------[ Register signals ]------------------------------------------
-
Irssi::signal_add_last('window item name changed', 'sig_sort_trigger');
Irssi::signal_add_last('channel created', 'sig_sort_trigger');
Irssi::signal_add_last('query created', 'sig_sort_trigger');
-
-# ======[ END ]=========================================================
-
-# Local Variables:
-# header-initial-hide: t
-# mode: header-minor
-# end:
-
-#! /usr/bin/perl
-#
-# $Id: dccmove.pl,v 1.4 2007/04/17 21:32:30 peder Exp $
#
# Copyright (C) 2003 by Peder Stray <peder@ninja.no>
#
use vars qw{$VERSION %IRSSI};
($VERSION) = '$Revision: 1.4 $' =~ / (\d+\.\d+) /;
%IRSSI = (
- name => 'dccmove',
- authors => 'Peder Stray',
- contact => 'peder@ninja.no',
- url => 'http://ninja.no/irssi/dccmove.pl',
- license => 'GPL',
- description => 'Move completed dcc gets to the subfolder done',
- );
+ name => 'dccmove',
+ authors => 'Peder Stray',
+ contact => 'peder@ninja.no',
+ url => 'http://ninja.no/irssi/dccmove.pl',
+ license => 'GPL',
+ description => 'Move completed dcc gets to the subfolder done',
+ );
sub sig_dcc_closed {
my($dcc) = @_;
$dir .= "/done";
if ($dcc->{transfd} < $dcc->{size}) {
- printf('%%gDCC aborted %%_%s%%_, %%R%d%%%%%%g remaining%%n',
+ printf('%%gDCC aborted %%_%s%%_, %%R%d%%%%%%g remaining%%n',
$file,
$dcc->{size} ? 100 - $dcc->{transfd}/$dcc->{size}*100 : 0,
);
rename $dcc->{file}, "$dir/$file";
printf('%%gDCC moved %%_%s%%_ to %%_%s%%_%%n', $file, $dir);
-
+
}
Irssi::signal_add_last('dcc closed', 'sig_dcc_closed');
-# friends - irssi 0.8.4.CVS
#
-# $Id: friends.pl,v 1.34 2004/03/08 21:47:12 peder Exp $
-#
-# Copyright (C) 2001, 2002, 2003 by Peder Stray <peder@ninja.no>
+# Copyright (C) 2001-2021 by Peder Stray <peder@ninja.no>
#
use strict;
use Irssi::Irc;
use Irssi::TextUI;
-use Data::Dumper;
-$Data::Dumper::Indent = 1;
-
-# ======[ Script Header ]===============================================
-
use vars qw{$VERSION %IRSSI};
($VERSION) = '$Revision: 1.34 $' =~ / (\d+\.\d+) /;
%IRSSI = (
- name => 'friends',
- authors => 'Peder Stray',
- contact => 'peder@ninja.no',
- url => 'http://ninja.no/irssi/friends.pl',
- license => 'GPL',
- description => 'Basicly an autoop script with a nice interface and nick coloring ;)',
- );
-
-# ======[ Variables ]===================================================
+ name => 'friends',
+ authors => 'Peder Stray',
+ contact => 'peder@ninja.no',
+ url => 'http://ninja.no/irssi/friends.pl',
+ license => 'GPL',
+ description => 'Basicly an autoop script with a nice interface and nick coloring ;)',
+ );
my(%friends, @friends);
);
my(%flaglong) = map { $flagshort{$_} => $_ } keys %flagshort;
-# ======[ Helper functions ]============================================
-
-# --------[ crap ]------------------------------------------------------
-
sub crap {
my $template = shift;
my $msg = sprintf $template, @_;
Irssi::printformat(MSGLEVEL_CLIENTCRAP, 'friends_crap', $msg);
}
-# --------[ load_friends ]----------------------------------------------
-
sub load_friends {
my($file) = Irssi::get_irssi_dir."/friends";
my($count) = 0;
}
close FILE;
$count = keys %friends;
-
+
crap("Loaded $count friends from $file");
}
-# --------[ save_friends ]----------------------------------------------
-
sub save_friends {
my($auto) = @_;
my($file) = Irssi::get_irssi_dir."/friends";
unless $auto;
}
-# --------[ is_friends_window ]-----------------------------------------
-
sub is_friends_window {
my($win) = @_;
return $win->{name} eq '<Friends>';
}
-# --------[ get_friends_window ]----------------------------------------
-
sub get_friends_window {
my($win) = Irssi::window_find_name('<Friends>');
if ($win) {
return $win;
}
-# --------[ get_friend ]------------------------------------------------
-
sub get_friend {
my($channel,$nick) = @_;
my($server) = $channel->{server};
my($chan) = lc $channel->{name};
my($net) = lc $server->{chatnet};
my($flags,@friend);
-
+
for my $mask (keys %friends) {
- next unless $server->mask_match_address($mask,
+ next unless $server->mask_match_address($mask,
$nick->{nick},
$nick->{host});
for my $n ('*', $net) {
return undef;
}
-# --------[ check_friends ]---------------------------------------------
-
sub check_friends {
my($channel, @nicks) = @_;
my(%op,%voice);
- my($nick,$friend,$list);
+ my($nick,$friend,$list);
my(@friends);
return unless $channel->{chanop} || $channel->{ownnick}{op};
my($max) = Irssi::settings_get_int("friends_max_nicks");
@friends = sort @friends;
$channel->printformat(MSGLEVEL_CLIENTCRAP,
- @friends>$max
+ @friends>$max
? 'friends_check_more' : 'friends_check',
join(" ", splice @friends, 0, $max),
scalar @friends);
}
if ($list = join " ", sort keys %op) {
- $channel->command("op $list");
+ $channel->command("op $list");
}
if ($list = join " ", sort keys %voice) {
- $channel->command("voice $list");
+ $channel->command("voice $list");
}
}
-# --------[ update_friends_hash ]---------------------------------------
-
sub update_friends_hash {
%friends = ();
for (@friends) {
}
}
-# --------[ update_friends_window ]-------------------------------------
-
sub update_friends_window {
my($win) = Irssi::window_find_name('<Friends>');
my($view);
for $mask (sort keys %friends) {
for $net (sort keys %{$friends{$mask}}) {
for $channel (sort keys %{$friends{$mask}{$net}}) {
- $flags = join "", sort map {$flagshort{$_}}
+ $flags = join "", sort map {$flagshort{$_}}
keys %{$friends{$mask}{$net}{$channel}};
push @friends, [ ++$num, $mask, $channel, $net, $flags ];
}
}
}
-# ======[ Signal Hooks ]================================================
-
-# --------[ sig_send_command ]------------------------------------------
-
sub sig_send_command {
my($win) = Irssi::active_win;
if (is_friends_window($win)) {
} elsif (/^(?:n(et)?|chat(net)?)$/) {
$changed = subcmd_friends_net($win,@param);
-
+
} elsif (/^del(ete)?$/) {
$changed = subcmd_friends_delete($win,@param);
-
+
} elsif (/^f(lags?)?$/) {
$changed = subcmd_friends_flags($win,@param);
}
}
-# --------[ sig_massjoin ]----------------------------------------------
-
sub sig_massjoin {
my($channel, $nicks) = @_;
check_friends($channel, @$nicks);
}
-# --------[ sig_nick_mode_changed ]-------------------------------------
-
sub sig_nick_mode_changed {
my($channel, $nick) = @_;
if ($channel->{synced} && $channel->{server}{nick} eq $nick->{nick}) {
}
}
-# --------[ sig_channel_sync ]------------------------------------------
-
sub sig_channel_sync {
my($channel) = @_;
check_friends($channel, $channel->nicks);
}
-# --------[ sig_setup_reread ]------------------------------------------
-
sub sig_setup_reread {
load_friends;
}
-# --------[ sig_setup_save ]--------------------------------------------
-
sub sig_setup_save {
my($mainconf,$auto) = @_;
save_friends($auto);
}
-# --------[ sig_window_changed ]----------------------------------------
-
sub sig_window_changed {
my($new,$old) = @_;
if (is_friends_window($new)) {
}
}
-# --------[ sig_message_public ]----------------------------------------
-
sub sig_message_public {
my($server, $msg, $nick, $addr, $target) = @_;
my($window,$theme,$friend,$oform,$nform);
if ($friend && $color =~ /^[rgbcmykpwRGBCMYKPWFU0-9_]$/) {
$window = $server->window_find_item($target);
$theme = $window->{theme} || Irssi::current_theme;
-
+
$oform = $nform = $theme->get_format('fe-common/core', 'pubmsg');
$nform =~ s/(\$(\[-?\d+\])?0)/%$color$1%n/g;
}
}
-# --------[ sig_message_irc_action ]------------------------------------
-
sub sig_message_irc_action {
my($server, $msg, $nick, $addr, $target) = @_;
my($window,$theme,$friend,$oform,$nform);
if ($friend && $color =~ /^[rgbcmykpwRGBCMYKPWFU0-9_]$/) {
$window = $server->window_find_item($target);
$theme = $window->{theme} || Irssi::current_theme;
-
- $oform = $nform = $theme->get_format('fe-common/irc',
+
+ $oform = $nform = $theme->get_format('fe-common/irc',
'action_public');
$nform =~ s/(\$(\[-?\d+\])?0)/%$color$1%n/g;
}
}
-# ======[ Commands ]====================================================
-
-# --------[ FRIENDS ]---------------------------------------------------
-
# Usage: /FRIENDS
sub cmd_friends {
my($win) = get_friends_window;
update_friends_window();
}
-# --------[ subcmd_friends_channel ]------------------------------------
-
sub subcmd_friends_channel {
my($win,$num,$chan) = @_;
return 1;
}
-# --------[ subcmd_friends_delete ]-------------------------------------
-
sub subcmd_friends_delete {
my($win,$num) = @_;
$win->print("Syntax: DELETE <num>", MSGLEVEL_NEVER);
return;
}
-
+
unless (0 < $num && $num <= @friends) {
$win->print("Error: Element $num not in list", MSGLEVEL_NEVER);
return;
}
-
+
splice @friends, $num-1, 1;
return 1;
}
-# --------[ subcmd_friends_flags ]--------------------------------------
-
sub subcmd_friends_flags {
my($win,$num,$flags) = @_;
my(%f);
-
+
unless ($flags && defined $num) {
$win->print("Syntax: FLAGS <num> <flags>", MSGLEVEL_NEVER);
return;
$win->print("Error: Element $num not in list", MSGLEVEL_NEVER);
return;
}
-
+
$friends[$num-1][4] = join "", sort grep {!$f{$_}++}
split //, $flags;
return 1;
}
-# --------[ subcmd_friends_help ]---------------------------------------
-
sub subcmd_friends_help {
my($win) = @_;
}
-# --------[ subcmd_friends_mask ]---------------------------------------
-
sub subcmd_friends_mask {
my($win, $num, $mask) = @_;
$win->print("Syntax: MASK <num> <mask>", MSGLEVEL_NEVER);
return;
}
-
+
unless (0 < $num && $num <= @friends) {
$win->print("Error: Element $num not in list", MSGLEVEL_NEVER);
return;
}
-
+
unless ($mask =~ /^.+!.+@.+$/) {
$win->print("Error: Mask $mask is not valid", MSGLEVEL_NEVER);
}
-
+
$friends[$num-1][1] = $mask;
return 1;
}
-# --------[ subcmd_friends_net ]----------------------------------------
-
sub subcmd_friends_net {
my($win,$num,$net) = @_;
my($n);
$win->print("Error: Element $num not in list", MSGLEVEL_NEVER);
return;
}
-
+
if ($net eq '*') {
# all is well
} elsif ($n = Irssi::chatnet_find($net)) {
MSGLEVEL_NEVER);
return;
}
-
+
$friends[$num-1][3] = $net;
return 1;
}
-# --------[ ADDFRIEND ]-------------------------------------------------
-
# Usage: /ADDFRIEND <nick>|<mask> [<channel>|* [<net>|*]]
# [-mask host|normal|domain|full]
-# [-flags <flags>]
+# [-flags <flags>]
sub cmd_addfriend {
my($param,$serv,$chan) = @_;
my(@param,@flags);
$type = Irssi::Irc::MASK_HOST;
} elsif (/^n(ormal)?$/) {
$type = Irssi::Irc::MASK_USER
- | Irssi::Irc::MASK_DOMAIN;
+ | Irssi::Irc::MASK_DOMAIN;
} elsif (/^d(omain)?$/) {
$type = Irssi::Irc::MASK_DOMAIN;
} elsif (/^f(ull)?$/) {
$type = Irssi::Irc::MASK_NICK
- | Irssi::Irc::MASK_USER
+ | Irssi::Irc::MASK_USER
| Irssi::Irc::MASK_HOST;
} else {
# fjekk
save_friends(1);
}
-# ======[ Setup ]=======================================================
-
-# --------[ Register settings ]-----------------------------------------
-
Irssi::settings_add_bool('friends', 'friends_autosave', 1);
Irssi::settings_add_int('friends', 'friends_max_nicks', 10);
Irssi::settings_add_bool('friends', 'friends_show_check', 1);
-
Irssi::settings_add_str('friends', 'friends_nick_color', '');
-# --------[ Register formats ]------------------------------------------
-
Irssi::theme_register(
[
'friends_crap',
]);
-# --------[ Register signals ]------------------------------------------
-
Irssi::signal_add_first("send command", "sig_send_command");
Irssi::signal_add_last("massjoin", "sig_massjoin");
Irssi::signal_add_first('message public', 'sig_message_public');
Irssi::signal_add_first('message irc action', 'sig_message_irc_action');
-# --------[ Register commands ]-----------------------------------------
-
Irssi::command_bind('friends', 'cmd_friends');
Irssi::command_bind('addfriend', 'cmd_addfriend');
-# --------[ Register timers ]-------------------------------------------
-
-# --------[ Load config ]-----------------------------------------------
-
load_friends;
-
-# ======[ END ]=========================================================
-
-# Local Variables:
-# header-initial-hide: t
-# mode: header-minor
-# end:
-# keepnick - irssi 0.7.98.CVS
#
-# $Id: keepnick.pl,v 1.19 2013/05/23 05:08:34 peder Exp $
-#
-# Copyright (C) 2001, 2002, 2006, 2013 by Peder Stray <peder@ninja.no>
+# Copyright (C) 2001-2013 by Peder Stray <peder@ninja.no>
#
use strict;
use Irssi 20011118.1727;
use Irssi::Irc;
-# ======[ Script Header ]===============================================
-
use vars qw{$VERSION %IRSSI};
($VERSION) = '$Revision: 1.19 $' =~ / (\d+\.\d+) /;
%IRSSI = (
- name => 'keepnick',
- authors => 'Peder Stray',
- contact => 'peder@ninja.no',
- url => 'http://ninja.no/irssi/keepnick.pl',
- license => 'GPL',
- description => 'Try to get your nick back when it becomes available.',
- );
-
-# ======[ Variables ]===================================================
+ name => 'keepnick',
+ authors => 'Peder Stray',
+ contact => 'peder@ninja.no',
+ url => 'http://ninja.no/irssi/keepnick.pl',
+ license => 'GPL',
+ description => 'Try to get your nick back when it becomes available.',
+ );
my(%keepnick); # nicks we want to keep
my(%getnick); # nicks we are currently waiting for
my(%inactive); # inactive chatnets
my(%manual); # manual nickchanges
-# ======[ Helper functions ]============================================
-
-# --------[ change_nick ]-----------------------------------------------
-
sub change_nick {
my($server,$nick) = @_;
$server->redirect_event('keepnick nick', 1, ":$nick", -1, undef,
$server->send_raw("NICK :$nick");
}
-# --------[ check_nick ]------------------------------------------------
-
sub check_nick {
my($server,$net,$nick);
%getnick = (); # clear out any old entries
-
+
for $net (keys %keepnick) {
next if $inactive{$net};
$server = Irssi::server_find_chatnet($net);
next unless $server;
next if lc $server->{nick} eq lc $keepnick{$net};
-
+
$getnick{$net} = $keepnick{$net};
}
-
+
for $net (keys %getnick) {
$server = Irssi::server_find_chatnet($net);
next unless $server;
}
}
-# --------[ load_nicks ]------------------------------------------------
-
sub load_nicks {
my($file) = Irssi::get_irssi_dir."/keepnick";
my($count) = 0;
local(*CONF);
-
+
%keepnick = ();
open CONF, "<", $file;
while (<CONF>) {
}
}
close CONF;
-
+
Irssi::printformat(MSGLEVEL_CLIENTCRAP, 'keepnick_crap',
"Loaded $count nicks from $file");
}
-# --------[ save_nicks ]------------------------------------------------
-
sub save_nicks {
my($auto) = @_;
my($file) = Irssi::get_irssi_dir."/keepnick";
my($count) = 0;
local(*CONF);
-
+
return if $auto && !Irssi::settings_get_bool('keepnick_autosave');
-
open CONF, ">", $file;
+
for my $net (sort keys %keepnick) {
print CONF "$net\t$keepnick{$net}\n";
$count++;
}
close CONF;
-
+
Irssi::printformat(MSGLEVEL_CLIENTCRAP, 'keepnick_crap',
"Saved $count nicks to $file")
unless $auto;
}
-# --------[ server_printformat ]----------------------------------------
-
sub server_printformat {
my($server,$level,$format,@params) = @_;
my($emitted) = 0;
unless $emitted;
}
-# ======[ Signal Hooks ]================================================
-
-# --------[ sig_message_nick ]------------------------------------------
-
# if anyone changes their nick, check if we want their old one.
sub sig_message_nick {
my($server,$newnick,$oldnick) = @_;
}
}
-# --------[ sig_message_own_nick ]--------------------------------------
-
# if we change our nick, check it to see if we wanted it and if so
# remove it from the list.
sub sig_message_own_nick {
delete $getnick{$chatnet};
if ($inactive{$chatnet}) {
delete $inactive{$chatnet};
- Irssi::printformat(MSGLEVEL_CLIENTCRAP, 'keepnick_unhold',
+ Irssi::printformat(MSGLEVEL_CLIENTCRAP, 'keepnick_unhold',
$newnick, $chatnet);
}
} elsif (lc $oldnick eq lc $keepnick{$chatnet} &&
}
}
-# --------[ sig_message_own_nick_block ]--------------------------------
-
sub sig_message_own_nick_block {
my($server,$new,$old,$addr) = @_;
Irssi::signal_stop();
}
}
-# --------[ sig_message_quit ]------------------------------------------
-
# if anyone quits, check if we want their nick.
sub sig_message_quit {
my($server,$nick) = @_;
}
}
-# --------[ sig_redir_keepnick_ison ]-----------------------------------
-
sub sig_redir_keepnick_ison {
my($server,$text) = @_;
my $nick = $getnick{lc $server->{chatnet}};
unless $text =~ /:\Q$nick\E\s?$/i;
}
-# --------[ sig_redir_keepnick_nick ]-----------------------------------
-
sub sig_redir_keepnick_nick {
my($server,$args,$nick,$addr) = @_;
Irssi::signal_add_first('message own_nick', 'sig_message_own_nick_block');
Irssi::signal_remove('message own_nick', 'sig_message_own_nick_block');
}
-# --------[ sig_setup_reread ]------------------------------------------
-
# main setup is reread, so let us do it too
sub sig_setup_reread {
load_nicks;
}
-# --------[ sig_setup_save ]--------------------------------------------
-
# main config is saved, and so we should save too
sub sig_setup_save {
my($mainconf,$auto) = @_;
save_nicks($auto);
}
-# ======[ Commands ]====================================================
-
-# --------[ KEEPNICK ]--------------------------------------------------
-
# Usage: /KEEPNICK [-net <chatnet>] [<nick>]
sub cmd_keepnick {
my(@params) = split " ", shift;
if ($chatnet) {
my($cn) = Irssi::chatnet_find($chatnet);
unless ($cn) {
- Irssi::printformat(MSGLEVEL_CLIENTCRAP, 'keepnick_crap',
+ Irssi::printformat(MSGLEVEL_CLIENTCRAP, 'keepnick_crap',
"Unknown chat network: $chatnet");
return;
}
# if we need a server, check if the one we got is connected.
unless ($server || ($nick && $chatnet)) {
- Irssi::printformat(MSGLEVEL_CLIENTCRAP, 'keepnick_crap',
+ Irssi::printformat(MSGLEVEL_CLIENTCRAP, 'keepnick_crap',
"Not connected to server");
return;
}
"Unable to find server network, maybe you forgot /server add before connecting?");
return;
}
-
+
if ($inactive{lc $chatnet}) {
delete $inactive{lc $chatnet};
Irssi::printformat(MSGLEVEL_CLIENTCRAP, 'keepnick_unhold',
check_nick();
}
-# --------[ UNKEEPNICK ]------------------------------------------------
-
# Usage: /UNKEEPNICK [<chatnet>]
sub cmd_unkeepnick {
my($chatnet,$server) = @_;
-
+
# check if the ircnet specified (if any) is valid, and if so get the
# server for it
if ($chatnet) {
my($cn) = Irssi::chatnet_find($chatnet);
unless ($cn) {
- Irssi::printformat(MSGLEVEL_CLIENTCRAP, 'keepnick_crap',
+ Irssi::printformat(MSGLEVEL_CLIENTCRAP, 'keepnick_crap',
"Unknown chat network: $chatnet");
return;
}
save_nicks(1);
}
-# --------[ LISTNICK ]--------------------------------------------------
-
# Usage: /LISTNICK
sub cmd_listnick {
my(@nets) = sort keys %keepnick;
}
}
-# --------[ NICK ]------------------------------------------------------
-
sub cmd_nick {
my($data,$server) = @_;
my($nick) = split " ", $data;
$manual{lc $server->{chatnet}} = $nick;
}
-# ======[ Setup ]=======================================================
-
-# --------[ Register settings ]-----------------------------------------
-
Irssi::settings_add_bool('keepnick', 'keepnick_autosave', 1);
Irssi::settings_add_bool('keepnick', 'keepnick_quiet', 0);
-# --------[ Register formats ]------------------------------------------
-
Irssi::theme_register(
[
- 'keepnick_crap',
+ 'keepnick_crap',
'{line_start}{hilight Keepnick:} $0',
- 'keepnick_add',
+ 'keepnick_add',
'{line_start}{hilight Keepnick:} Now keeping {nick $0} on [$1]',
'keepnick_remove',
'keepnick_unhold',
'{line_start}{hilight Keepnick:} Nickkeeping reactivated on [$1]',
- 'keepnick_list_empty',
+ 'keepnick_list_empty',
'{line_start}{hilight Keepnick:} No nicks in keep list',
- 'keepnick_list_header',
+ 'keepnick_list_header',
'',
- 'keepnick_list_line',
+ 'keepnick_list_line',
'{line_start}{hilight Keepnick:} Keeping {nick $0} in [$1] ($2)',
- 'keepnick_list_footer',
+ 'keepnick_list_footer',
'',
'keepnick_got_nick',
'{hilight Keepnick:} Nickstealer left [$1], got {nick $0} back',
-
-]);
-# --------[ Register signals ]------------------------------------------
+]);
Irssi::signal_add('message quit', 'sig_message_quit');
Irssi::signal_add('message nick', 'sig_message_nick');
Irssi::signal_add('setup saved', 'sig_setup_save');
Irssi::signal_add('setup reread', 'sig_setup_reread');
-# --------[ Register commands ]-----------------------------------------
-
Irssi::command_bind("keepnick", "cmd_keepnick");
Irssi::command_bind("unkeepnick", "cmd_unkeepnick");
Irssi::command_bind("listnick", "cmd_listnick");
Irssi::command_bind("nick", "cmd_nick");
-# --------[ Register timers ]-------------------------------------------
-
Irssi::timeout_add(12000, 'check_nick', '');
-# --------[ Register redirects ]----------------------------------------
-
Irssi::Irc::Server::redirect_register('keepnick ison', 0, 0,
undef,
{
},
undef );
-# --------[ Load config ]-----------------------------------------------
-
load_nicks;
-
-# ======[ END ]=========================================================
-
-# Local Variables:
-# header-initial-hide: t
-# mode: header-minor
-# end:
-# vim:set ts=8 sw=4:
#! /usr/bin/perl
#
-# $Id: log2ansi,v 1.10 2010/02/13 13:59:47 peder Exp $
-#
-# Copyright (C) 2002, 2003, 2010 by Peder Stray <peder@ninja.no>
+# Copyright (C) 2002-2019 by Peder Stray <peder.stray@gmail.com>
#
# This is a standalone perl program and not intended to run within
# irssi, it will complain if you try to...
use vars qw($class $oldclass);
use vars qw{$VERSION %IRSSI};
-($VERSION) = ' $Revision: 1.10 $ ' =~ / (\d+\.\d+) /;
+($VERSION) = '$Revision: 1.10 $' =~ / (\d+\.\d+) /;
%IRSSI = (
- name => 'log2ansi',
- authors => 'Peder Stray',
- contact => 'peder@ninja.no',
- url => 'http://ninja.no/irssi/log2ansi',
- license => 'GPL',
- description => 'convert mirc color and irssi interal formatting to ansi colors, useful for log filtering',
- );
+ name => 'log2ansi',
+ authors => 'Peder Stray',
+ contact => 'peder.stray@gmail.com',
+ url => 'https://github.com/pstray/irssi-log2ansi',
+ license => 'GPL',
+ description => 'Convert various color codes to ANSI colors, useful for log filtering and viewing.',
+ );
if (__PACKAGE__ =~ /^Irssi/) {
# we are within irssi... die!
sub defm {
my($attr) = shift || \%attr;
- $attr->{bold} = $attr->{underline} =
+ $attr->{bold} = $attr->{underline} =
$attr->{blink} = $attr->{reverse} = 0;
}
# do nothing
}
else {
-
+
if ($opt_html) {
my %class;
-
+
for (@bols) {
$class{$_}++ if $attr{$_};
}
);
$elem{0}++ if @clear;
-
+
for (@bols) {
- $elem{$base{$_}}++
+ $elem{$base{$_}}++
if $attr{$_} && ($old{$_} != $attr{$_} || $elem{0});
}
-
+
for (@nums) {
$elem{$base{$_}+$attr{$_}}++
if $attr{$_} >= 0 && ($old{$_} != $attr{$_} || $elem{0});
}
-
+
@elem = sort {$a<=>$b} keys %elem;
-
+
if (@elem) {
@elem = () if @elem == 1 && !$elem[0];
printf "\e[%sm", join ";", @elem;
if (s/^\cB//) {
# toggle bold
$attr{bold} = !$attr{bold};
-
+
} elsif (s/^\cC//) {
# mirc colors
if (/^[^\d,]/) {
defc;
} else {
-
+
if (s/^(\d\d?)//) {
$attr{fgc} = $mc[$1 % 16];
$attr{fgh} = $mh[$1 % 16];
-# query - irssi 0.8.4.CVS
#
-# $Id: query.pl,v 1.24 2009/03/29 12:23:10 peder Exp $
-#
-# Copyright (C) 2001, 2002, 2004, 2007 by Peder Stray <peder@ninja.no>
+# Copyright (C) 2001-2019 by Peder Stray <peder@ninja.no>
#
use strict;
#use Data::Dumper;
-# ======[ Script Header ]===============================================
-
use vars qw{$VERSION %IRSSI};
($VERSION) = '$Revision: 1.25 $' =~ / (\d+\.\d+) /;
%IRSSI = (
description => 'Give you more control over when to jump to query windows and when to just tell you one has been created. Enhanced autoclose.',
);
-# ======[ Variables ]===================================================
-
use vars qw(%state);
*state = \%Query::state; # used for tracking idletime and state
my(%defaults); # used for storing defaults
my($query_opts) = {}; # stores option abbrevs
-# ======[ Helper functions ]============================================
-
-# --------[ load_defaults ]---------------------------------------------
-
sub load_defaults {
my $file = Irssi::get_irssi_dir."/query";
local *FILE;
close FILE;
}
-# --------[ save_defaults ]---------------------------------------------
-
sub save_defaults {
my $file = Irssi::get_irssi_dir."/query";
local *FILE;
open FILE, '>', $file;
for (keys %defaults) {
my $d = $defaults{$_};
- print FILE join("\t", $_,
+ print FILE join("\t", $_,
exists $d->{maxage} ? $d->{maxage} : -1,
exists $d->{immortal} ? $d->{immortal} : -1,
), "\n";
close FILE;
}
-# --------[ sec2str ]---------------------------------------------------
-
sub sec2str {
my($sec) = @_;
my($ret);
$ret = ($sec%24)."h ".$ret;
$sec /= 24;
-
+
$ret = $sec."d ".$ret;
-
+
$ret =~ s/\b0[dhms] //g;
$ret =~ s/ $//;
-
+
return $ret;
}
-# --------[ str2sec ]---------------------------------------------------
-
sub str2sec {
my($str) = @_;
return $str;
}
-# --------[ set_defaults ]----------------------------------------------
-
sub set_defaults {
my($serv,$nick,$address) = @_;
my $tag = lc $serv->{tag};
-
+
return unless $address;
$state{$tag}{$nick}{address} = $address;
}
}
-# --------[ time2str ]--------------------------------------------------
-
sub time2str {
my($time) = @_;
return strftime("%c", localtime $time);
}
-# --------[ userhost_cmp ]----------------------------------------------
-
sub userhost_cmp {
my($serv, $am, $bm) = @_;
my($an,$aa) = split "!", $am;
}
-# ======[ Signal Hooks ]================================================
-
-# --------[ sig_message_own_private ]-----------------------------------
-
sub sig_message_own_private {
my($server,$msg,$nick,$orig_target) = @_;
$own = $nick;
}
-# --------[ sig_message_private ]---------------------------------------
-
sub sig_message_private {
my($server,$msg,$nick,$addr) = @_;
undef $own;
}
-# --------[ sig_print_message ]-----------------------------------------
-
sub sig_print_message {
my($dest, $text, $strip) = @_;
-
+
return unless $dest->{level} & MSGLEVEL_MSGS;
- my $server = $dest->{server};
+ my $server = $dest->{server};
return unless $server;
$state{$tag}{$witem->{name}}{time} = time;
}
-# --------[ sig_query_address_changed ]---------------------------------
-
sub sig_query_address_changed {
my($query) = @_;
}
-# --------[ sig_query_created ]-----------------------------------------
-
sub sig_query_created {
my ($query, $auto) = @_;
my $qwin = $query->window();
$qwin->set_active();
} else {
$awin->printformat(MSGLEVEL_CLIENTCRAP, 'query_created',
- $nick, $query->{server_tag},
+ $nick, $query->{server_tag},
$qwin->{refnum})
if Irssi::settings_get_bool('query_noisy');
}
$serv->send_raw("USERHOST :$nick");
}
-# --------[ sig_query_destroyed ]---------------------------------------
-
sub sig_query_destroyed {
my($query) = @_;
delete $state{lc $query->{server_tag}}{$query->{name}};
}
-
-# --------[ sig_query_nick_changed ]------------------------------------
-
sub sig_query_nick_changed {
my($query,$old_nick) = @_;
my($tag) = lc $query->{server_tag};
$state{$tag}{$query->{name}} = delete $state{$tag}{$old_nick};
}
-# --------[ sig_redir_query_userhost ]----------------------------------
-
sub sig_redir_query_userhost {
my($serv,$data) = @_;
}
}
-# --------[ sig_session_restore ]---------------------------------------
-
sub sig_session_restore {
open STATE, sprintf "< %s/query.state", Irssi::get_irssi_dir;
%state = (); # only needed if bound as command
close STATE;
}
-# --------[ sig_session_save ]------------------------------------------
-
sub sig_session_save {
open STATE, sprintf "> %s/query.state", Irssi::get_irssi_dir;
for my $tag (keys %state) {
close STATE;
}
-# ======[ Timers ]======================================================
-
-# --------[ check_queries ]---------------------------------------------
-
sub check_queries {
my(@queries) = Irssi::queries;
# not old enough
next if $age < $maxage;
- # unseen messages
+ # unseen messages
next if $query->{data_level} > 1;
# active window
- next if $query->is_active &&
+ next if $query->is_active &&
$query->window->{refnum} == $win->{refnum};
# graceperiod
}
}
-# ======[ Commands ]====================================================
-
-# --------[ cmd_query ]-------------------------------------------------
-
sub cmd_query {
my($data,$server,$witem) = @_;
my(@data) = split " ", $data;
if ($opt eq 'window') {
push @opts, "-$param";
-
+
} elsif ($opt eq 'immortal') {
$state->{immortal} = 1;
-
+
} elsif ($opt eq 'info') {
$info = 1;
-
+
} elsif ($opt eq 'mortal') {
$state->{immortal} = 0;
-
+
} elsif ($opt eq 'timeout') {
$state->{maxage} = str2sec shift @data;
# unhandled known opt
}
-
+
} elsif ($tag = Irssi::server_find_tag($param)) {
$tag = $tag->{tag};
push @opts, "-$tag";
} else {
# normal parameter
push @params, $param;
-
+
}
}
} else {
$timeout .= " (Off)";
}
-
+
@items = (
Server => $query->{server_tag},
Nick => $nick,
Timeout => $timeout,
Idle => sec2str(time - $state->{time}),
);
-
+
$query->printformat(MSGLEVEL_CLIENTCRAP, 'query_info_header');
while (($key,$val) = splice @items, 0, 2) {
$query->printformat(MSGLEVEL_CLIENTCRAP, 'query_info',
return;
}
- my $mask = Irssi::Irc::get_mask($nick, $state->{address},
- Irssi::Irc::MASK_USER |
+ my $mask = Irssi::Irc::get_mask($nick, $state->{address},
+ Irssi::Irc::MASK_USER |
Irssi::Irc::MASK_DOMAIN
);
return if $opts;
if ($state{$tag}{$nick}{immortal}) {
- $witem->printformat(MSGLEVEL_CLIENTCRAP,
+ $witem->printformat(MSGLEVEL_CLIENTCRAP,
'query_crap', 'This query is immortal');
} else {
$witem->command("unquery")
}
-# --------[ cmd_unquery ]-----------------------------------------------
-
sub cmd_unquery {
my($data,$server,$witem) = @_;
my($param) = split " ", $data;
if ($state{$tag}{$nick}{immortal}) {
if ($param) {
- $witem->printformat(MSGLEVEL_CLIENTCRAP,
- 'query_crap',
+ $witem->printformat(MSGLEVEL_CLIENTCRAP,
+ 'query_crap',
"Query with $nick is immortal");
} else {
- $witem->printformat(MSGLEVEL_CLIENTCRAP,
- 'query_crap',
+ $witem->printformat(MSGLEVEL_CLIENTCRAP,
+ 'query_crap',
'This query is immortal');
}
Irssi::signal_stop;
}
}
-# ======[ Setup ]=======================================================
-
-# --------[ Register commands ]-----------------------------------------
-
Irssi::command_bind('query', 'cmd_query');
Irssi::command_bind('unquery', 'cmd_unquery');
Irssi::command_set_options('query', 'immortal mortal info save +timeout');
#Irssi::command_bind('query_save', 'sig_session_save');
#Irssi::command_bind('query_restore', 'sig_session_restore');
-# --------[ Register formats ]------------------------------------------
-
Irssi::theme_register(
[
'query_created',
]);
-# --------[ Register settings ]-----------------------------------------
-
Irssi::settings_add_bool('query', 'query_autojump_own', 1);
Irssi::settings_add_bool('query', 'query_autojump', 0);
Irssi::settings_add_bool('query', 'query_noisy', 1);
-Irssi::settings_add_bool('query', 'query_unqueries',
- Irssi::version < 20020919.1507 ||
+Irssi::settings_add_bool('query', 'query_unqueries',
+ Irssi::version < 20020919.1507 ||
Irssi::version >= 20021006.1620 );
Irssi::settings_add_time('query', 'query_autoclose', 0);
Irssi::settings_add_time('query', 'query_autoclose_grace', '5min');
-# --------[ Register signals ]------------------------------------------
-
Irssi::signal_add_last('message own_private', 'sig_message_own_private');
Irssi::signal_add_last('message private', 'sig_message_private');
Irssi::signal_add('session save', 'sig_session_save');
Irssi::signal_add('session restore', 'sig_session_restore');
-# --------[ Register timers ]-------------------------------------------
-
Irssi::timeout_add(5000, 'check_queries', undef);
-# ======[ Initialization ]==============================================
-
load_defaults;
for my $query (Irssi::queries) {
my($tag) = lc $query->{server_tag};
my($nick) = $query->{name};
- $state{$tag}{$nick}{time}
+ $state{$tag}{$nick}{time}
||= $query->{last_unread_msg} || $query->{createtime} || time;
-
+
set_defaults($query->{server}, $nick, $query->{address});
}
Irssi::printformat(MSGLEVEL_CLIENTCRAP, 'query_warn',
"autoclose_query is set, please set to 0");
}
-
-# ======[ END ]=========================================================
-
-# Local Variables:
-# header-initial-hide: t
-# mode: header-minor
-# end:
-# upgradeinfo - irssi 0.8.6.CVS
#
-# $Id: upgradeinfo.pl,v 1.7 2003/02/04 02:29:57 peder Exp $
-#
-# Copyright (C) 2002, 2003 by Peder Stray <peder@ninja.no>
+# Copyright (C) 2002-2019 by Peder Stray <peder@ninja.no>
#
use strict;
use Irssi 20021204.1123;
use Irssi::TextUI;
-# ======[ Script Header ]===============================================
-
use vars qw{$VERSION %IRSSI};
($VERSION) = '$Revision: 1.7 $' =~ / (\d+\.\d+) /;
%IRSSI = (
- name => 'upgradeinfo',
- authors => 'Peder Stray',
- contact => 'peder@ninja.no',
- url => 'http://ninja.no/irssi/upgradeinfo.pl',
- license => 'GPL',
- description => 'Statusbaritem notifying you about updated binary',
+ name => 'upgradeinfo',
+ authors => 'Peder Stray',
+ contact => 'peder@ninja.no',
+ url => 'http://ninja.no/irssi/upgradeinfo.pl',
+ license => 'GPL',
+ description => 'Statusbar item notifying you about updated binary',
sbitems => 'upgradeinfo',
- );
-
-# ======[ Variables ]===================================================
+ );
my($load_time) = 0; # modification time of binary at load
my($file_time) = 0; # modification time of binary file
my($timer) = 0; # ID of current timer
-# ======[ Commands ]====================================================
-
-# --------[ UPGRADEINFO ]-----------------------------------------------
-
sub cmd_upgradeinfo {
my($param,$serv,$chan) = @_;
print CLIENTCRAP sprintf ">> load: %s", scalar localtime $load_time;
print CLIENTCRAP sprintf ">> file: %s", scalar localtime $file_time;
-
}
-# ======[ Signal Hooks ]================================================
-
-# --------[ sig_setup_changed ]-----------------------------------------
-
sub sig_setup_changed {
my($interval) = Irssi::settings_get_int('upgrade_check_interval');
$timer = Irssi::timeout_add($interval, 'ui_check' , undef);
}
-# ======[ Statusbar Hooks ]=============================================
-
-# --------[ sb_upgradeinfo ]--------------------------------------------
-
sub sb_upgradeinfo {
my($item, $get_size_only) = @_;
my $format = "";
my($time);
my($timefmt) = Irssi::settings_get_str('upgrade_time_format');
-
+
$time = $file_time - $load_time;
-
+
if ($time) {
- $time = sprintf($timefmt,
+ $time = sprintf($timefmt,
$time/60/60/24,
$time/60/60%24,
$time/60%60,
$time =~ s/^(0+\D+)+//;
$format = "{sb %r$time%n}";
}
-
+
$item->default_handler($get_size_only, $format, undef, 1);
}
-# ======[ Timers ]======================================================
-
-# --------[ ui_check ]--------------------------------------------------
-
sub ui_check {
$file_time = (stat Irssi::get_irssi_binary)[9];
Irssi::statusbar_items_redraw('upgradeinfo');
}
-# ======[ Setup ]=======================================================
-
-# --------[ Register commands ]-----------------------------------------
-
Irssi::command_bind('upgradeinfo', 'cmd_upgradeinfo');
-# --------[ Register formats ]------------------------------------------
-
-# --------[ Register settings ]-----------------------------------------
-
Irssi::settings_add_int('upgrade', 'upgrade_check_interval', 300);
Irssi::settings_add_str('upgrade', 'upgrade_time_format', '%d+%02d:%02d');
-# --------[ Register signals ]------------------------------------------
-
Irssi::signal_add('setup changed', 'sig_setup_changed');
-# --------[ Register statusbar items ]----------------------------------
-
Irssi::statusbar_item_register('upgradeinfo', undef, 'sb_upgradeinfo');
-# --------[ Other setup ]-----------------------------------------------
-
$load_time = (stat Irssi::get_irssi_binary)[9];
$file_time = $load_time;
sig_setup_changed;
-
-# ======[ END ]=========================================================
-
-# Local Variables:
-# header-initial-hide: t
-# mode: header-minor
-# end:
-# uptime - irssi 0.7.98.CVS
#
-# $Id: uptime.pl,v 1.6 2003/02/04 02:43:06 peder Exp $
-#
-# Copyright (C) 2002, 2003 by Peder Stray <peder@ninja.no>
+# Copyright (C) 2002-2019 by Peder Stray <peder@ninja.no>
#
use strict;
use Irssi::Irc;
use Irssi::TextUI;
-# ======[ Script Header ]===============================================
-
use vars qw{$VERSION %IRSSI};
($VERSION) = '$Revision: 1.6 $' =~ / (\d+\.\d+) /;
%IRSSI = (
- name => 'uptime',
- authors => 'Peder Stray',
- contact => 'peder@ninja.no',
- url => 'http://ninja.no/irssi/uptime.pl',
- license => 'GPL',
- description => 'Try a little harder to figure out client uptime',
- sbitems => 'uptime',
- );
-
-# ======[ Variables ]===================================================
+ name => 'uptime',
+ authors => 'Peder Stray',
+ contact => 'peder@ninja.no',
+ url => 'http://ninja.no/irssi/uptime.pl',
+ license => 'GPL',
+ description => 'Try a little harder to figure out client uptime',
+ sbitem => 'uptime',
+ );
my($timer) = 0; # ID of current timer
-# ======[ Helper functions ]============================================
-
-# --------[ uptime_linux ]----------------------------------------------
-
sub uptime_linux {
my($sys_uptime);
my($irssi_start);
return $sys_uptime - $irssi_start/100;
}
-# --------[ uptime_solaris ]--------------------------------------------
-
sub uptime_solaris {
my($irssi_start);
return $irssi_start;
}
-# --------[ uptime ]----------------------------------------------------
-
sub uptime {
my($sysname) = @_;
my($time);
return $time;
}
-# --------[ format_interval ]-------------------------------------------
-
sub format_interval {
my($interval) = @_;
return $str;
}
-# ======[ Commands ]====================================================
-
-# --------[ cmd_uptime ]------------------------------------------------
-
sub cmd_uptime {
my($data,$server,$witem) = @_;
my($sysname) = Irssi::parse_special('$sysname');
if ($data && $server) {
$server->command("MSG $data uptime: $str");
} elsif ($witem && ($witem->{type} eq "CHANNEL" ||
- $witem->{type} eq "QUERY")) {
+ $witem->{type} eq "QUERY")) {
$witem->command("MSG ".$witem->{name}." uptime: $str");
} else {
Irssi::printformat(MSGLEVEL_CLIENTCRAP, 'uptime',
}
}
-# ======[ Signal Hooks ]================================================
-
-# --------[ sig_setup_changed ]-----------------------------------------
-
sub sig_setup_changed {
my($interval) = Irssi::settings_get_int('uptime_refresh_interval');
$timer = Irssi::timeout_add($interval, 'uptime_refresh' , undef);
}
-# ======[ Statusbar Hooks ]=============================================
-
-# --------[ sb_uptime ]-------------------------------------------------
-
sub sb_uptime {
my($item, $get_size_only) = @_;
my $format = "";
my($uptime) = uptime(Irssi::parse_special('$sysname'));
my($time) = format_interval($uptime);
-
+
$format = "{sb %g$time%n}";
-
+
$item->default_handler($get_size_only, $format, undef, 1);
}
-# ======[ Timers ]======================================================
-
-# --------[ uptime_refresh ]--------------------------------------------
-
sub uptime_refresh {
Irssi::statusbar_items_redraw('uptime');
}
-# ======[ Setup ]=======================================================
-
-# --------[ Register commands ]-----------------------------------------
-
Irssi::command_bind('uptime', 'cmd_uptime');
-# --------[ Register formats ]------------------------------------------
-
Irssi::theme_register(
[
'uptime',
'{line_start}{hilight Uptime:} $0 ($1)',
]);
-# --------[ Register settings ]-----------------------------------------
-
Irssi::settings_add_int('upgrade', 'uptime_refresh_interval', 12);
-# --------[ Register signals ]------------------------------------------
-
Irssi::signal_add('setup changed', 'sig_setup_changed');
-# --------[ Register statusbar items ]----------------------------------
-
Irssi::statusbar_item_register('uptime', undef, 'sb_uptime');
-# --------[ Other setup ]-----------------------------------------------
-
sig_setup_changed;
-
-# ======[ END ]=========================================================
-
-# Local Variables:
-# header-initial-hide: t
-# mode: header-minor
-# end: