I doubt this is zsh's problem but she may have a solution just the same. I do this in my 'i' function:
width=${=$( stty size )[2]}
... and it works fine, however if I call the function thusly:
_function_test ()
{
local integer i=0
while read aa; do
let i++
eval ${=aa} 2> /dev/null
done
}
$ _function_test <<< "i path"
... 'width' is zero. I think this is some 'stty' issue, still the function will be running in a terminal and the terminal has a width so it puzzles me that no width can be reported.