* print -C and terminators
[not found] ` <0421713D-25C5-477A-90AD-C0BD2B40EED2@gmail.com>
@ 2021-01-30 18:51 ` Bart Schaefer
2021-01-30 19:08 ` Beverly Pope
2021-01-30 22:47 ` Roman Perepelitsa
0 siblings, 2 replies; 6+ messages in thread
From: Bart Schaefer @ 2021-01-30 18:51 UTC (permalink / raw)
To: Zsh hackers list; +Cc: Beverly Pope, Roman Perepelitsa
On Sat, Jan 30, 2021 at 7:00 AM Beverly Pope <countryone77@gmail.com> wrote:
>
> On Jan 30, 2021, at 4:50 AM, Roman Perepelitsa <roman.perepelitsa@gmail.com> wrote:
>
> > print -rC1 --
> >
> > This command doesn't print anything.
>
> % print -rC1 -- no_such_file(N)
>
> zsh 5.8 (Ubuntu): prints nothing
> zsh 5.7.1 (Mac): prints return
Hm; I get no output, in both cases. Similarly on Centos (zsh 5.0).
This behavior seems like a bug to me. Neither -n nor -N were
specified, so "print" should always output at least a newline.
However, it's been around for quite some time and obviously some
people know about it, so I suppose it should just be documented. The
doc does make a very oblique reference to it under the -N option:
print -rNC1 -- "$list[@]" is a canonical way to print an
arbitrary list as null-delimited records.
The implication is that -C prevents the terminating NUL byte from
being printed when $list is empty.
ubuntu% print -rN -- | od -c
0000000 \0
0000001
ubuntu% print -rN -- 1 2 3 | od -c
0000000 1 \0 2 \0 3 \0
0000006
ubuntu% print -rNC1 -- | od -c
0000000
ubuntu% print -rNC1 -- 1 2 3 | od -c
0000000 1 \0 2 \0 3 \0
0000006
The related behavior of -n is a bit weird:
ubuntu% print -rnN -- | od -c
0000000
ubuntu% print -rnN -- 1 2 3 | od -c
0000000 1 \0 2 \0 3
0000005
This, however, is more questionable:
ubuntu% print -raNC1 -- 1 2 3 | od -c
0000000 1 \0 2 \0 3 \0
0000011
This explains the trailing spaces on the test case for globbing that I
posted a few days ago. I sort of get why -a needs to do that when
the column count is >1, but it shouldn't be inserting trailing spaces
when the column count is 1.
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: print -C and terminators
2021-01-30 18:51 ` print -C and terminators Bart Schaefer
@ 2021-01-30 19:08 ` Beverly Pope
2021-01-30 22:47 ` Roman Perepelitsa
1 sibling, 0 replies; 6+ messages in thread
From: Beverly Pope @ 2021-01-30 19:08 UTC (permalink / raw)
To: Bart Schaefer; +Cc: Zsh hackers list, Roman Perepelitsa
[-- Attachment #1: Type: text/plain, Size: 683 bytes --]
> On Jan 30, 2021, at 12:51 PM, Bart Schaefer <schaefer@brasslantern.com> wrote:
>
> On Sat, Jan 30, 2021 at 7:00 AM Beverly Pope <countryone77@gmail.com <mailto:countryone77@gmail.com>> wrote:
>>
>> On Jan 30, 2021, at 4:50 AM, Roman Perepelitsa <roman.perepelitsa@gmail.com <mailto:roman.perepelitsa@gmail.com>> wrote:
>>
>>> print -rC1 --
>>>
>>> This command doesn't print anything.
>>
>> % print -rC1 -- no_such_file(N)
>>
>> zsh 5.8 (Ubuntu): prints nothing
>> zsh 5.7.1 (Mac): prints return
>
Sorry! When I copied/pasted the command, I accidentally copied the return at the end of the line. I tried it again on Mac and it didn’t print anything/
[-- Attachment #2: Type: text/html, Size: 3490 bytes --]
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: print -C and terminators
2021-01-30 18:51 ` print -C and terminators Bart Schaefer
2021-01-30 19:08 ` Beverly Pope
@ 2021-01-30 22:47 ` Roman Perepelitsa
2021-01-31 1:08 ` Bart Schaefer
1 sibling, 1 reply; 6+ messages in thread
From: Roman Perepelitsa @ 2021-01-30 22:47 UTC (permalink / raw)
To: Bart Schaefer; +Cc: Zsh hackers list, Beverly Pope
On Sat, Jan 30, 2021 at 7:52 PM Bart Schaefer <schaefer@brasslantern.com> wrote:
>
> On Sat, Jan 30, 2021 at 7:00 AM Beverly Pope <countryone77@gmail.com> wrote:
> >
> > On Jan 30, 2021, at 4:50 AM, Roman Perepelitsa <roman.perepelitsa@gmail.com> wrote:
> >
> > > print -rC1 --
> > >
> > > This command doesn't print anything.
> >
> > % print -rC1 -- no_such_file(N)
>
> This behavior seems like a bug to me. Neither -n nor -N were
> specified, so "print" should always output at least a newline.
> However, it's been around for quite some time and obviously some
> people know about it, so I suppose it should just be documented.
I learned about it from the documentation for print:
-l Print the arguments separated by newlines instead of spa-
ces. Note: if the list of arguments is empty, print -l
will still output one empty line. To print a possi-
bly-empty list of arguments one per line, use print -C1,
as in `print -rC1 -- "$list[@]"'.
I don't think I ever wrote or saw code where -l is correct and -C1 is wrong.
Roman.
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: print -C and terminators
2021-01-30 22:47 ` Roman Perepelitsa
@ 2021-01-31 1:08 ` Bart Schaefer
2021-01-31 9:36 ` Stephane Chazelas
0 siblings, 1 reply; 6+ messages in thread
From: Bart Schaefer @ 2021-01-31 1:08 UTC (permalink / raw)
To: Roman Perepelitsa; +Cc: Zsh hackers list, Beverly Pope
On Sat, Jan 30, 2021 at 2:47 PM Roman Perepelitsa
<roman.perepelitsa@gmail.com> wrote:
>
> I learned about it from the documentation for print:
The paragraph about the "-l" option seems like an odd place for the
only mention of this, but the zsh doc is like that a lot.
> I don't think I ever wrote or saw code where -l is correct and -C1 is wrong.
With the exception of those doc examples, I don't think I ever saw or
wrote code where the argument to -C was less than two (unless it was a
variable). Oh, well.
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: print -C and terminators
2021-01-31 1:08 ` Bart Schaefer
@ 2021-01-31 9:36 ` Stephane Chazelas
2021-01-31 21:12 ` Bart Schaefer
0 siblings, 1 reply; 6+ messages in thread
From: Stephane Chazelas @ 2021-01-31 9:36 UTC (permalink / raw)
To: Bart Schaefer; +Cc: Roman Perepelitsa, Zsh hackers list, Beverly Pope
2021-01-30 17:08:21 -0800, Bart Schaefer:
> On Sat, Jan 30, 2021 at 2:47 PM Roman Perepelitsa
> <roman.perepelitsa@gmail.com> wrote:
> >
> > I learned about it from the documentation for print:
>
> The paragraph about the "-l" option seems like an odd place for the
> only mention of this, but the zsh doc is like that a lot.
>
> > I don't think I ever wrote or saw code where -l is correct and -C1 is wrong.
>
> With the exception of those doc examples, I don't think I ever saw or
> wrote code where the argument to -C was less than two (unless it was a
> variable). Oh, well.
[...]
I have always been annoyed at that behaviour of print -rl -
outputting an empty line when not being given any argument (and
print -f '%s\n' -- has the same problem).
Until I saw someone on unix.stackexchange.com use print -rC1 --
which addresses the problem. I was the one suggesting it be more
explicitly documented at
https://www.zsh.org/mla/workers/2019/msg01202.html
Since then, I've replaced all my (broken) usages of print -rl
with print -rC1.
I agree it wouldn't harm to also clarify in the -C documentation
that nothing is output if no argument is given.
This:
~$ print -raC2 a b c | sed -n l
a b $
c $
(
~$ print -rC2 a b c | sed -n l
a c$
b$
)
could also be improved.
--
Stephane
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: print -C and terminators
2021-01-31 9:36 ` Stephane Chazelas
@ 2021-01-31 21:12 ` Bart Schaefer
0 siblings, 0 replies; 6+ messages in thread
From: Bart Schaefer @ 2021-01-31 21:12 UTC (permalink / raw)
To: Bart Schaefer, Roman Perepelitsa, Zsh hackers list, Beverly Pope
On Sun, Jan 31, 2021 at 1:36 AM Stephane Chazelas <stephane@chazelas.org> wrote:
>
> ~$ print -raC2 a b c | sed -n l
> a b $
> c $
>
> could also be improved.
Is that just this?
diff --git a/Src/builtin.c b/Src/builtin.c
index 09eb3728c..35a0fb2db 100644
--- a/Src/builtin.c
+++ b/Src/builtin.c
@@ -4822,7 +4822,7 @@ bin_print(char *name, char **args, Options ops, int func)
{
fwrite(args[n], len[n], 1, fout);
l = widths[n];
- if (n < argc)
+ if (n < argc && ic < nc - 1)
for (; l < sc; l++)
fputc(' ', fout);
}
^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2021-01-31 21:12 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
[not found] <d611ab66-c6f9-655f-89dc-ded8697fe0ed@eastlink.ca>
[not found] ` <CAN=4vMp+JykOWEYQ5qO495-hOpQXh+4RN6iHcYTP-APg8XHESQ@mail.gmail.com>
[not found] ` <CAH+w=7bN7miEudLZcLknDQH3im=u8CCe_3GUqtEJMtyidV8bUg@mail.gmail.com>
[not found] ` <CAN=4vMop86hkyYMaBkF-tJaVRaN5Z28gJLqL9tSdy-uy1DNMgg@mail.gmail.com>
[not found] ` <0421713D-25C5-477A-90AD-C0BD2B40EED2@gmail.com>
2021-01-30 18:51 ` print -C and terminators Bart Schaefer
2021-01-30 19:08 ` Beverly Pope
2021-01-30 22:47 ` Roman Perepelitsa
2021-01-31 1:08 ` Bart Schaefer
2021-01-31 9:36 ` Stephane Chazelas
2021-01-31 21:12 ` Bart Schaefer
Code repositories for project(s) associated with this public inbox
https://git.vuxu.org/mirror/zsh/
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).