On Fri Feb 12 11:49:37 EST 2010, r...@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

Reply via email to