vi: allow manual screen update if SIGWINCH isn't supported
On platforms that don't support SIGWINCH vi can be configured with FEATURE_VI_USE_SIGNALS disabled and FEATURE_VI_WIN_RESIZE enabled. This allows the user to force an update with ^L when the screen is resized. However, because the SIGWINCH handler hasn't run the virtual screen buffer won't have been updated and the display becomes corrupted. Fix this by calling new_screen() if necessary. Signed-off-by: Ron Yorston <rmy@pobox.com> Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
parent
0f5a7f3520
commit
a2fd1aaf86
@ -3349,7 +3349,15 @@ static void refresh(int full_screen)
|
|||||||
if (ENABLE_FEATURE_VI_WIN_RESIZE IF_FEATURE_VI_ASK_TERMINAL(&& !G.get_rowcol_error) ) {
|
if (ENABLE_FEATURE_VI_WIN_RESIZE IF_FEATURE_VI_ASK_TERMINAL(&& !G.get_rowcol_error) ) {
|
||||||
unsigned c = columns, r = rows;
|
unsigned c = columns, r = rows;
|
||||||
query_screen_dimensions();
|
query_screen_dimensions();
|
||||||
|
#if ENABLE_FEATURE_VI_USE_SIGNALS
|
||||||
full_screen |= (c - columns) | (r - rows);
|
full_screen |= (c - columns) | (r - rows);
|
||||||
|
#else
|
||||||
|
if (c != columns || r != rows) {
|
||||||
|
full_screen = TRUE;
|
||||||
|
/* update screen memory since SIGWINCH won't have done it */
|
||||||
|
new_screen(rows, columns);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
sync_cursor(dot, &crow, &ccol); // where cursor will be (on "dot")
|
sync_cursor(dot, &crow, &ccol); // where cursor will be (on "dot")
|
||||||
tp = screenbegin; // index into text[] of top line
|
tp = screenbegin; // index into text[] of top line
|
||||||
|
Loading…
x
Reference in New Issue
Block a user