aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--feature-tests/format-test.pl26
-rw-r--r--feature-tests/template.pl15
-rw-r--r--prompt_info/input_overlay.pl151
-rw-r--r--test/irssi/config74
4 files changed, 213 insertions, 53 deletions
diff --git a/feature-tests/format-test.pl b/feature-tests/format-test.pl
new file mode 100644
index 0000000..d8be412
--- /dev/null
+++ b/feature-tests/format-test.pl
@@ -0,0 +1,26 @@
+use strict;
+use warnings;
+
+
+use Irssi;
+
+
+our $VERSION = '0.1';
+our %IRSSI = (
+ authors => '',
+ contact => '',
+ name => '',
+ description => '',
+ license => 'Public Domain',
+ );
+
+init();
+
+sub init {
+ Irssi::command_bind('ft', \&format_test);
+}
+
+
+sub format_test {
+ my ($args, $win, $server) = @_;
+}
diff --git a/feature-tests/template.pl b/feature-tests/template.pl
new file mode 100644
index 0000000..2c75044
--- /dev/null
+++ b/feature-tests/template.pl
@@ -0,0 +1,15 @@
+use strict;
+use warnings;
+
+
+use Irssi;
+
+
+our $VERSION = '0.1';
+our %IRSSI = (
+ authors => '',
+ contact => '',
+ name => '',
+ description => '',
+ license => 'Public Domain',
+ );
diff --git a/prompt_info/input_overlay.pl b/prompt_info/input_overlay.pl
index c815ffb..7a8dd9d 100644
--- a/prompt_info/input_overlay.pl
+++ b/prompt_info/input_overlay.pl
@@ -23,9 +23,13 @@ our %IRSSI =
# line := [ region, region, region ]
# region := { start => x, end => y, ...? }
-my $overlays;
+my @regions;
+
my ($term_w, $term_h) = (0, 0);
+my $key_capture = 0;
+my $prompt_len = 5;
+
sub DEBUG () { 1 }
sub update_terminal_size {
@@ -51,3 +55,148 @@ sub update_terminal_size {
print "Terminal detected as $term_w cols by $term_h rows" if DEBUG;
}
+
+sub redraw_overlay {
+ # TODO: we can't assume the active win is the only one with overlays.
+ #Irssi::active_win->view->redraw();
+ foreach my $region (@regions) {
+ if ($region->{draw}) {
+ my $str = $region->{style} . $region->{text} . '%n';
+ my $x_offset = $region->{start} + $prompt_len;
+
+ Irssi::gui_printtext($x_offset, $term_h, $str);
+ }
+ }
+ # my $inp = Irssi::parse_special('$L');
+ # Irssi::gui_input_set($inp . '');
+}
+
+sub augment_redraw {
+ #print "Redraw called" if DEBUG;
+ #redraw_overlay();
+ Irssi::timeout_add_once(20, \&redraw_overlay, 0);
+}
+
+sub intercept_keypress {
+ my $key = shift;
+
+ # intercept C-l for redraw, and force it to call
+ # /redraw instead of the internal function.
+ if ($key == 12) { # C-L
+ print "C-l pressed" if DEBUG;
+ Irssi::command("redraw");
+ Irssi::signal_stop;
+ }
+
+}
+
+sub new_region {
+ my $key = shift;
+ print "Creating new Region";
+ my $new_region
+ = {
+ text => '',
+ start => _pos() -1,
+ style => '%_',
+ open => 1,
+ draw => 1,
+ };
+
+ insert_into_region($key, $new_region);
+
+ push @regions, $new_region;
+}
+
+sub insert_into_region {
+ my ($key, $region) = @_;
+
+ # if ($key == 127) { # backspace
+ # substr($region->{text}, -1, 1) = '';
+ # } else {
+ # $region->{text} .= chr $key;
+ # }
+ my $input = Irssi::parse_special('$L');
+ my $len = _pos() - $region->{start};
+# print "Input: $input, len: $len" if DEBUG;
+
+ my $str = substr($input, $region->{start} , $len);
+# print "Str: $str" if DEBUG;
+ $region->{text} = $str;
+
+ # printf("region [%d-%d] now contains '%s'",
+ # $region->{start}, _pos(),
+ # $region->{text}) if DEBUG;
+}
+
+sub observe_keypress {
+ my $key = shift;
+ if ($key_capture && $key > 31 && $key <= 127) {
+ # see if we're still appending to the last region:
+ #print "Observed printable key: " . chr($key) if DEBUG;
+ #print '';
+ my $latest_region = $regions[-1];
+ $latest_region = {} unless defined $latest_region;
+
+ if (not $latest_region->{open}) {
+ new_region($key);
+ } else {
+ insert_into_region($key, $latest_region);
+ }
+ #Irssi::signal_stop;
+ # TODO: if the cursor pos is inside a region, handle it
+ # extend the region on addition?
+ redraw_overlay();
+ }
+}
+sub init {
+
+ die "This script requires uberprompt.pl"
+ unless script_is_loaded('uberprompt');
+
+ Irssi::signal_add_last ('command redraw', \&augment_redraw);
+ Irssi::signal_add_first('gui key pressed', \&intercept_keypress);
+ Irssi::signal_add_last ('gui key pressed', \&observe_keypress);
+
+ Irssi::signal_add ('terminal resized', \&update_terminal_size);
+ Irssi::signal_add_first('gui print text finished', \&augment_redraw);
+
+ Irssi::command_bind('region_start', \&region_toggle);
+ Irssi::command('/bind ^C /region_start');
+
+ Irssi::signal_add('prompt changed', sub {
+ print "Updated prompt length: $_[1]";
+ $prompt_len = $_[1];
+ });
+
+ Irssi::signal_emit('prompt length request');
+
+ update_terminal_size();
+}
+
+sub region_toggle {
+ $key_capture = not $key_capture;
+ printf("Region is %sactive", $key_capture?'':'in');
+ #@regions = ();
+ # terminate the previous region
+ my $latest_region = $regions[-1];
+ if (defined $latest_region) {
+ $latest_region->{open} = 0;
+ }
+}
+
+sub script_is_loaded {
+ my $name = shift;
+ print "Checking if $name is loaded" if DEBUG;
+ no strict 'refs';
+ my $retval = defined %{ "Irssi::Script::${name}::" };
+ use strict 'refs';
+
+ return $retval;
+}
+
+sub _pos {
+ return Irssi::gui_input_get_pos();
+}
+
+init();
+
diff --git a/test/irssi/config b/test/irssi/config
index 5a7b307..031d15f 100644
--- a/test/irssi/config
+++ b/test/irssi/config
@@ -1,8 +1,9 @@
servers = (
{ address = "eu.irc6.net"; chatnet = "IRCnet"; port = "6667"; },
+ { address = "open.ircnet.net"; chatnet = "IRCnet"; port = "6667"; },
{
- address = "irc.open-ircnet.net";
- chatnet = "IRCnet";
+ address = "chat.freenode.net";
+ chatnet = "Freenode";
port = "6667";
},
{ address = "irc.efnet.org"; chatnet = "EFNet"; port = "6667"; },
@@ -26,14 +27,7 @@ servers = (
{ address = "irc.webchat.org"; chatnet = "WebChat"; port = "6667"; },
{ address = "irc.rizon.net"; chatnet = "Rizon"; port = "6667"; },
{ address = "irc.link-net.org"; chatnet = "LinkNet"; port = "6667"; },
- { address = "silc.silcnet.org"; chatnet = "SILC"; port = "706"; },
- {
- address = "blondu.dyndns.ws";
- chatnet = "botnettest";
- port = "6667";
- use_ssl = "no";
- ssl_verify = "no";
- }
+ { address = "silc.silcnet.org"; chatnet = "SILC"; port = "706"; }
);
chatnets = {
@@ -50,6 +44,12 @@ chatnets = {
max_msgs = "3";
max_whois = "1";
};
+ Freenode = {
+ type = "IRC";
+ max_kicks = "1";
+ max_msgs = "4";
+ max_whois = "1";
+ };
Undernet = {
type = "IRC";
max_kicks = "1";
@@ -99,7 +99,6 @@ chatnets = {
max_whois = "30";
};
SILC = { type = "SILC"; };
- botnettest = { type = "IRC"; };
};
channels = (
@@ -146,7 +145,7 @@ aliases = {
GOTO = "sb goto";
CHAT = "dcc chat";
RUN = "SCRIPT LOAD";
- CALC = "exec - if which bc &>/dev/null\\; then echo '$*' | bc | awk '{print \"$*=\"$$1}'\\; else echo bc was not found\\; fi";
+ CALC = "exec - if command -v bc >/dev/null 2>&1\\; then printf '%s=' '$*'\\; echo '$*' | bc -l\\; else echo bc was not found\\; fi";
SBAR = "STATUSBAR";
INVITELIST = "mode $C +I";
Q = "QUERY";
@@ -155,19 +154,7 @@ aliases = {
ATAG = "WINDOW SERVER";
UNSET = "set -clear";
RESET = "set -default";
- s = "script";
- rltest = "/script unload history_search; /script load history_search.pl";
- DUMP = "script exec use Data::Dumper\\; print Data::Dumper->new([\\\\$0-])->Dump";
- funcs_for = "/dump [map *\\$_{NAME}, grep ref(\\$_) eq 'GLOB' && *\\$_{CODE} && *\\$_{PACKAGE} eq 'Irssi::UI::Window', values \\%Irssi::UI::Window::]";
- et = "/script unload expando_test.pl; /script load expando_test";
- se = "script exec";
- detach = "eval exec - screen -X detach";
- xxx = "/dump Irssi::bindings()";
- showbind = "/script exec \\%foo = Irssi::UI::bindings()\\; print \\$foo{\"\\\\$0\"}\\;";
- botaway = "/away auto-away [\002BX\002-MsgLog On] (Away since 1:43 am Mon Aug 24)";
- vim = "script load vim_mode.pl";
- unvim = "/script unload vim_mode";
- pl = "script load prompt_replace.pl";
+ "/vim" = "/script load vim_mode.pl";
};
statusbar = {
@@ -190,7 +177,7 @@ statusbar = {
# treated specially .. window is printed with non-empty windows,
# window_empty is printed with empty windows
- window = "{sb $winref:$tag/$itemname{sbmode $M_nopass}}";
+ window = "{sb $winref:$tag/$itemname{sbmode $M}}";
window_empty = "{sb $winref{sbservertag $tag}}";
prompt = "{prompt $[.15]itemname}";
prompt_empty = "{prompt $winname}";
@@ -267,51 +254,34 @@ statusbar = {
topicbarend = { priority = "100"; alignment = "right"; };
};
};
+ add = { };
prompt = {
items = {
- prompt = { };
- prompt_empty = { };
+ uberprompt = { priority = "-1"; };
input = { priority = "10"; };
};
position = "100";
};
- promptadd = { disabled = "yes"; };
};
};
settings = {
core = {
- real_name = "fjkdlafad";
+ real_name = "shabble";
user_name = "tomfeist";
nick = "tomfeist";
- timestamp_format = "%+";
};
- "fe-text" = { actlist_sort = "refnum"; indent = "1"; };
+ "fe-text" = { actlist_sort = "refnum"; };
"perl/core/scripts" = {
- autoinstall_custom_prompt = "yes";
- mass_hilight_action = "/echo $nick";
- mass_hilight_threshold = "0";
+ vim_mode_prompt_leading_space = "no";
vim_mode_debug = "yes";
- superprompt_format = "%K[%W$tag%c/%K$cumode%n$*%K]%n ";
- uberprompt_format = "[$*] ";
};
- "fe-common/core" = { bell_beeps = "yes"; };
- "irc/core" = { ctcp_userinfo_reply = ""; };
};
keyboard = (
+ { key = "^C"; id = "command"; data = "region_start "; },
{
- key = "meta-g";
+ key = "meta-q";
id = "command";
- data = "se print defined(Irssi::gui_input_set(\"hello\"))?1:0";
+ data = "script exec print Irssi::gui_input_get_pos()";
},
- { key = "meta-x"; id = "command"; data = "history_search "; },
- { key = "^Z"; id = "command"; data = "echo moo"; },
- { key = "^R"; id = "command"; data = "history_search_start "; },
- { key = "meta-h"; id = "command"; data = "echo moo /echo moo"; },
- { key = "meta-q"; id = "command"; data = "echo bacons"; },
- { key = "meta-c"; id = "command"; data = "echo moo ; /echo bar"; },
- { key = "meta-l"; id = "command"; data = "visual "; },
- { key = "meta-m"; id = "command"; data = "redraw "; },
- { key = "^V"; id = "command"; data = "visual "; },
- { key = "^F"; id = "command"; data = "visual toggle"; },
- { key = "^G"; id = "command"; data = "visual clear"; }
+ { key = "^R"; id = "command"; data = "history_search_start "; }
);