So, with the original printf I had these issues

1. in the end you have a `\n\e[2C` to take the cursor back to the beginning of the prompt. However if the async command was slow and I had begun typing a shell command I don't want the cursor at the beginning but at the position where I was typing. So instead of your ending sequence I begin the sequence with `\e[s` (save position) and end it with `\e[u` (restore position).

2. When like before I have already typed something at the prompt when the async command is running your `\e[A\e[ ...` sequence will start counting from the current column position and not from the beginning of the line. Therefore the downward arrow get's printed further to the right than you intended. So I injected a `\e[1G` escape sequence which first puts the cursor in the first column before starting to count to the right.

3. The `\e[90m...\e[0m` color changing sequence was hiding the output for me because I don't have 256 colors in my terminal. So I could either change the value to something more standard like `\e[33m` or use the ZSH prompt variable expansion mechanism. I opted for the latter since you were using it elsewhere and therefore changed `printf` to `print -Pn` and used `%F{yellow}...%f` to change the color. And yeah, yellow was kind of a random so I will change it to cyan as you requested.