mirror of
git://git.code.sf.net/p/zsh/code
synced 2025-09-11 13:01:28 +02:00
17940: Add -C and -a options to print builtin
This commit is contained in:
parent
e580d5d767
commit
bbbc5536da
3 changed files with 106 additions and 48 deletions
|
@ -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 ()
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue