Skip to content

Commit 71e3d01

Browse files
committed
reduce flicker in refresh
1 parent 8130bfd commit 71e3d01

File tree

3 files changed

+18
-8
lines changed

3 files changed

+18
-8
lines changed

src/editline.c

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -208,7 +208,7 @@ static bool edit_refresh_rows_iter(
208208
if (row < info->first_row) return false;
209209
if (row > info->last_row) return true; // should not occur
210210

211-
term_clear_line(term);
211+
// term_clear_line(term);
212212
edit_write_prompt(info->env, info->eb, row, info->in_extra);
213213

214214
//' write output
@@ -228,8 +228,12 @@ static bool edit_refresh_rows_iter(
228228
bbcode_print( info->env->bbcode, "[ic-dim]\xE2\x86\xB5" ); // return symbol
229229
#endif
230230
}
231+
term_clear_to_end_of_line(term);
231232
term_writeln(term, "");
232233
}
234+
else {
235+
term_clear_to_end_of_line(term);
236+
}
233237
return (row >= info->last_row);
234238
}
235239

@@ -316,6 +320,7 @@ static void edit_refresh(ic_env_t* env, editor_t* eb)
316320
buffer_mode_t bmode = term_set_buffer_mode(env->term, BUFFERED);
317321

318322
// back up to the first line
323+
term_start_of_line(env->term);
319324
term_up(env->term, (eb->cur_row >= termh ? termh-1 : eb->cur_row) );
320325
// term_clear_lines_to_end(env->term); // gives flicker in old Windows cmd prompt
321326

src/term.c

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,10 @@ ic_private void term_clear_line(term_t* term) {
101101
term_write( term, "\r" IC_CSI "K");
102102
}
103103

104+
ic_private void term_clear_to_end_of_line(term_t* term) {
105+
term_write(term, IC_CSI "K");
106+
}
107+
104108
ic_private void term_start_of_line(term_t* term) {
105109
term_write( term, "\r" );
106110
}
@@ -603,9 +607,10 @@ static void term_erase_line( term_t* term, ssize_t mode ) {
603607
COORD start;
604608
ssize_t length;
605609
if (mode == 2) {
606-
// to end of line
607-
length = (ssize_t)info.srWindow.Right - info.dwCursorPosition.X + 1;
608-
start = info.dwCursorPosition;
610+
// entire line
611+
start.X = 0;
612+
start.Y = info.dwCursorPosition.Y;
613+
length = (ssize_t)info.srWindow.Right + 1;
609614
}
610615
else if (mode == 1) {
611616
// to start of line
@@ -614,10 +619,9 @@ static void term_erase_line( term_t* term, ssize_t mode ) {
614619
length = info.dwCursorPosition.X;
615620
}
616621
else {
617-
// entire line
618-
start.X = 0;
619-
start.Y = info.dwCursorPosition.Y;
620-
length = (ssize_t)info.srWindow.Right + 1;
622+
// to end of line
623+
length = (ssize_t)info.srWindow.Right - info.dwCursorPosition.X + 1;
624+
start = info.dwCursorPosition;
621625
}
622626
FillConsoleOutputAttribute( term->hcon, term->hcon_default_attr, (DWORD)length, start, &written );
623627
FillConsoleOutputCharacterA( term->hcon, ' ', (DWORD)length, start, &written );

src/term.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,7 @@ ic_private void term_up(term_t* term, ssize_t n);
6060
ic_private void term_down(term_t* term, ssize_t n);
6161
ic_private void term_start_of_line(term_t* term );
6262
ic_private void term_clear_line(term_t* term);
63+
ic_private void term_clear_to_end_of_line(term_t* term);
6364
// ic_private void term_clear_lines_to_end(term_t* term);
6465

6566

0 commit comments

Comments
 (0)