svn commit: r314685 - head/bin/ps
Bryan Drewery
bdrewery at FreeBSD.org
Tue Mar 7 04:26:42 UTC 2017
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
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 496 bytes
Desc: OpenPGP digital signature
URL: <http://lists.freebsd.org/pipermail/svn-src-all/attachments/20170306/0f9d9616/attachment.sig>
More information about the svn-src-all
mailing list