From mboxrd@z Thu Jan 1 00:00:00 1970 From: erik quanstrom Date: Thu, 4 Mar 2010 10:59:47 -0500 To: 9fans@9fans.net Message-ID: In-Reply-To: References: MIME-Version: 1.0 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: 8bit Subject: Re: [9fans] acme line wrap bug Topicbox-Message-UUID: e009a1b4-ead5-11e9-9d60-3106f5b1d025 On Fri Feb 12 11:49:37 EST 2010, rsc@swtch.com wrote: > > acme doesn't always clear the right margin to compensate for > > the different amount of right-margin slop due to different > > character widths.  in this case ">" is very wide and won't fit > > in the space that "n" did.  so the n is mistakenly shown where > > it shouldn't be. > > > > between the two pngs, the text "has gone" was cut. > > long time bug. patch? this has been effective for me: ; diff -c /n/dump/2010/0212/sys/src/libframe/frdelete.c frdelete.c /n/dump/2010/0212/sys/src/libframe/frdelete.c:10,16 - frdelete.c:10,16 { Point pt0, pt1, ppt0; Frbox *b; - int n0, n1, n; + int n0, n1, n, w0; ulong cn1; Rectangle r; int nn0; /n/dump/2010/0212/sys/src/libframe/frdelete.c:53,58 - frdelete.c:53,59 r.max = pt0; r.max.y += f->font->height; if(b->nrune > 0){ + w0 = b->wid; if(n != b->nrune){ _frsplitbox(f, n1, n); b = &f->box[n1]; /n/dump/2010/0212/sys/src/libframe/frdelete.c:60,65 - frdelete.c:61,74 r.max.x += b->wid; draw(f->b, r, f->b, nil, pt1); cn1 += b->nrune; + + /* blank remainder of line */ + r.min.x = r.max.x; + r.max.x += w0 - b->wid; + if(r.max.x > f->r.max.x) + r.max.x = f->r.max.x; + if(r.max.x != r.min.x) + draw(f->b, r, f->cols[BACK], nil, r.min); }else{ r.max.x += _frnewwid0(f, pt0, b); if(r.max.x > f->r.max.x) - erik