1
0
Fork 0
mirror of git://git.code.sf.net/p/zsh/code synced 2025-09-03 10:21:46 +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>
* 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
characters commands caused bad positioning.
@ -16482,5 +16485,5 @@
*****************************************************
* 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) {
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)
@ -758,6 +768,13 @@ virepeatfind(char **args)
return 0;
}
/**/
int
virepeatfind(char **args)
{
return vifindchar(1, args);
}
/**/
int
virevrepeatfind(char **args)
@ -766,13 +783,13 @@ virevrepeatfind(char **args)
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;