diff options
| -rw-r--r-- | vim-mode/vim_mode.pl | 35 | 
1 files changed, 31 insertions, 4 deletions
| diff --git a/vim-mode/vim_mode.pl b/vim-mode/vim_mode.pl index bad556e..4f071c4 100644 --- a/vim-mode/vim_mode.pl +++ b/vim-mode/vim_mode.pl @@ -487,6 +487,8 @@ my $commands_ex                      type => C_EX },       sprev       => { char => ':serverprev', func => \&ex_server_prev,                      type => C_EX }, +     exinsert    => { char => ':exins', func => \&ex_insert_str, +                    type => C_EX },      }; @@ -1621,6 +1623,18 @@ sub _fix_input_pos {  # EX MODE COMMANDS +sub ex_insert { +    my ($arg_str, $count) = @_; +    $count = defined $count ? $count : 1; +    print "EX-Inserting: $arg_str cnt: $count" if DEBUG; + +    push @ex_buf, split '', $arg_str; +    _set_prompt(':' . join '', @ex_buf); +    _update_mode(M_EX); + +    Irssi::statusbar_items_redraw("vim_windows"); + +}  sub cmd_ex_command {      my $arg_str = join '', @ex_buf; @@ -1937,8 +1951,8 @@ sub ex_map {          # Add new mapping.          my $command; -        # Ex-mode command -        if (index($rhs, ':') == 0) { + +        if (index($rhs, ':') == 0) { # Ex-mode command              $rhs =~ /^:(\S+)(\s.+)?$/;              if (not exists $commands_ex->{$1}) {                  return _warn_ex('map', "$rhs not found"); @@ -1948,8 +1962,21 @@ sub ex_map {                               type => C_EX,                             };              } -        # Irssi command -        } elsif (index($rhs, '/') == 0) { +        } elsif (index($rhs, '#') == 0) { # partial ex-mode command (insert) +            if ($rhs =~ /^#(.+)/) { +                my $parsed_rhs = _parse_mapping($1); +                $command = { +                    char => $parsed_rhs, +                    func => \&ex_insert, +                    type => C_EX, +                }; +            } else { +                _warn_ex('invalid partial ex-mode mapping ' . $rhs); +            } +        } elsif (index($rhs, '/') == 0) { # Irssi command +            # TODO: check for $cmdchars instead of just /? +            # except when it interferes with : for ex. +              $command = { char => $rhs,                           func => substr($rhs, 1),                           type => C_IRSSI, | 
