diff options
author | Ron Yorston <rmy@pobox.com> | 2019-03-20 11:00:28 +0000 |
---|---|---|
committer | Denys Vlasenko <vda.linux@googlemail.com> | 2019-03-30 18:03:37 +0100 |
commit | a2fd1aaf86e2adc16101bdf95770a2783830727a (patch) | |
tree | 4e7d63d6718ce3d456ca5d8bd4171932fe793c7a | |
parent | 0f5a7f35206668f79c18415eaa4a1fd15750dc74 (diff) | |
download | busybox-a2fd1aaf86e2adc16101bdf95770a2783830727a.tar.gz |
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>
-rw-r--r-- | editors/vi.c | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/editors/vi.c b/editors/vi.c index 5e5e13111..425d14c9c 100644 --- a/editors/vi.c +++ b/editors/vi.c @@ -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) ) { unsigned c = columns, r = rows; query_screen_dimensions(); +#if ENABLE_FEATURE_VI_USE_SIGNALS 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") tp = screenbegin; // index into text[] of top line |