diff options
author | Peter Stephenson <pws@users.sourceforge.net> | 2012-08-13 08:47:13 +0000 |
---|---|---|
committer | Peter Stephenson <pws@users.sourceforge.net> | 2012-08-13 08:47:13 +0000 |
commit | 1c0ed3b49837ec6589f46656e3b2595ae93feab4 (patch) | |
tree | 395d63221cec9126e9adcbe200cc81782af4046e /Src | |
parent | 3e39278c24ff7b5cd686af9b219178e94d9228ad (diff) | |
download | zsh-1c0ed3b49837ec6589f46656e3b2595ae93feab4.tar.gz zsh-1c0ed3b49837ec6589f46656e3b2595ae93feab4.tar.xz zsh-1c0ed3b49837ec6589f46656e3b2595ae93feab4.zip |
Aaron Scrab: 30604: make repeating vi skip character useful by ignoring
character just matched
Diffstat (limited to 'Src')
-rw-r--r-- | Src/Zle/zle_move.c | 31 |
1 files changed, 24 insertions, 7 deletions
diff --git a/Src/Zle/zle_move.c b/Src/Zle/zle_move.c index 284a86389..d5f464c2c 100644 --- a/Src/Zle/zle_move.c +++ b/Src/Zle/zle_move.c @@ -679,7 +679,7 @@ vifindnextchar(char **args) if ((vfindchar = vigetkey()) != ZLEEOF) { vfinddir = 1; tailadd = 0; - return virepeatfind(args); + return vifindchar(0, args); } return 1; } @@ -691,7 +691,7 @@ vifindprevchar(char **args) if ((vfindchar = vigetkey()) != ZLEEOF) { vfinddir = -1; tailadd = 0; - return virepeatfind(args); + return vifindchar(0, args); } return 1; } @@ -703,7 +703,7 @@ vifindnextcharskip(char **args) if ((vfindchar = vigetkey()) != ZLEEOF) { vfinddir = 1; tailadd = -1; - return virepeatfind(args); + return vifindchar(0, args); } return 1; } @@ -715,14 +715,14 @@ vifindprevcharskip(char **args) if ((vfindchar = vigetkey()) != ZLEEOF) { vfinddir = -1; tailadd = 1; - return virepeatfind(args); + return vifindchar(0, args); } return 1; } /**/ int -virepeatfind(char **args) +vifindchar(int repeat, char **args) { int ocs = zlecs, n = zmult; @@ -735,6 +735,16 @@ virepeatfind(char **args) zmult = n; return ret; } + if (repeat && tailadd != 0) { + if (vfinddir > 0) { + if(zlecs < zlell && (ZLE_INT_T)zleline[zlecs+1] == vfindchar) + INCCS(); + } + else { + if(zlecs > 0 && (ZLE_INT_T)zleline[zlecs-1] == vfindchar) + DECCS(); + } + } while (n--) { do { if (vfinddir > 0) @@ -760,19 +770,26 @@ virepeatfind(char **args) /**/ int +virepeatfind(char **args) +{ + return vifindchar(1, args); +} + +/**/ +int virevrepeatfind(char **args) { int ret; if (zmult < 0) { zmult = -zmult; - ret = virepeatfind(args); + ret = vifindchar(1, args); zmult = -zmult; return ret; } tailadd = -tailadd; vfinddir = -vfinddir; - ret = virepeatfind(args); + ret = vifindchar(1, args); vfinddir = -vfinddir; tailadd = -tailadd; return ret; |