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 c6e68e2fed

Signed-off-by: Jim Warner <james.warner@comcast.net>
This commit is contained in:
Jim Warner 2018-09-18 00:00:00 -05:00 committed by Craig Small
parent b3b7a35050
commit 664d2517da
2 changed files with 9 additions and 4 deletions

View File

@ -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

View File

@ -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 ------------------------------------------ */