diff options
| author | Simon Ruderich <simon@ruderich.org> | 2010-09-27 03:08:29 +0000 | 
|---|---|---|
| committer | Simon Ruderich <simon@ruderich.org> | 2010-09-27 03:08:29 +0000 | 
| commit | 27d7acd387ebb1f36cb6756c1a5dc2e88c1ce903 (patch) | |
| tree | 3f8e90ddbe1ddd03f33bc3377e87ae0f345c4d4f /vim-mode | |
| parent | vim_mode: Fix b and e not working between two words. (diff) | |
| download | irssi-scripts-27d7acd387ebb1f36cb6756c1a5dc2e88c1ce903.tar.gz irssi-scripts-27d7acd387ebb1f36cb6756c1a5dc2e88c1ce903.zip  | |
vim_mode: Add X.
Diffstat (limited to 'vim-mode')
| -rw-r--r-- | vim-mode/vim_mode.pl | 18 | 
1 files changed, 14 insertions, 4 deletions
diff --git a/vim-mode/vim_mode.pl b/vim-mode/vim_mode.pl index f2ea5fc..742e7b8 100644 --- a/vim-mode/vim_mode.pl +++ b/vim-mode/vim_mode.pl @@ -187,6 +187,7 @@ my $movements       '$' => { func => \&cmd_movement_dollar },       # delete chars       'x' => { func => \&cmd_movement_x }, +     'X' => { func => \&cmd_movement_X },       # insert mode       'i' => { func => \&cmd_movement_i },       'I' => { func => \&cmd_movement_I }, @@ -274,10 +275,10 @@ sub _get_pos_and_length {          $length *= -1;      } -    # w, x, h, l are the only movements which move one character after the +    # w, x, X, h, l are the only movements which move one character after the      # deletion area (which is what we need), all other commands need one      # character more for correct deletion. -    if ($move ne 'w' and $move ne 'x' and $move ne 'h' and $move ne 'l') { +    if ($move ne 'w' and $move ne 'x' and $move ne 'X' and $move ne 'h' and $move ne 'l') {          $length += 1;      } @@ -555,6 +556,15 @@ sub cmd_movement_x {      cmd_operator_d($pos, $pos + $count, 'x');  } +sub cmd_movement_X { +    my ($count, $pos) = @_; + +    return if $pos == 0; + +    my $new = $pos - $count; +    $new = 0 if $new < 0; +    cmd_operator_d($pos, $new, 'X'); +}  sub cmd_movement_i {      _update_mode(M_INS); @@ -929,8 +939,8 @@ sub handle_command {                  # Store command, necessary for . But ignore movements and                  # registers. -                if ($operator or $char eq 'x' or $char eq 'r' or -                                 $char eq 'p' or $char eq 'P' or +                if ($operator or $char eq 'x' or $char eq 'X' or $char eq 'r' +                              or $char eq 'p' or $char eq 'P' or                                   $char eq 'C' or $char eq 'D' or                                   $char eq '~' or $char eq '"') {                      $last->{char} = $char;  | 
