const char *which = (CHKw(q, Show_CMDLIN)) ? *p->cmdline : p->cmd;
int level = p->pad_3;
-#ifdef TREE_FOCUS_X
+#ifdef FOCUS_TREE_X
if (q->focus_pid) {
if (idx >= q->focus_beg && idx < q->focus_end)
level -= q->focus_lvl;
if (i == Frame_maxtask)
q->focus_pid = q->begtask = 0;
else {
-#ifdef TREE_FOCUS_X
+#ifdef FOCUS_TREE_X
q->focus_lvl = level;
#endif
while (i+1 < Frame_maxtask && q->ppt[i+1]->pad_3 > level)
q->begtask = q->focus_beg;
q->begnext = 0; // as 'mkVIZoff' but in any window
}
+#ifdef FOCUS_HARD_Y
+ // if some task 'above' us ended, try to maintain focus
+ // ( but allow scrolling when there are many children )
+ if (q->begtask > q->focus_beg
+ && (Screen_rows > (q->focus_end - q->focus_beg))) {
+ q->begtask = q->focus_beg;
+ q->begnext = 0; // as 'mkVIZoff' but in any window
+ }
+#endif
}
} // end: forest_excluded
\f
//#define CASEUP_SUFIX /* show time/mem/cnts suffix in upper case */
//#define CPU_ZEROTICS /* tolerate few tics when cpu off vs. idle */
//#define EQUCOLHDRYES /* yes, equalize the column header lengths */
+//#define FOCUS_HARD_Y /* 'F' will avoid topmost task distortions */
+//#define FOCUS_TREE_X /* 'F' resets forest view indentation to 0 */
//#define GETOPTFIX_NO /* do not address getopt_long deficiencies */
//#define INSP_JUSTNOT /* do not smooth unprintable right margins */
//#define INSP_OFFDEMO /* disable demo screens, issue msg instead */
//#define TOG4_NOTRUNC /* ensure no truncation for 2 abreast mode */
//#define TOG4_OFF_MEM /* don't show two abreast memory statistic */
//#define TOG4_OFF_SEP /* don't show two abreast visual separator */
-//#define TREE_FOCUS_X /* 'F' resets forest view indentation to 0 */
//#define TREE_NORESET /* sort keys should not force 'V' view off */
//#define TREE_SCANALL /* rescan array w/ forest view, avoid sort */
//#define TREE_VALTMRK /* use an indented '+' with collapsed pids */
int focus_pid; // target pid when 'F' toggle is active
int focus_beg; // ppt index where 'F' toggle has begun
int focus_end; // ppt index where 'F' toggle has ended
-#ifdef TREE_FOCUS_X
+#ifdef FOCUS_TREE_X
int focus_lvl; // the indentation level of parent task
#endif
proc_t **ppt; // this window's proc_t ptr array