Matt Kline
Matt Kline

Reputation: 10487

zsh inserts extra spaces when performing searches and completion

I have written a small program that emits a command line prompt with some Git info. I use ANSI escape sequences to color it, and it looks something like this:

prompt example

However, whenever I do tab completion or a search, zsh inserts several spaces after the prompt:

spacing bug

It seems to be inserting a space for each escape code character emitted by the prompt, since removing the color codes eliminates this behavior. Why is zsh doing so, and how can I stop this?

The actual character sequence emitted by my prompt program for this example is (assuming \e represents character 033)

~/s/promptd [\e[36mmaster \e[33m±\e[31m?\e[39m]

The relevant portion of my .zshrc is:

setopt PROMPT_SUBST
setopt PROMPT_PERCENT
PROMPT='%B$(promptd) %%%b '

Upvotes: 5

Views: 2448

Answers (1)

Matt Kline
Matt Kline

Reputation: 10487

After doing some additional research, the ZSH Prompt Expansion docs indicate that escape literals need to be enclosed in %{...%}.

This is bothersome since now I have to output those conditionally if I want the prompt program to work in other shells, but it seems to correct the behavior shown above.

Upvotes: 4

Related Questions