]> granicus.if.org Git - procps-ng/commitdiff
top: provide -1 command line switch as 'Cpu(s)' toggle
authorJim Warner <james.warner@comcast.net>
Mon, 13 Mar 2017 10:00:00 +0000 (05:00 -0500)
committerCraig Small <csmall@enc.com.au>
Thu, 16 Mar 2017 11:08:07 +0000 (22:08 +1100)
If built without ./configure --disable-modern-top, the
program displays each cpu individually providing there
is sufficient vertical screen real estate. For massive
SMP environments this will necessitate use of a config
file where the cpu summary toggle ('1') could be saved
via the 'W' command. But, an rcfile may not be viable.

So this commit introduces a '1' command line switch to
emulate exactly the effects of the interactive toggle.

And since it is our first numeric switch some existing
parsing logic had to be changed slightly. Such changes
are, in truth, an improvement. For example, instead of
seeing "inappropriate '2'" with ./top -2 we'll now see
the vastly more appropriate error "unknown option '2'.

References(s):
https://gitlab.com/procps-ng/procps/issues/55

[ this patch has been adapted from the master branch ]

Signed-off-by: Jim Warner <james.warner@comcast.net>
NEWS
top/top.1
top/top.c
top/top_nls.c

diff --git a/NEWS b/NEWS
index 945e50208c6fd6708f2120d8ccf07cf271f6ee32..7c1d91ac4a768dab42f7688b4dc2b9586ed2d452 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -12,6 +12,7 @@ procps-ng-NEXT
   * pkill: Return 0 only if we can kill process            Debian #852758
   * top: show fewer memory decimal places (configurable)
   * top: provide command line switch for memory scaling
+  * top: provide command line switch for CPU States
 
 procps-ng-3.3.12
 ----------------
index 7cabe7e24982f0a36918912ec51935c3939759b6..41fbf08ab06b5301879f019c8e84f49da72cbcd4 100644 (file)
--- a/top/top.1
+++ b/top/top.1
@@ -32,7 +32,7 @@
 .ds CI interactive command
 \#                           - Note: our 'Command Line' used in 2 places
 \#                           ( and managed to fit in an 80x24 terminal )
-.ds CL \-\fBhv\fR|\-\fBbcEHiOSs\fR \-\fBd\fR secs \-\fBn\fR max \
+.ds CL \-\fBhv\fR|\-\fBbcEHiOSs1\fR \-\fBd\fR secs \-\fBn\fR max \
 \-\fBu\fR|\fBU\fR user \-\fBp\fR pid \-\fBo\fR fld \-\fBw\fR [cols] \fR
 .ds CO command\-line option
 .ds CT command toggle
@@ -252,7 +252,7 @@ All are explained in detail in the sections that follow.
        l \- Load Avg/Uptime  On  (thus program name)
        t \- Task/Cpu states  On  (1+1 lines, see `1')
        m \- Mem/Swap usage   On  (2 lines worth)
-       1 \- Single Cpu       Off (thus multiple cpus)
+     * 1 \- Single Cpu       Off (thus multiple cpus)
     \fITask-Area-defaults\fR
        b \- Bold hilite      Off (use `reverse')
      * c \- Command line     Off (name, not cmdline)
@@ -486,6 +486,15 @@ in Batch mode actual terminal dimensions can never be exceeded.
 \*(NT Without the use of this \*(CO, output width is always based on the
 terminal at which \*(We was invoked whether or not in Batch mode.
 
+.TP 5
+\-\fB1\fR\ \ :\fISingle/Separate-Cpu-States\fR toggle \fR
+Starts \*(We with the last remembered Cpu States portion of the \*(SA reversed.
+Either all \*(Pu information will be displayed in a single line or
+each \*(Pu will be displayed separately, depending on the state of the NUMA Node
+\*(CT ('2').
+
+\*(XC `1' and '2' \*(CIs for additional information.
+
 .\" ----------------------------------------------------------------------
 .SH 2. SUMMARY Display
 .\" ----------------------------------------------------------------------
index 74592cb5dec5a2897b878fbc5fa3ae2d12ca8606..4e17ac11096d11a4b521f80d74f3a1d2db36db3b 100644 (file)
--- a/top/top.c
+++ b/top/top.c
@@ -3156,6 +3156,7 @@ static void parse_args (char **args) {
       .  bunched args are actually handled properly and none are ignored
       .  we tolerate NO whitespace and NO switches -- maybe too tolerant? */
    static const char numbs_str[] = "+,-.0123456789";
+   static const char wrong_str[] = "+,-.";
    float tmp_delay = FLT_MAX;
    int i;
 
@@ -3172,10 +3173,16 @@ static void parse_args (char **args) {
             case '-':
                if (cp[1]) ++cp;
                else if (*args) cp = *args++;
-               if (strspn(cp, numbs_str))
+               if (strspn(cp, wrong_str))
                   error_exit(fmtmk(N_fmt(WRONG_switch_fmt)
                      , cp, Myname, N_txt(USAGE_abbrev_txt)));
                continue;
+            case '1':   // ensure behavior identical to run-time toggle
+               if (CHKw(Curwin, View_CPUNOD)) OFFw(Curwin, View_CPUSUM);
+               else TOGw(Curwin, View_CPUSUM);
+               OFFw(Curwin, View_CPUNOD);
+               SETw(Curwin, View_STATES);
+               break;
             case 'b':
                Batch = 1;
                break;
@@ -3275,8 +3282,7 @@ static void parse_args (char **args) {
                else error_exit(fmtmk(N_fmt(MISSING_args_fmt), ch));
                if ((errmsg = user_certify(Curwin, cp, ch))) error_exit(errmsg);
                cp += strlen(cp);
-            }
-               break;
+            }  break;
             case 'w':
             {  const char *pn = NULL;
                int ai = 0, ci = 0;
@@ -3290,8 +3296,7 @@ static void parse_args (char **args) {
                cp++;
                args += ai;
                if (pn) cp = pn + ci;
-            }
-               continue;
+            }  continue;
             default :
                error_exit(fmtmk(N_fmt(UNKNOWN_opts_fmt)
                   , *cp, Myname, N_txt(USAGE_abbrev_txt)));
index 207311775c4113bc694387bd3c254d187ea2e9f8..f0af3ff4240a8b6a833743dfe22f3fedef9c8df8 100644 (file)
@@ -336,7 +336,7 @@ static void build_norm_nlstab (void) {
    Norm_nlstab[OFF_one_word_txt] = _("Off");
 /* Translation Hint: Only the following words should be translated
    .                 secs (seconds), max (maximum), user, field, cols (columns)*/
-   Norm_nlstab[USAGE_abbrev_txt] = _(" -hv | -bcEHiOSs -d secs -n max -u|U user -p pid(s) -o field -w [cols]");
+   Norm_nlstab[USAGE_abbrev_txt] = _(" -hv | -bcEHiOSs1 -d secs -n max -u|U user -p pid(s) -o field -w [cols]");
    Norm_nlstab[FOREST_modes_fmt] = _("Forest mode %s");
    Norm_nlstab[FAIL_tty_get_txt] = _("failed tty get");
    Norm_nlstab[FAIL_tty_set_fmt] = _("failed tty set: %s");