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 9d59ddc466
Signed-off-by: Jim Warner <james.warner@comcast.net>
This commit is contained in:
parent
a6dfc2382e
commit
59f02f19c7
11
top/top.c
11
top/top.c
@ -4231,7 +4231,8 @@ static void wins_stage_2 (void) {
|
|||||||
// fill in missing Fieldstab members and build each window's columnhdr
|
// fill in missing Fieldstab members and build each window's columnhdr
|
||||||
zap_fieldstab();
|
zap_fieldstab();
|
||||||
|
|
||||||
// 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);
|
mkVIZrow1(Curwin);
|
||||||
|
|
||||||
// lastly, initialize a signal set used to throttle one troublesome signal
|
// lastly, initialize a signal set used to throttle one troublesome signal
|
||||||
@ -4943,7 +4944,10 @@ static void keys_task (int ch) {
|
|||||||
case 'O':
|
case 'O':
|
||||||
case 'o':
|
case 'o':
|
||||||
case kbd_CtrlO:
|
case kbd_CtrlO:
|
||||||
if (VIZCHKw(w)) other_filters(ch);
|
if (VIZCHKw(w)) {
|
||||||
|
other_filters(ch);
|
||||||
|
mkVIZrow1(w);
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case 'U':
|
case 'U':
|
||||||
case 'u':
|
case 'u':
|
||||||
@ -4952,6 +4956,7 @@ static void keys_task (int ch) {
|
|||||||
if (*str != kbd_ESC
|
if (*str != kbd_ESC
|
||||||
&& (errmsg = user_certify(w, str, ch)))
|
&& (errmsg = user_certify(w, str, ch)))
|
||||||
show_msg(errmsg);
|
show_msg(errmsg);
|
||||||
|
mkVIZrow1(w);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 'V':
|
case 'V':
|
||||||
@ -5780,7 +5785,7 @@ static const char *task_show (const WIN_t *q, struct pids_stack *p) {
|
|||||||
* In reality, this function is called:
|
* In reality, this function is called:
|
||||||
* 1) exclusively for the 'current' window
|
* 1) exclusively for the 'current' window
|
||||||
* 2) immediately after interacting with the user
|
* 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 */
|
* 4) or upon the user switching from one window to another window */
|
||||||
static void window_hlp (void) {
|
static void window_hlp (void) {
|
||||||
WIN_t *w = Curwin; // avoid gcc bloat with a local copy
|
WIN_t *w = Curwin; // avoid gcc bloat with a local copy
|
||||||
|
@ -390,7 +390,7 @@ typedef struct WIN_t {
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
// Support for a proper (visible) row #1 whenever Curwin changes
|
// 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; }
|
#define mkVIZrow1(q) { q->begtask -= 1; q->begnext = +1; }
|
||||||
|
|
||||||
/* Special Section: end ------------------------------------------ */
|
/* Special Section: end ------------------------------------------ */
|
||||||
|
Loading…
Reference in New Issue
Block a user