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: ;
|
skip: ;
|
||||||
}
|
}
|
||||||
|
last_row = row;
|
||||||
#endif /* FEATURE_VI_OPTIMIZE_CURSOR */
|
#endif /* FEATURE_VI_OPTIMIZE_CURSOR */
|
||||||
write1(cm);
|
write1(cm);
|
||||||
last_row = row;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//----- Erase from cursor to end of line -----------------------
|
//----- Erase from cursor to end of line -----------------------
|
||||||
@ -2762,10 +2762,9 @@ static char* format_line(char *src, int li)
|
|||||||
int ofs = offset;
|
int ofs = offset;
|
||||||
char *dest = scr_out_buf; // [MAX_SCR_COLS + MAX_TABSTOP * 2]
|
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 '~'
|
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?
|
// have we gone past the end?
|
||||||
if (src < end) {
|
if (src < end) {
|
||||||
c = *src++;
|
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,
|
// discard scrolled-off-to-the-left portion,
|
||||||
// in tabstop-sized pieces
|
// in tabstop-sized pieces
|
||||||
if (ofs >= tabstop && co >= tabstop) {
|
if (ofs >= tabstop && co >= tabstop) {
|
||||||
memmove(dest, dest + tabstop, co + 1);
|
memmove(dest, dest + tabstop, co);
|
||||||
co -= tabstop;
|
co -= tabstop;
|
||||||
ofs -= tabstop;
|
ofs -= tabstop;
|
||||||
}
|
}
|
||||||
@ -2803,9 +2802,14 @@ static char* format_line(char *src, int li)
|
|||||||
}
|
}
|
||||||
// check "short line, gigantic offset" case
|
// check "short line, gigantic offset" case
|
||||||
if (co < ofs)
|
if (co < ofs)
|
||||||
ofs = co + 1;
|
ofs = co;
|
||||||
dest[ofs + MAX_SCR_COLS] = '\0';
|
// discard last scrolled off part
|
||||||
return &dest[ofs];
|
co -= ofs;
|
||||||
|
dest += ofs;
|
||||||
|
// fill the rest with spaces
|
||||||
|
if (co < columns)
|
||||||
|
memset(&dest[co], ' ', columns - co);
|
||||||
|
return dest;
|
||||||
}
|
}
|
||||||
|
|
||||||
//----- Refresh the changed screen lines -----------------------
|
//----- Refresh the changed screen lines -----------------------
|
||||||
|
Loading…
x
Reference in New Issue
Block a user