Finish up cols(1)

This commit is contained in:
FRIGN 2015-02-01 00:55:22 +01:00
parent 7cdb24d085
commit 5a20d0e9d7
3 changed files with 16 additions and 14 deletions

2
README
View File

@ -18,7 +18,7 @@ The following tools are implemented ('*' == finished, '#' == UTF-8 support,
=* chroot non-posix none
=* cksum yes none
cmp yes none
cols non-posix none
#* cols non-posix none
=* comm yes none
= cp no -H, (-i), -L
=* cron non-posix none

22
cols.1
View File

@ -1,4 +1,4 @@
.Dd December 8, 2014
.Dd February 1, 2015
.Dt COLS 1
.Os sbase
.Sh NAME
@ -6,34 +6,36 @@
.Nd columnize output
.Sh SYNOPSIS
.Nm
.Op Fl c Ar chars
.Op Fl c Ar num
.Op Ar file ...
.Sh DESCRIPTION
.Nm
reads each file in sequence and writes them to stdout, in as many vertical
reads each
.Ar file
in sequence and writes them to stdout, in as many vertical
columns as will fit in
.Ar chars
.Ar num
character columns. If no
.Ar file
is given,
.Nm
reads from stdin.
.Sh OPTIONS
.Bl -tag -width xxxxxxxx
.Bl -tag -width Ds
.It Fl c Ar chars
Specifies the maximum number of character columns to use
Set the maximum number of character columns to use
(unless the input contains lines longer than
.Ar chars
.Ar num
characters). By default cols tries to figure out the width of the output
device, if that fails it defaults to 65 chars.
device. If that fails, it defaults to 65 chars.
.El
.Sh HISTORY
.Nm
is similar to the mc(1) command on Plan 9. It was renamed to
is similar to mc(1) in Plan 9. It was renamed to
.Nm
to avoid the name collision with the popular file manager
Midnight Commander.
.Sh BUGS
.Sh CAVEATS
This implementation of
.Nm
assumes that each UTF-8 code point occupies one character cell,

6
cols.c
View File

@ -12,7 +12,7 @@
#include "util.h"
static size_t chars = 65;
static int cflag;
static int cflag;
static struct linebuf b = EMPTY_LINEBUF;
static size_t n_columns;
@ -58,8 +58,8 @@ main(int argc, char *argv[])
for (l = 0; l < b.nlines; ++l) {
len = utflen(b.lines[l]);
bytes = strlen(b.lines[l]);
if (len > 0 && b.lines[l][bytes-1] == '\n') {
b.lines[l][bytes-1] = '\0';
if (len > 0 && b.lines[l][bytes - 1] == '\n') {
b.lines[l][bytes - 1] = '\0';
--len;
}
if (len > maxlen)