Zsh Mailing List Archive
Messages sorted by:
Reverse Date,
Date,
Thread,
Author
The elements of enlightenment
- X-seq: zsh-users 28481
- From: Ray Andrews <rayandrews@xxxxxxxxxxx>
- To: Zsh Users <zsh-users@xxxxxxx>
- Subject: The elements of enlightenment
- Date: Mon, 5 Dec 2022 07:57:45 -0800
- Archived-at: <https://zsh.org/users/28481>
- List-id: <zsh-users.zsh.org>
I think I've finally actually figured out the reason that lines aren't
elements and elements aren't lines even though they can print exactly
the same:
$ list=( $( setopt ) )
... We get word splitting and the option and the value 'print -l' on
different lines and '$#list' is the count of the number of words/lines
namely twice the number of options. Good, fine, and understood. But I
want the option and it's value on the same line, just as if 'setopt' was
executed at CLI. By double quoting: ( "$( setopt )" ) we seem to have
solved the problem, it prints correctly. But trouble lurks in the
shadows. I do this:
$ list=( "${list[@]/ off/${red} off${nrm}}" )
... And I'm baffled that only the very first 'off' is colorized. Why?
Because '$#list' = 1! It looks like we have each line as a separate
element but we don't. It only looks that way because the newlines in
the output are still in there, they aren't 'print -l' newlines, they're
newlines in the data itself!! They look the same but they are *not* the
same. To really get what it looks like I have I must first:
$ list=( ${(f)list} )
NOW our element count is what we want it to be -- one per line and every
'off' get colored. Newlines aren't elements and elements aren't
newlines. Finally! I'll never be fooled by appearances again. Do I
have this right? Only took ten years :(
Messages sorted by:
Reverse Date,
Date,
Thread,
Author