From 664d2517da6e29574f79ff3f0faecfae15d589eb Mon Sep 17 00:00:00 2001 From: Jim Warner Date: Tue, 18 Sep 2018 00:00:00 -0500 Subject: [PATCH] top: plug a minor hole in the vertical scrolling logic In that commit referenced below, a few edge cases were addressed regarding vertical positioning involving any 'hidden' tasks. But, 2 additional edge cases remained. In a running top, if the user employed 'other filters' (o/O) or 'user filters' (u/U) proper vertical position was not ensured. And, while this could be easily fixed by striking the home/end or up/down arrow keys, it was very poor etiquette to shift this burden to the users. So, this patch plugs that gap, automating the process. Reference(s): commit c6e68e2fedc21b2537066433d1b50a60e06774eb Signed-off-by: Jim Warner --- top/top.c | 11 ++++++++--- top/top.h | 2 +- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/top/top.c b/top/top.c index 30a2fc85..dd4b9481 100644 --- a/top/top.c +++ b/top/top.c @@ -4664,7 +4664,8 @@ static void wins_stage_2 (void) { ; // avoid -Wunused-result #endif - // with preserved 'other filters', ensure a visible task on row #1 + // with preserved 'other filters' & command line 'user filters', + // we must ensure that we always have a visible task on row one. mkVIZrow1(Curwin); // lastly, initialize a signal set used to throttle one troublesome signal @@ -5362,7 +5363,10 @@ static void keys_task (int ch) { case 'O': case 'o': case kbd_CtrlO: - if (VIZCHKw(w)) other_filters(ch); + if (VIZCHKw(w)) { + other_filters(ch); + mkVIZrow1(w); + } break; case 'U': case 'u': @@ -5371,6 +5375,7 @@ static void keys_task (int ch) { if (*str != kbd_ESC && (errmsg = user_certify(w, str, ch))) show_msg(errmsg); + mkVIZrow1(w); } break; case 'V': @@ -6254,7 +6259,7 @@ static const char *task_show (const WIN_t *q, const int idx) { * In reality, this function is called: * 1) exclusively for the 'current' window * 2) immediately after interacting with the user - * 3) who struck 1 of these: up, down, pgup, pgdn, home or end + * 3) who struck: up, down, pgup, pgdn, home, end, 'o/O' or 'u/U' * 4) or upon the user switching from one window to another window */ static void window_hlp (void) { WIN_t *w = Curwin; // avoid gcc bloat with a local copy diff --git a/top/top.h b/top/top.h index 4a7c49a8..d274d109 100644 --- a/top/top.h +++ b/top/top.h @@ -471,7 +471,7 @@ typedef struct WIN_t { #endif // Support for a proper (visible) row #1 whenever Curwin changes - // ( or a certain vertical scrolling key has been struck ) + // ( or a key which might affect vertical scrolling was struck ) #define mkVIZrow1(q) { q->begtask -= 1; q->begnext = +1; } /* Special Section: end ------------------------------------------ */ -- 2.50.0