tmonth old bug fix from rob - plan9port - [fork] Plan 9 from user space
(HTM) git clone git://src.adamsgaard.dk/plan9port
(DIR) Log
(DIR) Files
(DIR) Refs
(DIR) README
(DIR) LICENSE
---
(DIR) commit 2a373ea419dafeed391ae37d152f06625bdb7255
(DIR) parent c1fca1adb018ad47beb0abfe4c3dbfcc87c81ebd
(HTM) Author: rsc <devnull@localhost>
Date: Fri, 18 Mar 2005 18:05:48 +0000
month old bug fix from rob
Diffstat:
M src/cmd/acme/text.c | 44 ++++++++++++++++++++-----------
M src/cmd/acme/wind.c | 2 +-
2 files changed, 30 insertions(+), 16 deletions(-)
---
(DIR) diff --git a/src/cmd/acme/text.c b/src/cmd/acme/text.c
t@@ -386,6 +386,14 @@ textinsert(Text *t, uint q0, Rune *r, uint n, int tofile)
}
}
+void
+typecommit(Text *t)
+{
+ if(t->w != nil)
+ wincommit(t->w, t);
+ else
+ textcommit(t, TRUE);
+}
void
textfill(Text *t)
t@@ -395,12 +403,8 @@ 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);
t@@ -649,16 +653,13 @@ texttype(Text *t, Rune r)
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;
t@@ -689,15 +690,28 @@ texttype(Text *t, Rune r)
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++;
(DIR) diff --git a/src/cmd/acme/wind.c b/src/cmd/acme/wind.c
t@@ -80,9 +80,9 @@ wininit(Window *w, Window *clone, Rectangle r)
//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;
}
}