1
0
Fork 0
mirror of git://git.code.sf.net/p/zsh/code synced 2025-09-10 12:40:58 +02:00

Aaron Scrab: 30604: make repeating vi skip character useful by ignoring

character just matched
This commit is contained in:
Peter Stephenson 2012-08-13 08:47:13 +00:00
parent 3e39278c24
commit 1c0ed3b498
2 changed files with 28 additions and 8 deletions

View file

@ -1,5 +1,8 @@
2012-08-13 Peter Stephenson <pws@csr.com> 2012-08-13 Peter Stephenson <pws@csr.com>
* Aaron Schrab: 30604: Src/Zle/zle_move.c: make repeating vi skip
character useful by ignoring character just matched.
* Aaron Schrab: 30603: Src/Zle/zle_move.c: repeating vi skip * Aaron Schrab: 30603: Src/Zle/zle_move.c: repeating vi skip
characters commands caused bad positioning. characters commands caused bad positioning.
@ -16482,5 +16485,5 @@
***************************************************** *****************************************************
* This is used by the shell to define $ZSH_PATCHLEVEL * This is used by the shell to define $ZSH_PATCHLEVEL
* $Revision: 1.5687 $ * $Revision: 1.5688 $
***************************************************** *****************************************************

View file

@ -679,7 +679,7 @@ vifindnextchar(char **args)
if ((vfindchar = vigetkey()) != ZLEEOF) { if ((vfindchar = vigetkey()) != ZLEEOF) {
vfinddir = 1; vfinddir = 1;
tailadd = 0; tailadd = 0;
return virepeatfind(args); return vifindchar(0, args);
} }
return 1; return 1;
} }
@ -691,7 +691,7 @@ vifindprevchar(char **args)
if ((vfindchar = vigetkey()) != ZLEEOF) { if ((vfindchar = vigetkey()) != ZLEEOF) {
vfinddir = -1; vfinddir = -1;
tailadd = 0; tailadd = 0;
return virepeatfind(args); return vifindchar(0, args);
} }
return 1; return 1;
} }
@ -703,7 +703,7 @@ vifindnextcharskip(char **args)
if ((vfindchar = vigetkey()) != ZLEEOF) { if ((vfindchar = vigetkey()) != ZLEEOF) {
vfinddir = 1; vfinddir = 1;
tailadd = -1; tailadd = -1;
return virepeatfind(args); return vifindchar(0, args);
} }
return 1; return 1;
} }
@ -715,14 +715,14 @@ vifindprevcharskip(char **args)
if ((vfindchar = vigetkey()) != ZLEEOF) { if ((vfindchar = vigetkey()) != ZLEEOF) {
vfinddir = -1; vfinddir = -1;
tailadd = 1; tailadd = 1;
return virepeatfind(args); return vifindchar(0, args);
} }
return 1; return 1;
} }
/**/ /**/
int int
virepeatfind(char **args) vifindchar(int repeat, char **args)
{ {
int ocs = zlecs, n = zmult; int ocs = zlecs, n = zmult;
@ -735,6 +735,16 @@ virepeatfind(char **args)
zmult = n; zmult = n;
return ret; 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--) { while (n--) {
do { do {
if (vfinddir > 0) if (vfinddir > 0)
@ -758,6 +768,13 @@ virepeatfind(char **args)
return 0; return 0;
} }
/**/
int
virepeatfind(char **args)
{
return vifindchar(1, args);
}
/**/ /**/
int int
virevrepeatfind(char **args) virevrepeatfind(char **args)
@ -766,13 +783,13 @@ virevrepeatfind(char **args)
if (zmult < 0) { if (zmult < 0) {
zmult = -zmult; zmult = -zmult;
ret = virepeatfind(args); ret = vifindchar(1, args);
zmult = -zmult; zmult = -zmult;
return ret; return ret;
} }
tailadd = -tailadd; tailadd = -tailadd;
vfinddir = -vfinddir; vfinddir = -vfinddir;
ret = virepeatfind(args); ret = vifindchar(1, args);
vfinddir = -vfinddir; vfinddir = -vfinddir;
tailadd = -tailadd; tailadd = -tailadd;
return ret; return ret;