1
0
Fork 0
mirror of git://git.code.sf.net/p/zsh/code synced 2025-10-25 17:20:25 +02:00

24915: some more fix-ups for combining characters

This commit is contained in:
Peter Stephenson 2008-05-04 18:30:02 +00:00
parent a9ad660bd3
commit 1424e923b1
5 changed files with 84 additions and 29 deletions

View file

@ -1,3 +1,9 @@
2008-05-04 Peter Stephenson <p.w.stephenson@ntlworld.com>
* 24915: Src/Zle/zle_hist.c, Src/Zle/zle_misc.c,
Src/Zle/zle_move.c: Src/Zle/zle_vi.c: some more fix-ups for
combining characters.
2008-05-02 Peter Stephenson <p.w.stephenson@ntlworld.com>
* users/12815: Src/jobs.c, Src/signals.c, Src/zsh.h:

View file

@ -247,6 +247,11 @@ upline(void)
if (zlecs > findbol() && invicmdmode())
DECCS();
}
#ifdef MULTIBYTE_SUPPORT
else
CCRIGHT();
#endif
}
return n;
}
@ -331,6 +336,10 @@ downline(void)
if (zlecs > findbol() && invicmdmode())
DECCS();
}
#ifdef MULTIBYTE_SUPPORT
else
CCRIGHT();
#endif
}
return n;
}

View file

@ -801,10 +801,20 @@ copyprevword(UNUSED(char **args))
for (;;) {
t1 = t0;
while (t0 && !ZC_iword(zleline[t0-1]))
t0--;
while (t0 && ZC_iword(zleline[t0-1]))
t0--;
while (t0) {
int prev = t0;
DECPOS(prev);
if (ZC_iword(zleline[prev]))
break;
t0 = prev;
}
while (t0) {
int prev = t0;
DECPOS(prev);
if (!ZC_iword(zleline[prev]))
break;
t0 = prev;
}
if (!--count)
break;

View file

@ -307,11 +307,19 @@ beginningofline(char **args)
return ret;
}
while (n--) {
int pos;
if (zlecs == 0)
return 0;
if (zleline[zlecs - 1] == '\n')
if (!--zlecs)
pos = zlecs;
DECPOS(pos);
if (zleline[pos] == '\n') {
zlecs = pos;
if (!zlecs)
return 0;
}
/* works OK with combining chars since '\n' must be on its own */
while (zlecs && zleline[zlecs - 1] != '\n')
zlecs--;
}
@ -359,11 +367,19 @@ beginningoflinehist(char **args)
return ret;
}
while (n) {
int pos;
if (zlecs == 0)
break;
if (zleline[zlecs - 1] == '\n')
if (!--zlecs)
pos = zlecs;
DECPOS(pos);
if (zleline[pos] == '\n') {
zlecs = pos;
if (!pos)
break;
}
/* works OK with combining chars since '\n' must be on its own */
while (zlecs && zleline[zlecs - 1] != '\n')
zlecs--;
n--;
@ -554,12 +570,15 @@ vimatchbracket(UNUSED(char **args))
oth = '[';
break;
default:
zlecs++;
INCCS();
goto otog;
}
ct = 1;
while (zlecs >= 0 && zlecs < zlell && ct) {
zlecs += dir;
if (dir < 0)
DECCS();
else
INCCS();
if (zleline[zlecs] == oth)
ct--;
else if (zleline[zlecs] == me)
@ -634,7 +653,7 @@ viendofline(UNUSED(char **args))
}
zlecs = findeol() + 1;
}
zlecs--;
DECCS();
lastcol = 1<<30;
return 0;
}

View file

@ -262,7 +262,7 @@ dovilinerange(void)
zlecs = pos;
return 1;
}
zlecs--;
DECCS();
} else {
while(n++ && zlecs >= 0)
zlecs = findbol() - 1;
@ -270,7 +270,7 @@ dovilinerange(void)
zlecs = pos;
return 1;
}
zlecs++;
INCCS();
}
virangeflag = 2;
return 0;
@ -281,7 +281,7 @@ int
viaddnext(UNUSED(char **args))
{
if (zlecs != findeol())
zlecs++;
INCCS();
startvitext(1);
return 0;
}
@ -776,7 +776,7 @@ viputbefore(UNUSED(char **args))
zlecs += buf->len;
}
if (zlecs)
zlecs--;
DECCS();
}
return 0;
}
@ -819,20 +819,27 @@ viputafter(UNUSED(char **args))
int
vijoin(UNUSED(char **args))
{
int x;
int x, pos;
startvichange(-1);
if ((x = findeol()) == zlell)
return 1;
zlecs = x + 1;
for (x = 1; zlecs != zlell && ZC_iblank(zleline[zlecs]); zlecs++, x++);
pos = zlecs;
for (; zlecs != zlell && ZC_iblank(zleline[zlecs]); INCPOS(zlecs))
;
x = 1 + (zlecs - pos);
backdel(x, CUT_RAW);
if (zlecs && ZC_iblank(zleline[zlecs-1]))
zlecs--;
else {
if (zlecs) {
int pos = zlecs;
DECPOS(pos);
if (ZC_iblank(zleline[pos])) {
zlecs = pos;
return 0;
}
}
spaceinline(1);
zleline[zlecs] = ZWC(' ');
}
return 0;
}
@ -851,10 +858,10 @@ viswapcase(UNUSED(char **args))
zleline[zlecs] = ZC_toupper(zleline[zlecs]);
else if (ZC_iupper(zleline[zlecs]))
zleline[zlecs] = ZC_tolower(zleline[zlecs]);
zlecs++;
INCCS();
}
if (zlecs && zlecs == eol)
zlecs--;
DECCS();
return 0;
}
@ -909,7 +916,7 @@ vikilleol(UNUSED(char **args))
return 1;
}
/* delete to end of line */
forekill(findeol() - zlecs, 0);
forekill(findeol() - zlecs, CUT_RAW);
return 0;
}
@ -925,13 +932,17 @@ vipoundinsert(UNUSED(char **args))
spaceinline(1);
zleline[zlecs] = '#';
if(zlecs <= viinsbegin)
viinsbegin++;
zlecs = oldcs + (zlecs <= oldcs);
INCPOS(viinsbegin);
if (zlecs <= oldcs)
INCPOS(oldcs);
zlecs = oldcs;
} else {
foredel(1, 0);
if (zlecs < viinsbegin)
viinsbegin--;
zlecs = oldcs - (zlecs < oldcs);
DECPOS(viinsbegin);
if (zlecs < oldcs)
DECPOS(oldcs);
zlecs = oldcs;
}
return 0;
}