#endif
const proc_t *p = q->ppt[idx];
const char *which = (CHKw(q, Show_CMDLIN)) ? *p->cmdline : p->cmd;
+ int level = p->pad_3;
- if (!CHKw(q, Show_FOREST) || !p->pad_3) return which;
+#ifdef TREE_FOCUS_X
+ if (q->focus_pid) {
+ if (idx >= q->focus_beg && idx < q->focus_end)
+ level -= q->focus_lvl;
+ }
+#endif
+ if (!CHKw(q, Show_FOREST) || !level) return which;
#ifndef TREE_VWINALL
if (q == Curwin) // note: the following is NOT indented
#endif
if (p->pad_2 == 'x') {
#ifdef TREE_VALTMRK
- snprintf(buf, sizeof(buf), "%*s%s", (4 * p->pad_3), "`+ ", which);
+ snprintf(buf, sizeof(buf), "%*s%s", (4 * level), "`+ ", which);
#else
- snprintf(buf, sizeof(buf), "+%*s%s", ((4 * p->pad_3) - 1), "`- ", which);
+ snprintf(buf, sizeof(buf), "+%*s%s", ((4 * level) - 1), "`- ", which);
#endif
return buf;
}
- if (p->pad_3 > 100) snprintf(buf, sizeof(buf), "%400s%s", " + ", which);
- else snprintf(buf, sizeof(buf), "%*s%s", (4 * p->pad_3), " `- ", which);
+ if (level > 100) snprintf(buf, sizeof(buf), "%400s%s", " + ", which);
+ else snprintf(buf, sizeof(buf), "%*s%s", (4 * level), " `- ", which);
return buf;
} // end: forest_display
if (i == Frame_maxtask)
q->focus_pid = q->begtask = 0;
else {
+#ifdef TREE_FOCUS_X
+ q->focus_lvl = level;
+#endif
while (i+1 < Frame_maxtask && q->ppt[i+1]->pad_3 > level)
++i;
q->focus_end = i + 1; // make 'focus_end' a proper fencpost
//#define TERMIOS_ONLY /* just limp along with native input only */
//#define TOG4_NOFORCE /* no force 2 abreast mode with '4' toggle */
//#define TOG4_NOTRUNC /* ensure no truncation in 2 abreast mode */
+//#define TREE_FOCUS_X /* 'F' resets forest view indentation to 0 */
//#define TREE_NORESET /* sort keys do NOT force forest 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
+ int focus_lvl; // the indentation level of parent task
+#endif
proc_t **ppt; // this window's proc_t ptr array
struct WIN_t *next, // next window in window stack
*prev; // prior window in window stack