commit - c1fca1adb018ad47beb0abfe4c3dbfcc87c81ebd
commit + 2a373ea419dafeed391ae37d152f06625bdb7255
blob - b1e9e08e48f06affbee80e47d69d620189b60dac
blob + 20d00cb9374f344b74f5423c66f47b3711298394
--- src/cmd/acme/text.c
+++ src/cmd/acme/text.c
}
}
+void
+typecommit(Text *t)
+{
+ if(t->w != nil)
+ wincommit(t->w, t);
+ else
+ textcommit(t, TRUE);
+}
void
textfill(Text *t)
if(t->fr.lastlinefull || t->nofill)
return;
- if(t->ncache > 0){
- if(t->w != nil)
- wincommit(t->w, t);
- else
- textcommit(t, TRUE);
- }
+ if(t->ncache > 0)
+ typecommit(t);
rp = fbufalloc();
do{
n = t->file->b.nc-(t->org+t->fr.nchars);
switch(r){
case Kleft:
if(t->q0 > 0){
- if(t->w)
- wincommit(t->w, t);
- else
- textcommit(t, TRUE);
+ typecommit(t);
textshow(t, t->q0-1, t->q0-1, TRUE);
}
return;
case Kright:
if(t->q1 < t->file->b.nc){
- wincommit(t->w, t);
+ typecommit(t);
textshow(t, t->q1+1, t->q1+1, TRUE);
}
return;
textsetorigin(t, q0, TRUE);
return;
case Khome:
+ typecommit(t);
textshow(t, 0, 0, FALSE);
return;
case Kend:
- if(t->w)
- wincommit(t->w, t);
- else
- textcommit(t, TRUE);
+ typecommit(t);
textshow(t, t->file->b.nc, t->file->b.nc, FALSE);
return;
+ case 0x01: /* ^A: beginning of line */
+ typecommit(t);
+ /* go to where ^U would erase, if not already at BOL */
+ nnb = 0;
+ if(t->q0>0 && textreadc(t, t->q0-1)!='\n')
+ nnb = textbswidth(t, 0x15);
+ textshow(t, t->q0-nnb, t->q0-nnb, TRUE);
+ return;
+ case 0x05: /* ^E: end of line */
+ typecommit(t);
+ q0 = t->q0;
+ while(q0<t->file->b.nc && textreadc(t, q0)!='\n')
+ q0++;
+ textshow(t, q0, q0, TRUE);
+ return;
}
if(t->what == Body){
seq++;
blob - 336a65fe9d0bd5c6a2839189a728c9ece76ff313
blob + 66edbc803315d9829718b7774c40a85182b48d5b
--- src/cmd/acme/wind.c
+++ src/cmd/acme/wind.c
//assert(w->body.w == w);
if(clone){
w->dirty = clone->dirty;
+ w->autoindent = clone->autoindent;
textsetselect(&w->body, clone->body.q0, clone->body.q1);
winsettag(w);
- w->autoindent = clone->autoindent;
}
}