diff options
| author | Tom Feist <shabble@metavore.org> | 2010-11-05 00:47:14 +0000 | 
|---|---|---|
| committer | Tom Feist <shabble@metavore.org> | 2010-11-05 00:47:14 +0000 | 
| commit | 1297ea571d444d38a1dafe6e21978516831cdcf6 (patch) | |
| tree | eebaf63dc15f9373bcacb58941eaf8691bab92a7 | |
| parent | vim_mode: added a setting for 'prompt_leading_space' to determine whether the (diff) | |
| download | irssi-scripts-1297ea571d444d38a1dafe6e21978516831cdcf6.tar.gz irssi-scripts-1297ea571d444d38a1dafe6e21978516831cdcf6.zip | |
added some feature tests for format expansion
| -rw-r--r-- | feature-tests/format-test.pl | 26 | ||||
| -rw-r--r-- | feature-tests/template.pl | 15 | ||||
| -rw-r--r-- | prompt_info/input_overlay.pl | 151 | ||||
| -rw-r--r-- | test/irssi/config | 74 | 
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', \®ion_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 "; }  ); | 
