diff options
-rw-r--r-- | ChangeLog | 3 | ||||
-rw-r--r-- | Doc/Zsh/prompt.yo | 12 | ||||
-rw-r--r-- | Src/prompt.c | 10 |
3 files changed, 25 insertions, 0 deletions
diff --git a/ChangeLog b/ChangeLog index 11b29abde..347743fe5 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,8 @@ 2008-02-15 Peter Stephenson <p.w.stephenson@ntlworld.com> + * 24556: Doc/Zsh/prompt.yo, Src/prompt.c: %G inside %{...%} + can be used to count width of "glitch" characters. + * 24554: Src/Zle/complist.c: push an extra heap for complistmatches() to stop accumulating it; always treat mcolors as a global instead of just sometimes. diff --git a/Doc/Zsh/prompt.yo b/Doc/Zsh/prompt.yo index 456a0bc0e..66e2b9015 100644 --- a/Doc/Zsh/prompt.yo +++ b/Doc/Zsh/prompt.yo @@ -188,6 +188,18 @@ Include a string as a literal escape sequence. The string within the braces should not change the cursor position. Brace pairs can nest. ) +item(tt(%G))( +Within a tt(%{)...tt(%}) sequence, include a `glitch': that is, assume +that a single character width will be output. This is useful when +outputting characters that otherwise cannot be correctly handled by the +shell, such as the alternate character set on some terminals. +The characters in question can be included within a tt(%{)...tt(%}) +sequence together with the appropriate number of tt(%G) sequences to +indicate the correct width. An integer between the `tt(%)' and `tt(G)' +indicates a character width other than one. Hence tt(%{)var(seq)tt(%2G%}) +outputs var(seq) and assumes it takes up the width of two standard +characters. +) enditem() sect(Conditional Substrings in Prompts) diff --git a/Src/prompt.c b/Src/prompt.c index 68a55a3fd..54baf47ed 100644 --- a/Src/prompt.c +++ b/Src/prompt.c @@ -473,6 +473,16 @@ putpromptchar(int doprint, int endchar) *bp++ = Inpar; } break; + case 'G': + if (arg > 0) { + addbufspc(arg); + while (arg--) + *bp++ = Nularg; + } else { + addbufspc(1); + *bp++ = Nularg; + } + break; case /*{*/ '}': if (trunccount && trunccount >= dontcount) return *fm; |