diff options
| -rw-r--r-- | vim-mode/vim_mode.pl | 24 | 
1 files changed, 23 insertions, 1 deletions
| diff --git a/vim-mode/vim_mode.pl b/vim-mode/vim_mode.pl index bc56f09..46c256c 100644 --- a/vim-mode/vim_mode.pl +++ b/vim-mode/vim_mode.pl @@ -600,6 +600,11 @@ my $history_pos = 0;  my @undo_buffer;  my $undo_index = undef; + +my @tab_candidates; +my $completion_active = 0; +my $completion_string = ''; +  sub script_is_loaded {      my $name = shift;      print "Checking if $name is loaded" if DEBUG; @@ -1219,7 +1224,7 @@ sub cmd__a {                         "^($word+\\s+|$non_word+\\s+)",                         $pos, 1); -                    if ($new_pos != -1 and  +                    if ($new_pos != -1 and                          (not defined $cur_pos or                           $cur_pos > $new_pos + 1)) { @@ -2731,6 +2736,11 @@ sub handle_command_ex {          cmd_ex_command();          _update_mode(M_CMD); +    } elsif ($key == 9) { # TAB +        print "Tab pressed" if DEBUG; +        print "Ex buf contains: " . join('', @ex_buf) if DEBUG; +        @tab_candidates = _tab_complete(join('', @ex_buf), [keys %$commands_ex]); +      # Ignore control characters for now.      } elsif ($key < 32) {          # TODO: use them later, e.g. completion @@ -2746,6 +2756,18 @@ sub handle_command_ex {      _stop();  } +sub _tab_complete { +    my ($input, $source) = @_; +    my @out; +    foreach my $item (@$source) { +        if ($item =~ m/^\Q$input\E/) { +            push @out, $item; +        } +    } + +    return sort { $a cmp $b } @out; +} +  sub vim_mode_init {      Irssi::signal_add_first 'gui key pressed' => \&got_key;      Irssi::signal_add 'setup changed' => \&setup_changed; | 
