use strict;
use warnings;
our $VERSION = '1.1'; # 67ffc4766319fe4
our %IRSSI = (
authors => 'Nei',
contact => 'Nei @ [email protected]',
url => "http://anti.teamidiot.de/",
name => 'cmdind',
description => 'Indicator for input prompt if you are inputting a command or text',
license => 'GNU GPLv2 or later',
);
# Usage
# =====
# This script requires the
#
# uberprompt
#
# script to work. If you don't have it yet, /script install uberprompt
# Options
# =======
# /set cmdind_text
# * string : Text to show in prompt when typing a command
#
# /set cmdind_warn_text
# * string : Text to show in prompt when typing a command with spaces in front
use Irssi;
my $cmd_state = 0;
my $cmdchars;
my @text;
sub check_input {
my $inputline = Irssi::parse_special('$L');
my $c1 = length $inputline > 0 ? substr $inputline, 0, 1 : '';
my $c2 = length $inputline > 1 ? substr $inputline, 1, 1 : '';
my $old_state = $cmd_state;
my $x_state = length $c2 && (-1 != index $cmdchars, $c1) && $c2 ne ' ';
my $warn_state =
($inputline =~ /^\s+(\S)/ && (-1 != index $cmdchars, $1))
|| ($x_state && $inputline =~ /^(.)\1?+\S*[\Q$cmdchars\E]/);
$cmd_state = $warn_state ? 2 : $x_state ? 1 : 3;
if ($cmd_state ne $old_state) {
Irssi::signal_emit('change prompt', $text[ $cmd_state ], 'UP_POST');
}
}
sub setup_changed {
$cmdchars = Irssi::settings_get_str('cmdchars');
@text = ('',
Irssi::settings_get_str('cmdind_text'),
Irssi::settings_get_str('cmdind_warn_text'),
'');
}
Irssi::settings_add_str('cmdind', 'cmdind_text', '%gCmd:');
Irssi::settings_add_str('cmdind', 'cmdind_warn_text', '%RMsg?');
setup_changed();
Irssi::signal_add_last('gui key pressed', 'check_input');
Irssi::signal_add('setup changed', 'setup_changed');