top: turn off the 'Ctrl' bottom window after some keys <=== port of newlib d66c1f39

______________________________ original newlib message

To complete the implementation of this new feature, we
must address the problem created by any commands which
offer their own full replacement displays. Should that
'Ctrl' bottom window be active, a return from any such
command leaves that lower portion of a terminal blank.

While we could issue a 'TAGGED_TOSS' macro right after
invoking any of those 4 (currently) affected commands,
it is wrong to make them aware of this 'tagged' stuff.

So, I'll opt for a more generalized solution whereby a
notice regarding a corrupted screen is broadcast. Then
the logic already aware of 'tagging' can deal with it.

Signed-off-by: Jim Warner <james.warner@comcast.net>
This commit is contained in:
Jim Warner 2022-06-15 00:00:00 -05:00 committed by Craig Small
parent 619d4936ee
commit f45992086c
2 changed files with 18 additions and 4 deletions

View File

@ -5391,6 +5391,8 @@ static void keys_global (int ch) {
case '?':
case 'h':
help_view();
// signal that we just corrupted entire screen
Frames_signal = BREAK_screen;
mkVIZrow1
break;
case 'B':
@ -5415,6 +5417,8 @@ static void keys_global (int ch) {
break;
case 'f':
fields_utility();
// signal that we just corrupted entire screen
Frames_signal = BREAK_screen;
break;
case 'g':
win_select(0);
@ -5492,12 +5496,18 @@ static void keys_global (int ch) {
pid = get_int(fmtmk(N_fmt(YINSP_pidsee_fmt), def));
if (pid > GET_NUM_ESC) {
if (pid == GET_NUM_NOT) pid = def;
if (pid) inspection_utility(pid);
if (pid) {
inspection_utility(pid);
// signal that we just corrupted entire screen
Frames_signal = BREAK_screen;
}
}
}
break;
case 'Z':
wins_colors();
// signal that we just corrupted entire screen
Frames_signal = BREAK_screen;
mkVIZrow1
break;
case '0':
@ -6387,6 +6397,7 @@ static void do_key (int ch) {
};
int i;
Frames_signal = BREAK_off;
switch (ch) {
case 0: // ignored (always)
case kbd_ESC: // ignored (sometimes)
@ -6402,6 +6413,7 @@ static void do_key (int ch) {
for (i = 0; i < MAXTBL(key_tab); ++i)
if (strchr(key_tab[i].keys, ch)) {
key_tab[i].func(ch);
if (Frames_signal == BREAK_off)
Frames_signal = BREAK_kbd;
goto all_done;
}
@ -6939,7 +6951,9 @@ static void frame_make (void) {
// deal with potential signal(s) since the last time around...
if (Frames_signal) {
if (Frames_signal == BREAK_sig) TAGGED_TOSS;
if (Frames_signal == BREAK_sig
|| (Frames_signal == BREAK_screen))
TAGGED_TOSS;
zap_fieldstab();
}

View File

@ -242,7 +242,7 @@ enum scale_enum {
/* Used to manipulate (and document) the Frames_signal states */
enum resize_states {
BREAK_off = 0, BREAK_kbd, BREAK_sig, BREAK_autox
BREAK_off = 0, BREAK_kbd, BREAK_sig, BREAK_autox, BREAK_screen
};
/* This typedef just ensures consistent 'process flags' handling */