attempt at \r

This commit is contained in:
rsc 2005-11-10 22:53:38 +00:00
parent 69555c0e28
commit f535642f30

View file

@ -190,7 +190,7 @@ wclose(Window *w)
void void
winctl(void *arg) winctl(void *arg)
{ {
Rune *rp, *bp, *tp, *up, *kbdr; Rune *rp, *bp, *up, *kbdr;
uint qh; uint qh;
int nr, nb, c, wid, i, npart, initial, lastb; int nr, nb, c, wid, i, npart, initial, lastb;
char *s, *t, part[3]; char *s, *t, part[3];
@ -328,37 +328,48 @@ winctl(void *arg)
recv(cwm.cw, &pair); recv(cwm.cw, &pair);
rp = pair.s; rp = pair.s;
nr = pair.ns; nr = pair.ns;
bp = rp; up = bp = rp;
for(i=0; i<nr; i++) initial = 0;
if(*bp++ == '\b'){ for(i=0; i<nr; i++){
--bp; switch(*bp){
initial = 0; case 0:
tp = runemalloc(nr); break;
runemove(tp, rp, i); case '\b':
up = tp+i; if(up == rp)
for(; i<nr; i++){ initial++;
*up = *bp++; else
if(*up == '\b') --up;
if(up == tp) break;
initial++; /*
else case '\r':
--up; while(i<nr-1 && *(bp+1) == '\r'){
else bp++;
up++; i++;
} }
if(initial){ if(i<nr-1 && *(bp+1) != '\n'){
if(initial > w->qh) while(up > rp && *(up-1) != '\n')
initial = w->qh; up--;
qh = w->qh-initial; if(up == rp)
wdelete(w, qh, qh+initial); initial = wbswidth(w, 0x15);
w->qh = qh; }else if(i == nr-1)
} *up = '\n';
free(rp); break;
rp = tp; */
nr = up-tp; default:
rp[nr] = 0; *up++ = *bp;
break; break;
} }
bp++;
}
if(initial){
if(initial > w->qh)
initial = w->qh;
qh = w->qh - initial;
wdelete(w, qh, qh+initial);
w->qh = qh;
}
nr = rp - up;
rp[nr] = 0;
w->qh = winsert(w, rp, nr, w->qh)+nr; w->qh = winsert(w, rp, nr, w->qh)+nr;
if(w->scrolling || w->mouseopen) if(w->scrolling || w->mouseopen)
wshow(w, w->qh); wshow(w, w->qh);