diff options
Diffstat (limited to 'feature-tests')
| -rw-r--r-- | feature-tests/bindings.pl | 75 | 
1 files changed, 56 insertions, 19 deletions
| diff --git a/feature-tests/bindings.pl b/feature-tests/bindings.pl index 006eaf1..ece220d 100644 --- a/feature-tests/bindings.pl +++ b/feature-tests/bindings.pl @@ -23,11 +23,39 @@ our %IRSSI = (  my $keymap; +sub STATE_HEADER () { 0 } +sub STATE_BODY   () { 1 } +sub STATE_END    () { 2 } +my $parse_state = STATE_HEADER; + +my $binding_formats = {}; +  init();  sub init { -    update_keymap(); + +    $keymap = {}; +      Irssi::command_bind('showbinds', 'cmd_showbinds'); +	Irssi::signal_add('command bind' => 'watch_keymap'); + +    $binding_formats = get_binding_formats(); + +    capture_bind_data(); +} + +sub get_binding_formats { +    my $theme = Irssi::current_theme(); +    my @keys = qw/bind_header bind_list bind_command_list +                  bind_footer bind_unknown_id/; + +    my $ret = {}; +    foreach my $key (@keys) { +        my $tmp = $theme->get_format('fe-common/core', $key); +        #$tmp =~ s/%/%%/g; # escape colour codes? +        $ret->{$key} = $tmp; +    } +    return $ret;  }  sub cmd_showbinds { @@ -42,35 +70,44 @@ sub cmd_showbinds {      $win->print("Done showing window bindings:", Irssi::MSGLEVEL_CLIENTCRAP);  } -sub get_keymap { + +sub sig_print_text {  	my ($text_dest, $str, $str_stripped) = @_; -	if ($text_dest->{level} == Irssi::MSGLEVEL_CLIENTCRAP and $text_dest->{target} eq '') { -        if (not defined($text_dest->{'server'})) { -            if ($str_stripped =~ m/((?:meta-)+)(.)\s+change_window (\d+)/) { -                my ($level, $key, $window) = ($1, $2, $3); -                #my $numlevel = ($level =~ y/-//) - 1; -                my $kk = $level . $key; -                $keymap->{$kk} = $window; -            } -            Irssi::signal_stop(); -        } +    return unless $text_dest->{level} == Irssi::MSGLEVEL_CLIENTCRAP; +    return unless $text_dest->{target} eq ''; +    return unless not defined $text_dest->{server}; + +    # if ($parse_state = STATE_HEADER) { +    #     if ($str =~ m/\Q$binding_formats->{bind_header}\E/) { +    #         $parse_state = STATE_BODY; +    #     } +    # } elsif ($parse_state = STATE_BODY) { +    print "Data is: $str_stripped"; +    if ($str_stripped =~ m/^.*?(\S{,20})\s+(\S+)\s+(\S+)/) { +        $keymap->{$1} = "$2, $3"; +        print "Parsed $1 as $2, $3";      } +    Irssi::signal_stop(); +    #     } elsif ($str =~ m/$binding_formats->{bind_footer}\E/) { +    #         $parse_state = STATE_END; +    #     } +    # }  } -sub update_keymap { -	$keymap = {}; + +sub capture_bind_data {  	Irssi::signal_remove('command bind' => 'watch_keymap'); -	Irssi::signal_add_first('print text' => 'get_keymap'); +	Irssi::signal_add_first('print text' => 'sig_print_text');  	Irssi::command('bind'); # stolen from grep -	Irssi::signal_remove('print text' => 'get_keymap'); -	Irssi::signal_add('command bind' => 'watch_keymap'); -	#Irssi::timeout_add_once(100, 'eventChanged', undef); +	Irssi::signal_remove('print text' => 'sig_print_text'); +  } +  # watch keymap changes  sub watch_keymap { -	Irssi::timeout_add_once(1000, 'update_keymap', undef); +	Irssi::timeout_add_once(1000, 'capture_bind_data', undef);  } | 
