diff --git a/top/top.c b/top/top.c index 8fab23c5..d703b279 100644 --- a/top/top.c +++ b/top/top.c @@ -1633,6 +1633,8 @@ end_justifies: #define TICS_AS_SECS 0 #define TICS_AS_MINS 1 #define TICS_AS_HOUR 2 +#define TICS_AS_DAYS 3 +#define TICS_AS_WEEK 4 /* * Do some scaling stuff. @@ -1698,6 +1700,9 @@ static const char *scale_tics (TIC_t tics, int width, int justr, int target) { days = (nt /= 24); // totat days week = (nt / 7); // total week + if (Rc.tics_scaled > target) + target += Rc.tics_scaled - target; + switch (target) { case TICS_AS_SECS: if (mins < mmLIMIT + 1) { @@ -1714,7 +1719,7 @@ static const char *scale_tics (TIC_t tics, int width, int justr, int target) { if (width >= snprintf(buf, sizeof(buf), "%lu,%02lu", hour, mins % 60)) goto end_justifies; } - default: // fall through + case TICS_AS_DAYS: // fall through if (days < ddLIMIT + 1) { if (width >= snprintf(buf, sizeof(buf), DD "+" HH, days, hour % 24)) goto end_justifies; @@ -1725,6 +1730,7 @@ static const char *scale_tics (TIC_t tics, int width, int justr, int target) { if (width >= snprintf(buf, sizeof(buf), DD, days)) goto end_justifies; } + case TICS_AS_WEEK: // fall through if (width >= snprintf(buf, sizeof(buf), WW "+" DD, week, days % 7)) goto end_justifies; #ifdef SCALE_POSTFX @@ -1733,6 +1739,7 @@ static const char *scale_tics (TIC_t tics, int width, int justr, int target) { #endif if (width >= snprintf(buf, sizeof(buf), WW, week)) goto end_justifies; + default: // fall through break; } #undef mmLIMIT @@ -3846,6 +3853,7 @@ static const char *configs_file (FILE *fp, const char *name, float *delay) { w->rc.double_up = w->rc.combine_cpus = 0; // fall through case 'j': // this is release 3.3.17 + Rc.tics_scaled = 0; case 'k': // current RCF_VERSION_ID default: if (strlen(w->rc.fieldscur) != sizeof(DEF_FIELDS) - 1) @@ -3866,8 +3874,8 @@ static const char *configs_file (FILE *fp, const char *name, float *delay) { } // end: for (GROUPSMAX) // any new addition(s) last, for older rcfiles compatibility... - (void)fscanf(fp, "Fixed_widest=%d, Summ_mscale=%d, Task_mscale=%d, Zero_suppress=%d\n" - , &Rc.fixed_widest, &Rc.summ_mscale, &Rc.task_mscale, &Rc.zero_suppress); + (void)fscanf(fp, "Fixed_widest=%d, Summ_mscale=%d, Task_mscale=%d, Zero_suppress=%d, Tics_scaled=%d\n" + , &Rc.fixed_widest, &Rc.summ_mscale, &Rc.task_mscale, &Rc.zero_suppress, &Rc.tics_scaled); if (Rc.fixed_widest < -1 || Rc.fixed_widest > SCREENMAX) Rc.fixed_widest = 0; if (Rc.summ_mscale < 0 || Rc.summ_mscale > SK_Eb) @@ -3876,6 +3884,8 @@ static const char *configs_file (FILE *fp, const char *name, float *delay) { Rc.task_mscale = 0; if (Rc.zero_suppress < 0 || Rc.zero_suppress > 1) Rc.zero_suppress = 0; + if (Rc.tics_scaled < 0 || Rc.tics_scaled > TICS_AS_WEEK) + Rc.tics_scaled = 0; // prepare to warn that older top can no longer read rcfile ... if (Rc.id != RCF_VERSION_ID) @@ -4253,7 +4263,10 @@ static void win_reset (WIN_t *q) { #else q->rc.maxtasks = q->usrseltyp = q->begpflg = q->begtask = q->begnext = q->focus_pid = 0; #endif + // these next two are global, not really windows based Monpidsidx = 0; + Rc.tics_scaled = 0; + osel_clear(q); q->findstr[0] = '\0'; #ifndef USE_X_COLHDR @@ -4986,8 +4999,8 @@ static void write_rcfile (void) { } // any new addition(s) last, for older rcfiles compatibility... - fprintf(fp, "Fixed_widest=%d, Summ_mscale=%d, Task_mscale=%d, Zero_suppress=%d\n" - , Rc.fixed_widest, Rc.summ_mscale, Rc.task_mscale, Rc.zero_suppress); + fprintf(fp, "Fixed_widest=%d, Summ_mscale=%d, Task_mscale=%d, Zero_suppress=%d, Tics_scaled=%d\n" + , Rc.fixed_widest, Rc.summ_mscale, Rc.task_mscale, Rc.zero_suppress, Rc.tics_scaled); if (Winstk[0].osel_tot + Winstk[1].osel_tot + Winstk[2].osel_tot + Winstk[3].osel_tot) { @@ -5140,6 +5153,13 @@ static void keys_global (int ch) { case '0': Rc.zero_suppress = !Rc.zero_suppress; break; + case kbd_CtrlE: +#ifndef SCALE_FORMER + Rc.tics_scaled++; + if (Rc.tics_scaled > TICS_AS_WEEK) + Rc.tics_scaled = 0; +#endif + break; case kbd_ENTER: // these two have the effect of waking us case kbd_SPACE: // from 'pselect', refreshing the display break; // and updating any hot-plugged resources @@ -5981,7 +6001,7 @@ static void do_key (int ch) { { keys_global, { '?', 'B', 'd', 'E', 'e', 'f', 'g', 'H', 'h' , 'I', 'k', 'r', 's', 'X', 'Y', 'Z', '0' - , kbd_ENTER, kbd_SPACE, '\0' } }, + , kbd_CtrlE, kbd_ENTER, kbd_SPACE, '\0' } }, { keys_summary, { '!', '1', '2', '3', '4', 'C', 'l', 'm', 't', '\0' } }, { keys_task, diff --git a/top/top.h b/top/top.h index fa8a53b7..1a564e7f 100644 --- a/top/top.h +++ b/top/top.h @@ -170,6 +170,7 @@ char *strcasestr(const char *haystack, const char *needle); #define kbd_INS 138 #define kbd_DEL 139 #define kbd_CtrlO '\017' +#define kbd_CtrlE '\005' /* Special value in Pseudo_row to force an additional procs refresh -- used at startup and for task/thread mode transitions */ @@ -331,6 +332,7 @@ typedef struct RCF_t { int summ_mscale; // 'E' - scaling of summary memory values int task_mscale; // 'e' - scaling of process memory values int zero_suppress; // '0' - suppress scaled zeros toggle + int tics_scaled; // ^E - scale TIME and/or TIME+ columns } RCF_t; /* This structure stores configurable information for each window. @@ -548,7 +550,7 @@ typedef struct WIN_t { { EU_UEN, ALT_WINFLGS, 0, ALT_GRAPHS2, 0, 0, \ COLOR_YELLOW, COLOR_YELLOW, COLOR_GREEN, COLOR_YELLOW, \ "Usr", USR_FIELDS } \ - }, 0, DEF_SCALES2, 0 } + }, 0, DEF_SCALES2, 0, 0 } /* Summary Lines specially formatted string(s) -- see 'show_special' for syntax details + other cautions. */ diff --git a/top/top_nls.c b/top/top_nls.c index 05669caf..d7ddcf33 100644 --- a/top/top_nls.c +++ b/top/top_nls.c @@ -644,7 +644,7 @@ static void build_uniq_nlstab (void) { " V,v,F . Toggle: '~1V~2' forest view; '~1v~2' hide/show children; '~1F~2' keep focused\n" "\n" "%s" - " W,Y,! Write config file '~1W~2'; Inspect other output '~1Y~2'; Combine Cpus '~1!~2'\n" + " W,Y,!,^E Write cfg '~1W~2'; Inspect '~1Y~2'; Combine Cpus '~1!~2'; Scale time ~1Ctrl~2+'~1E~2'\n" " q Quit\n" " ( commands shown with '.' require a ~1visible~2 task display ~1window~2 ) \n" "Press '~1h~2' or '~1?~2' for help with ~1Windows~2,\n"