diff options
Diffstat (limited to '')
| -rw-r--r-- | vim-mode/vim_mode.pl | 17 | 
1 files changed, 14 insertions, 3 deletions
| diff --git a/vim-mode/vim_mode.pl b/vim-mode/vim_mode.pl index e247e35..d04324e 100644 --- a/vim-mode/vim_mode.pl +++ b/vim-mode/vim_mode.pl @@ -538,6 +538,8 @@ my $settings       ex_history_size => { type => S_INT, value => 100 },       # prompt_leading_space       prompt_leading_space => { type => S_BOOL, value => 1 }, +     # <Leader> value for prepending to commands. +     map_leader     => { type => S_STR,  value => '\\' },      };  sub DEBUG { $settings->{debug}->{value} } @@ -2040,6 +2042,7 @@ sub _parse_mapping {      my ($string) = @_;      $string =~ s/<([^>]+)>/_parse_mapping_bracket($1)/ge; +    _warn("Parse mapping: $string");      if (index($string, '<invalid>') != -1) {          return undef;      } @@ -2065,6 +2068,8 @@ sub _parse_mapping_bracket {      # <BS>      } elsif ($string eq 'bs') {          $string = chr(127); +    } elsif ($string eq 'leader') { +        $string = $settings->{map_leader}->{value};      # Invalid char, return special string to recognize the error.      } else {          $string = '<invalid>'; @@ -2074,6 +2079,9 @@ sub _parse_mapping_bracket {  sub _parse_mapping_reverse {      my ($string) = @_; +    my $escaped_leader = quotemeta($settings->{map_leader}->{value}); +    $string =~ s/$escaped_leader/<Leader>/g; +      # Convert char to <char-name>.      $string =~ s/ /<Space>/g;      $string =~ s/\n/<CR>/g; @@ -2088,6 +2096,9 @@ sub _parse_mapping_reverse {  sub _parse_partial_command_reverse {      my ($string) = @_; +    my $escaped_leader = quotemeta($settings->{map_leader}->{value}); +    $string =~ s/$escaped_leader/<Leader>/g; +      # Convert Ctrl-X to ^X.      $string =~ s/([\x01-\x1A])/"^" . chr(ord($1) + 64)/ge;      # Convert Ctrl-6 and Ctrl-^ to <C-^>. @@ -2327,8 +2338,8 @@ sub got_key {          $input_buf_timer            = Irssi::timeout_add_once(10, \&handle_input_buffer, undef);          print "Buffer Timer tag: $input_buf_timer" if DEBUG; -    } elsif ($mode == M_INS) { -        if ($key == 3) { # Ctrl-C enter command mode +    } elsif ($mode == M_INS or $mode == M_EX) { +        if ($key == 3) { # Ctrl-C enters command mode, or cancels ex mode.              _update_mode(M_CMD);              _stop();              return; @@ -3032,7 +3043,7 @@ sub delete_map {      }      push @add, $keys; -    # Restore default keybindings in case we :unmaped a <Nop> or a remapped +    # Restore default keybindings in case we :unmapped a <Nop> or a remapped      # key.      foreach my $key (@add) {          if (exists $commands->{$key}) { | 
