1
0
Fork 0
mirror of git://git.code.sf.net/p/zsh/code synced 2025-11-23 01:31:27 +01: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> 2002-11-13 Clint Adams <clint@zsh.org>
* 17935: Src/text.c: beautify bin_whence indentation of () * 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. `tt(-)' in this context are swapped.
) )
findex(print) 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 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 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: 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. sequence, `tt(\)' escapes the following character and is not printed.
startitem() startitem()
item(tt(-r))( item(tt(-a))(
Ignore the escape conventions of tt(echo). Print arguments with the column incrementing first. Only useful with the
) tt(-c) and tt(-C) options.
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(-b))( item(tt(-b))(
Recognize all the escape sequences defined for the tt(bindkey) command, Recognize all the escape sequences defined for the tt(bindkey) command,
@ -683,20 +679,33 @@ ifzman(zmanref(zshzle))\
ifnzman(noderef(Zle Builtins))\ 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))( item(tt(-m))(
Take the first argument as a pattern (should be quoted), and remove Take the first argument as a pattern (should be quoted), and remove
it from the argument list together with subsequent arguments that it from the argument list together with subsequent arguments that
do not match this pattern. do not match this pattern.
) )
item(tt(-s))(
Place the results in the history list instead of on the standard output.
)
item(tt(-n))( item(tt(-n))(
Do not add a newline to the output. Do not add a newline to the output.
) )
item(tt(-l))(
Print the arguments separated by newlines instead of spaces.
)
item(tt(-N))( item(tt(-N))(
Print the arguments separated and terminated by nulls. Print the arguments separated and terminated by nulls.
) )
@ -706,32 +715,33 @@ Print the arguments sorted in ascending order.
item(tt(-O))( item(tt(-O))(
Print the arguments sorted in descending order. 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))( item(tt(-p))(
Print the arguments to the input of the coprocess. 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))( item(tt(-P))(
Perform prompt expansion (see Perform prompt expansion (see
ifzman(zmanref(zshmisc))\ ifzman(zmanref(zshmisc))\
ifnzman(noderef(Prompt Expansion))\ 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() enditem()
If any of `tt(-m)', `tt(-o)' or `tt(-O)' are used in combination with 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 #endif
BUILTIN("popd", 0, bin_cd, 0, 1, BIN_POPD, NULL, NULL), 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("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("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"), 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 { } else {
fd = (int)zstrtol(argptr, &eptr, 10); fd = (int)zstrtol(argptr, &eptr, 10);
if (*eptr) { if (*eptr) {
zwarnnam(name, "number expected after -u: %s", argptr, 0); zwarnnam(name, "number expected after -%c: %s", argptr,
'u');
return 1; return 1;
} }
} }
@ -3209,21 +3210,61 @@ bin_print(char *name, char **args, Options ops, int func)
len[n] = strlen(args[n]); len[n] = strlen(args[n]);
/* -c -- output in columns */ /* -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; int l, nc, nr, sc, n, t, i;
char **ap; char **ap;
/*
* n: loop counter
* ap: array iterator
* l: maximum length seen
*/
for (n = l = 0, ap = args; *ap; ap++, n++) for (n = l = 0, ap = args; *ap; ap++, n++)
if (l < (t = strlen(*ap))) if (l < (t = strlen(*ap)))
l = t; l = t;
/*
* sc: column width
* nc: number of columns (at least one)
*/
sc = l + 2; sc = l + 2;
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; nc = (columns + 1) / sc;
if (!nc) if (!nc)
nc = 1; nc = 1;
}
nr = (n + nc - 1) / nc; nr = (n + nc - 1) / nc;
if (OPT_ISSET(ops,'a')) /* print across, i.e. columns first */
ap = args;
for (i = 0; i < nr; i++) { for (i = 0; i < nr; i++) {
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; ap = args + i;
do { do {
l = strlen(*ap); l = strlen(*ap);
@ -3233,6 +3274,7 @@ bin_print(char *name, char **args, Options ops, int func)
for (; l < sc; l++) for (; l < sc; l++)
fputc(' ', fout); fputc(' ', fout);
} while (*ap); } while (*ap);
}
fputc(OPT_ISSET(ops,'N') ? '\0' : '\n', fout); fputc(OPT_ISSET(ops,'N') ? '\0' : '\n', fout);
} }
/* Testing EBADF special-cases >&- redirections */ /* Testing EBADF special-cases >&- redirections */
@ -4104,7 +4146,7 @@ bin_read(char *name, char **args, Options ops, int func)
} else { } else {
readfd = (int)zstrtol(argptr, &eptr, 10); readfd = (int)zstrtol(argptr, &eptr, 10);
if (*eptr) { if (*eptr) {
zwarnnam(name, "number expected after -u: %s", argptr, 0); zwarnnam(name, "number expected after -%c: %s", argptr, 'u');
return 1; return 1;
} }
} }