Changeset 3e36085


Ignore:
Timestamp:
Jul 11, 2009, 1:14:35 PM (15 years ago)
Author:
Nelson Elhage <nelhage@mit.edu>
Branches:
master, release-1.10, release-1.4, release-1.5, release-1.6, release-1.7, release-1.8, release-1.9
Children:
77f605d
Parents:
fc2677b
git-author:
Karl Ramm <kcr@1ts.org> (06/15/09 04:33:20)
git-committer:
Nelson Elhage <nelhage@mit.edu> (07/11/09 13:14:35)
Message:
Support echochar in the redisplay code.
File:
1 edited

Legend:

Unmodified
Added
Removed
  • editwin.c

    rfc2677b r3e36085  
    486486}
    487487
     488static void oe_addnec(owl_editwin *e, int count)
     489{
     490  int i;
     491
     492  for (i = 0; i < count; i++)
     493    waddch(e->curswin, e->echochar);
     494}
     495
     496static void oe_mvaddnec(owl_editwin *e, int y, int x, int count)
     497{
     498  wmove(e->curswin, y, x);
     499  oe_addnec(e, count);
     500}
     501
    488502/* regenerate the text on the curses window */
    489503/* if update == 1 then do a doupdate(), otherwise do not */
     
    507521      if (x == -1 && t != -1)
    508522        x = t, y = line;
    509       if (index - lineindex)
    510         mvwaddnstr(e->curswin, line, 0,
    511                    e->buff + lineindex,
    512                    index - lineindex);
     523      if (index - lineindex) {
     524        if (!e->echochar)
     525          mvwaddnstr(e->curswin, line, 0,
     526                     e->buff + lineindex,
     527                     index - lineindex);
     528        else {
     529          if(lineindex < e->lock) {
     530            mvwaddnstr(e->curswin, line, 0,
     531                       e->buff + lineindex,
     532                       MIN(index - lineindex,
     533                           e->lock - lineindex));
     534            if (e->lock < index)
     535              oe_addnec(e,
     536                        oe_region_width(e, e->lock, index,
     537                                        oe_region_width(e, lineindex, e->lock, 0)));
     538          } else
     539            oe_mvaddnec(e, line, 0, oe_region_width(e, line, index, 0));
     540        }
     541      }
    513542      line++;
    514543    }
     
    576605
    577606  /* fix up the mark */
    578   if (e->mark != -1)
    579     oe_fixup(&e->mark, start, end, change);
     607  oe_fixup(&e->mark, start, end, change);
     608  oe_fixup(&e->topindex, start, end, change);
    580609  /* fix up any saved points after the replaced area */
    581610  for (x = e->excursions; x != NULL; x = x->next) {
    582611    oe_fixup(&x->index, start, end, change);
    583     if (x->mark != -1)
    584       oe_fixup(&x->mark, start, end, change);
     612    oe_fixup(&x->mark, start, end, change);
    585613  }
    586614
     
    11451173}
    11461174
    1147 static int oe_region_width(owl_editwin *e, int start, int end, int width)
     1175static int oe_region_width(owl_editwin *e, int start, int end, int offset)
    11481176{
    11491177  char *p;
     1178  int width = offset;
     1179 
    11501180  for(p = e->buff + start;
    11511181      p < e->buff + end;
     
    11531183    width += oe_char_width(g_utf8_get_char(p), width);
    11541184
    1155   return width;
     1185  return width - offset;
    11561186}
    11571187
Note: See TracChangeset for help on using the changeset viewer.