1
0
Fork 0
mirror of git://git.code.sf.net/p/zsh/code synced 2025-09-11 00:51:05 +02:00

17940: Add -C and -a options to print builtin

This commit is contained in:
Peter Stephenson 2002-11-20 12:37:43 +00:00
parent e580d5d767
commit bbbc5536da
3 changed files with 106 additions and 48 deletions

View file

@ -1,3 +1,9 @@
2002-11-20 Peter Stephenson <pws@csr.com>
* 17940: Src/builtin.c, Doc/Zsh/builtin.yo: print -C <cols> prints
given number of columns, -a with -c or -C prints arguments across
before down.
2002-11-13 Clint Adams <clint@zsh.org>
* 17935: Src/text.c: beautify bin_whence indentation of ()

View file

@ -655,7 +655,8 @@ If the tt(PUSHD_MINUS) option is set, the meanings of `tt(PLUS())' and
`tt(-)' in this context are swapped.
)
findex(print)
item(tt(print) [ tt(-bnrslzpNDPoOicm) ] [ tt(-u)var(n) ] [ tt(-f) var(format) ] [ tt(-R) [ tt(-en) ]] [ var(arg) ... ])(
xitem(tt(print) [ tt(-abcDilmnNoOpPrsz) ] [ tt(-u)var(n) ] [ tt(-f) var(format) ] [ tt(-C) var(cols) ])
item( [ tt(-R) [ tt(-en) ]] [ var(arg) ... ])(
With the `tt(-f)' option the arguments are printed as described by tt(printf).
With no flags or with the flag `tt(-)', the arguments are printed on
the standard output as described by tt(echo), with the following differences:
@ -667,14 +668,9 @@ Finally, if not in an escape
sequence, `tt(\)' escapes the following character and is not printed.
startitem()
item(tt(-r))(
Ignore the escape conventions of tt(echo).
)
item(tt(-R))(
Emulate the BSD tt(echo) command, which does not process escape sequences
unless the tt(-e) flag is given. The tt(-n) flag suppresses the trailing
newline. Only the tt(-e) and tt(-n) flags are recognized after
tt(-R); all other arguments and options are printed.
item(tt(-a))(
Print arguments with the column incrementing first. Only useful with the
tt(-c) and tt(-C) options.
)
item(tt(-b))(
Recognize all the escape sequences defined for the tt(bindkey) command,
@ -683,20 +679,33 @@ ifzman(zmanref(zshzle))\
ifnzman(noderef(Zle Builtins))\
.
)
item(tt(-c))(
Print the arguments in columns. Unless tt(-a) is also given, arguments are
printed with the row incrementing first.
)
item(tt(-C) var(cols))(
Print the arguments in var(cols) columns. Unless tt(-a) is also given,
arguments are printed with the row incrementing first.
)
item(tt(-D))(
Treat the arguments as directory names, replacing prefixes with tt(~)
expressions, as appropriate.
)
item(tt(-i))(
If given together with tt(-o) or tt(-O), sorting is performed
case-independently.
)
item(tt(-l))(
Print the arguments separated by newlines instead of spaces.
)
item(tt(-m))(
Take the first argument as a pattern (should be quoted), and remove
it from the argument list together with subsequent arguments that
do not match this pattern.
)
item(tt(-s))(
Place the results in the history list instead of on the standard output.
)
item(tt(-n))(
Do not add a newline to the output.
)
item(tt(-l))(
Print the arguments separated by newlines instead of spaces.
)
item(tt(-N))(
Print the arguments separated and terminated by nulls.
)
@ -706,32 +715,33 @@ Print the arguments sorted in ascending order.
item(tt(-O))(
Print the arguments sorted in descending order.
)
item(tt(-i))(
If given together with tt(-o) or tt(-O), sorting is performed
case-independently.
)
item(tt(-c))(
Print the arguments in columns.
)
item(tt(-u)var(n))(
Print the arguments to file descriptor var(n).
)
item(tt(-p))(
Print the arguments to the input of the coprocess.
)
item(tt(-z))(
Push the arguments onto the editing buffer stack, separated by spaces.
)
item(tt(-D))(
Treat the arguments as directory names, replacing prefixes with tt(~)
expressions, as appropriate.
)
item(tt(-P))(
Perform prompt expansion (see
ifzman(zmanref(zshmisc))\
ifnzman(noderef(Prompt Expansion))\
).
)
item(tt(-r))(
Ignore the escape conventions of tt(echo).
)
item(tt(-R))(
Emulate the BSD tt(echo) command, which does not process escape sequences
unless the tt(-e) flag is given. The tt(-n) flag suppresses the trailing
newline. Only the tt(-e) and tt(-n) flags are recognized after
tt(-R); all other arguments and options are printed.
)
item(tt(-s))(
Place the results in the history list instead of on the standard output.
)
item(tt(-u)var(n))(
Print the arguments to file descriptor var(n).
)
item(tt(-z))(
Push the arguments onto the editing buffer stack, separated by spaces.
)
enditem()
If any of `tt(-m)', `tt(-o)' or `tt(-O)' are used in combination with

View file

@ -100,7 +100,7 @@ static struct builtin builtins[] =
#endif
BUILTIN("popd", 0, bin_cd, 0, 1, BIN_POPD, NULL, NULL),
BUILTIN("print", BINF_PRINTOPTS, bin_print, 0, -1, BIN_PRINT, "RDPbnrsf:lzNu:pioOcm-", NULL),
BUILTIN("print", BINF_PRINTOPTS, bin_print, 0, -1, BIN_PRINT, "abcC:Df:ilmnNoOpPrRsu:z-", NULL),
BUILTIN("printf", 0, bin_print, 1, -1, BIN_PRINTF, NULL, NULL),
BUILTIN("pushd", BINF_SKIPINVALID | BINF_SKIPDASH | BINF_DASHDASHVALID, bin_cd, 0, 2, BIN_PUSHD, "sPL", NULL),
BUILTIN("pushln", BINF_PRINTOPTS, bin_print, 0, -1, BIN_PRINT, NULL, "-nz"),
@ -3172,7 +3172,8 @@ bin_print(char *name, char **args, Options ops, int func)
} else {
fd = (int)zstrtol(argptr, &eptr, 10);
if (*eptr) {
zwarnnam(name, "number expected after -u: %s", argptr, 0);
zwarnnam(name, "number expected after -%c: %s", argptr,
'u');
return 1;
}
}
@ -3209,30 +3210,71 @@ bin_print(char *name, char **args, Options ops, int func)
len[n] = strlen(args[n]);
/* -c -- output in columns */
if (OPT_ISSET(ops,'c')) {
if (OPT_ISSET(ops,'c') || OPT_ISSET(ops,'C')) {
int l, nc, nr, sc, n, t, i;
char **ap;
/*
* n: loop counter
* ap: array iterator
* l: maximum length seen
*/
for (n = l = 0, ap = args; *ap; ap++, n++)
if (l < (t = strlen(*ap)))
l = t;
/*
* sc: column width
* nc: number of columns (at least one)
*/
sc = l + 2;
nc = (columns + 1) / sc;
if (!nc)
nc = 1;
if (OPT_ISSET(ops,'C')) {
char *eptr, *argptr = OPT_ARG(ops,'C');
nc = (int)zstrtol(argptr, &eptr, 10);
if (*eptr) {
zwarnnam(name, "number expected after -%c: %s", argptr, 'C');
return 1;
}
if (nc <= 0) {
zwarnnam(name, "invalid number of columns: %s", argptr, 0);
return 1;
}
}
else
{
nc = (columns + 1) / sc;
if (!nc)
nc = 1;
}
nr = (n + nc - 1) / nc;
if (OPT_ISSET(ops,'a')) /* print across, i.e. columns first */
ap = args;
for (i = 0; i < nr; i++) {
ap = args + i;
do {
l = strlen(*ap);
fprintf(fout, "%s", *ap);
for (t = nr; t && *ap; t--, ap++);
if(*ap)
for (; l < sc; l++)
fputc(' ', fout);
} while (*ap);
if (OPT_ISSET(ops,'a'))
{
int ic;
for (ic = 0; ic < nc && *ap; ic++, ap++)
{
l = strlen(*ap);
fprintf(fout, "%s", *ap);
if (*ap)
for (; l < sc; l++)
fputc(' ', fout);
}
}
else
{
ap = args + i;
do {
l = strlen(*ap);
fprintf(fout, "%s", *ap);
for (t = nr; t && *ap; t--, ap++);
if(*ap)
for (; l < sc; l++)
fputc(' ', fout);
} while (*ap);
}
fputc(OPT_ISSET(ops,'N') ? '\0' : '\n', fout);
}
/* Testing EBADF special-cases >&- redirections */
@ -4104,7 +4146,7 @@ bin_read(char *name, char **args, Options ops, int func)
} else {
readfd = (int)zstrtol(argptr, &eptr, 10);
if (*eptr) {
zwarnnam(name, "number expected after -u: %s", argptr, 0);
zwarnnam(name, "number expected after -%c: %s", argptr, 'u');
return 1;
}
}