On 3/6/17 8:11 PM, Bryan Drewery wrote: > On 3/4/17 2:38 PM, Conrad Meyer wrote: >> Author: cem >> Date: Sat Mar 4 22:38:10 2017 >> New Revision: 314685 >> URL: https://svnweb.freebsd.org/changeset/base/314685 >> >> Log: >> ps(1): Only detect terminal width if stdout is a tty >> >> If stdout isn't a tty, use unlimited width output rather than truncating to >> 79 characters. This is helpful for shell scripts or e.g., 'ps | grep foo'. > > This change actually makes things worse for me for 'ps uaxwd|less' > > Before: >> nobody 83979 0.0 0.0 9016 1364 3 I+J 20:03 0:00.06 | >> | `-- /usr/bin/make -C /usr/ports/lang/perl5.24 build > > After: >> nobody 89743 0.0 0.0 9016 1368 3 S+J 20:07 0:00.05 | >> | `-- /usr/bin/make -C /usr/ports/lang/perl5.24 > > > I now have to specify -ww to not cut things off, but that's far more > than I want to see. >
The problem is that -w is parsed *after* termwidth = UNLIMITED is set (which is 0). This patch fixes it, but I haven't tested it extensively: > Index: ps.c > =================================================================== > --- ps.c (revision 314708) > +++ ps.c (working copy) > @@ -401,7 +401,7 @@ main(int argc, char *argv[]) > case 'w': > if (wflag) > termwidth = UNLIMITED; > - else if (termwidth < 131) > + else if (termwidth < 131 && termwidth != UNLIMITED) > termwidth = 131; > wflag++; > break; -1 for the original commit. If I wanted -ww I would specify it. The original commit causes some text to wrap on my terminal even with some extending right. > >> >> This hardcoded width has some history: In The Beginning of History[0], the >> width of ps was hardcoded as 80 bytes. In 1985, Bloom@ added detection >> using TIOCGWINSZ on stdin.[1] In 1986, Kirk merged a change to check >> stdout's window size instead. In 1990, the fallback checks to stderr and >> stdin's TIOCGWINSZ were added by Marc@, with the commit message "new >> version."[2] >> >> OS X Darwin has a very similar modification to ps(1), which simply sets >> UNLIMITED for all non-tty outputs.[3] I've chosen to respect COLUMNS >> instead of behaving identically to Darwin here, but I don't feel strongly >> about that. We could match OS X for parity if that is desired. >> >> [0]: https://svnweb.freebsd.org/csrg/bin/ps/ps.c?annotate=1065 >> [1]: https://svnweb.freebsd.org/csrg/bin/ps/ps.c?r1=18105&r2=18106 >> [2]: >> https://svnweb.freebsd.org/csrg/bin/ps/ps.c?r1=40675&r2=40674&pathrev=40675 >> [3]: >> https://opensource.apple.com/source/adv_cmds/adv_cmds-168/ps/ps.c.auto.html >> >> PR: 217159 >> Reported by: Deepak Nagaraj <n.deepak at gmail.com> >> >> Modified: >> head/bin/ps/ps.c >> >> Modified: head/bin/ps/ps.c >> ============================================================================== >> --- head/bin/ps/ps.c Sat Mar 4 22:23:59 2017 (r314684) >> +++ head/bin/ps/ps.c Sat Mar 4 22:38:10 2017 (r314685) >> @@ -194,6 +194,8 @@ main(int argc, char *argv[]) >> >> if ((cols = getenv("COLUMNS")) != NULL && *cols != '\0') >> termwidth = atoi(cols); >> + else if (!isatty(STDOUT_FILENO)) >> + termwidth = UNLIMITED; >> else if ((ioctl(STDOUT_FILENO, TIOCGWINSZ, (char *)&ws) == -1 && >> ioctl(STDERR_FILENO, TIOCGWINSZ, (char *)&ws) == -1 && >> ioctl(STDIN_FILENO, TIOCGWINSZ, (char *)&ws) == -1) || >> > > -- Regards, Bryan Drewery
signature.asc
Description: OpenPGP digital signature