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:
parent
3e39278c24
commit
1c0ed3b498
2 changed files with 28 additions and 8 deletions
|
@ -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 $
|
||||
*****************************************************
|
||||
|
|
|
@ -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;
|
||||
|
|
Loading…
Reference in a new issue