vi: reduce amount of memset'ing on each screen refresh
This commit is contained in:
parent
e3cbfb91d2
commit
4baed3a080
22
editors/vi.c
22
editors/vi.c
@ -2516,9 +2516,9 @@ static void place_cursor(int row, int col, int optimize)
|
||||
}
|
||||
skip: ;
|
||||
}
|
||||
last_row = row;
|
||||
#endif /* FEATURE_VI_OPTIMIZE_CURSOR */
|
||||
write1(cm);
|
||||
last_row = row;
|
||||
}
|
||||
|
||||
//----- Erase from cursor to end of line -----------------------
|
||||
@ -2762,10 +2762,9 @@ static char* format_line(char *src, int li)
|
||||
int ofs = offset;
|
||||
char *dest = scr_out_buf; // [MAX_SCR_COLS + MAX_TABSTOP * 2]
|
||||
|
||||
memset(dest, ' ', MAX_SCR_COLS + MAX_TABSTOP * 2);
|
||||
|
||||
c = '~'; // char in col 0 in non-existent lines is '~'
|
||||
for (co = 0; co < columns + MAX_TABSTOP; co++) {
|
||||
co = 0;
|
||||
while (co < columns + tabstop) {
|
||||
// have we gone past the end?
|
||||
if (src < end) {
|
||||
c = *src++;
|
||||
@ -2790,11 +2789,11 @@ static char* format_line(char *src, int li)
|
||||
}
|
||||
}
|
||||
}
|
||||
dest[co] = c;
|
||||
dest[co++] = c;
|
||||
// discard scrolled-off-to-the-left portion,
|
||||
// in tabstop-sized pieces
|
||||
if (ofs >= tabstop && co >= tabstop) {
|
||||
memmove(dest, dest + tabstop, co + 1);
|
||||
memmove(dest, dest + tabstop, co);
|
||||
co -= tabstop;
|
||||
ofs -= tabstop;
|
||||
}
|
||||
@ -2803,9 +2802,14 @@ static char* format_line(char *src, int li)
|
||||
}
|
||||
// check "short line, gigantic offset" case
|
||||
if (co < ofs)
|
||||
ofs = co + 1;
|
||||
dest[ofs + MAX_SCR_COLS] = '\0';
|
||||
return &dest[ofs];
|
||||
ofs = co;
|
||||
// discard last scrolled off part
|
||||
co -= ofs;
|
||||
dest += ofs;
|
||||
// fill the rest with spaces
|
||||
if (co < columns)
|
||||
memset(&dest[co], ' ', columns - co);
|
||||
return dest;
|
||||
}
|
||||
|
||||
//----- Refresh the changed screen lines -----------------------
|
||||
|
Loading…
Reference in New Issue
Block a user