Zsh Mailing List Archive
Messages sorted by: Reverse Date, Date, Thread, Author

coloring substitution seems to eat next line.



So I'm trying to replace a sed with native zsh code.  This stuff in inside a 'for' loop with 'aa' as the counter and  '$filter' is 'zsh':

    cc[$aa]=$( print -r $cc[$aa] | sed -rn "s/($filter)/\x1b\[$color;1m\1\x1b\[0m/${sed_case}gp" )

... that's the sed version working fine.  But this:

    print "going in: $cc[aa]"

    cc[aa]=( ${${cc[aa]}//(#b)((#i)${filter})/$'\e[31;1m'${match[1]}$'\e[0m'} )

    print "coming out: $cc[aa]"

... almost works but it seems to eat the next element of the array every now and then with no pattern that I can discern.

/aWorking/garbageZSH              colored
/usr/share/zsh                            colored
/aWorking/Zsh                            disappears going in but seems to be there going out , but not colored
/aWorking/Backup/Zsh                ditto
/aWorking/Zsh-55555                  colored
/aWorking/Zsh/Zsh-5.8                no color as with above
/usr/share/doc/zsh-common        ditto

... however if I make the output array different from the input array everything is fine.  But I've always had success with that sort of array being overwritten by some manipulation of itself, tho it seems dangerous.  sed has no issue with it.   Anyway, the expansion seems to interfere with the the clean separation of the elements that I'm hoping for.  Using a separate output array is fine, still I'm curious as to what's going on.  In particular the way some lines seem to disappear going 'in' -- I print the array element -- and get nothing at all, but there is output ... which seems impossible (tho it's never colorized).  It seems the expansion/substitution is ignoring line endings or some such.   I don't doubt there's some logic to what's happening but I sure don't get it.  It hasta be line separated.








Messages sorted by: Reverse Date, Date, Thread, Author