sbase

suckless unix tools
git clone git://git.2f30.org/sbase.git
Log | Files | Refs | README | LICENSE

commit 9355d88aae6c2cc82cac1c18ec0625466c6178d3
parent 8c041cd115dba7d89c074751373b13144fca8c7e
Author: sin <sin@2f30.org>
Date:   Thu Feb 19 11:24:28 +0000

Add COLUMNS support to cols(1)

First attempt to see if COLUMNS is set, if that fails an ioctl()
is issued to find the width of the output device.  If that fails
as well, we default to 65 chars per line.

Diffstat:
cols.1 | 18+++++++++++++-----
cols.c | 6++++--
2 files changed, 17 insertions(+), 7 deletions(-)
diff --git a/cols.1 b/cols.1 @@ -1,4 +1,4 @@ -.Dd February 1, 2015 +.Dd February 19, 2015 .Dt COLS 1 .Os sbase .Sh NAME @@ -20,16 +20,24 @@ character columns. If no is given, .Nm reads from stdin. +.Pp +By default +.Nm cols +tries to figure out the width of the output +device. If that fails, it defaults to 65 chars. .Sh OPTIONS .Bl -tag -width Ds .It Fl c Ar chars Set the maximum number of character columns to use (unless the input contains lines longer than .Ar num -characters). By default -.Nm cols -tries to figure out the width of the output -device. If that fails, it defaults to 65 chars. +characters). +.El +.Sh ENVIRONMENT +.Bl -tag -width COLUMNS +.It COLUMNS +If this variable is set, the value is used as the +width of the output device. .El .Sh HISTORY .Nm diff --git a/cols.c b/cols.c @@ -31,6 +31,7 @@ main(int argc, char *argv[]) size_t i, l, col, len, bytes, maxlen = 0; struct winsize w; FILE *fp; + char *p; ARGBEGIN { case 'c': @@ -42,8 +43,9 @@ main(int argc, char *argv[]) } ARGEND; if (cflag == 0) { - ioctl(STDOUT_FILENO, TIOCGWINSZ, &w); - if (w.ws_col != 0) + if ((p = getenv("COLUMNS"))) + chars = estrtonum(p, 1, MIN(LLONG_MAX, SIZE_MAX)); + else if (!ioctl(STDOUT_FILENO, TIOCGWINSZ, &w) && w.ws_col > 0) chars = w.ws_col; }