diff options
| author | Elliott Hughes <enh@google.com> | 2018-06-12 12:04:30 -0700 | 
|---|---|---|
| committer | Rob Landley <rob@landley.net> | 2018-06-12 14:41:45 -0500 | 
| commit | 1e0dd35f3cfef45f3de9dc6819c85e7870a90aba (patch) | |
| tree | 919613368e34e5a9ffb8fa8bcbd3c011c23c19ab | |
| parent | 1683db07dd8ba6464fa3ee7220948f2681bbef33 (diff) | |
| download | toybox-1e0dd35f3cfef45f3de9dc6819c85e7870a90aba.tar.gz | |
top: remove flicker in interactive mode.
| -rw-r--r-- | toys/posix/ps.c | 10 | 
1 files changed, 7 insertions, 3 deletions
diff --git a/toys/posix/ps.c b/toys/posix/ps.c index 75e8f54b..bb491eba 100644 --- a/toys/posix/ps.c +++ b/toys/posix/ps.c @@ -643,7 +643,7 @@ static void show_ps(void *p)      if (!abslen) putchar('+');      if (!width) break;    } -  xputc(TT.time ? '\r' : '\n'); +  putchar(TT.time ? '\r' : '\n');  }  // dirtree callback: read data about process to display, store, or discard it. @@ -1374,6 +1374,10 @@ static void top_common(    unsigned tock = 0;    int i, lines, topoff = 0, done = 0; +  char stdout_buf[BUFSIZ]; + +  // Avoid flicker in interactive mode. +  if (!(toys.optflags&FLAG_b)) setbuf(stdout, stdout_buf);    toys.signal = SIGWINCH;    TT.bits = get_headers(TT.fields, toybuf, sizeof(toybuf)); @@ -1553,7 +1557,7 @@ static void top_common(          // Running processes are shown in bold.          int bold = !(toys.optflags&FLAG_b) && mix.tb[i+topoff]->state == 'R'; -        if (!(toys.optflags&FLAG_b) && i) xputc('\n'); +        if (!(toys.optflags&FLAG_b) && i) putchar('\n');          if (bold) printf("\033[1m");          show_ps(mix.tb[i+topoff]);          if (bold) printf("\033[m"); @@ -1574,7 +1578,7 @@ static void top_common(          // Make an obvious gap between datasets.          xputs("\n\n");          continue; -      } +      } else fflush(stdout);        i = scan_key_getsize(scratch, timeout-now, &TT.width, &TT.height);        if (i==-1 || i==3 || toupper(i)=='Q') {  | 
