top: new #define added for focus ('F') toggle tweaking

Just to see if I could, the new #define will force the
indentation of a parent task to be reset to zero while
maintaining the proper child indentation relationship.

Signed-off-by: Jim Warner <james.warner@comcast.net>
This commit is contained in:
Jim Warner 2021-07-28 00:00:00 -05:00 committed by Craig Small
parent 02a4220a56
commit d19ee838a6
2 changed files with 19 additions and 5 deletions

View File

@ -4895,21 +4895,28 @@ static inline const char *forest_display (const WIN_t *q, int idx) {
#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
@ -4931,6 +4938,9 @@ static void forest_excluded (WIN_t *q) {
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

View File

@ -56,6 +56,7 @@
//#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 */
@ -441,6 +442,9 @@ typedef struct WIN_t {
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