zsh-workers
 help / color / mirror / code / Atom feed
* unicode in prompt breaks command search
@ 2020-01-16 21:43 Nathan Sidwell
  2020-01-17  1:25 ` dana
  0 siblings, 1 reply; 4+ messages in thread
From: Nathan Sidwell @ 2020-01-16 21:43 UTC (permalink / raw)
  To: zsh-workers

For reasons, I put a multibyte unicode char in $PROMPT, this ends up 
messing with zsh's idea of the current column, as it doesn't understand 
the display width of $PROMPT.

For example reverse search, here's an example using <f0><9f><a1><85>

set PROMPT="🡅"

press C-r, see cursor gets indented another 3 spaces -- we're now at 
column 5, which would be correct if each byte of $PROMPT was a separate 
display char.

A slightly modified example is to enter some text before pressing C-r, 
then the first 3 chars get retained on the display (but not the input 
buffer at least).

Is this supposed to work?

This is ZSH 5.2 on a fedora 30 system, and an XFCE terminal.  Let me 
know if you need more info (I'm not on the list).

nathan
-- 
Nathan Sidwell


^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: unicode in prompt breaks command search
  2020-01-16 21:43 unicode in prompt breaks command search Nathan Sidwell
@ 2020-01-17  1:25 ` dana
  2020-01-17  8:23   ` Roman Perepelitsa
  2020-01-17 12:05   ` Nathan Sidwell
  0 siblings, 2 replies; 4+ messages in thread
From: dana @ 2020-01-17  1:25 UTC (permalink / raw)
  To: Nathan Sidwell; +Cc: zsh-workers

On 16 Jan 2020, at 15:43, Nathan Sidwell <nathan@acm.org> wrote:
> For reasons, I put a multibyte unicode char in $PROMPT, this ends up messing
> with zsh's idea of the current column, as it doesn't understand the display
> width of $PROMPT.

You need to tell it what it is with the %{/%} and/or %G escape sequences. For
example, all of these are roughly equivalent and let zsh know that アイウエオ
takes up ten columns:

  PROMPT='%10{アイウエオ%}'
  PROMPT='%{アイウエオ%10G%}'
  PROMPT='%{%2Gア%2Gイ%2Gウ%2Gエ%2Gオ%}'

%{...%} without a leading digit or embedded %G is zero-width (useful for
invisible escape sequences).

http://zsh.sourceforge.net/Doc/Release/Prompt-Expansion.html#Visual-effects

(I don't think the behaviour of these sequences has changed since 5.2, but you
can check your zshmisc(1) to be sure)

dana


^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: unicode in prompt breaks command search
  2020-01-17  1:25 ` dana
@ 2020-01-17  8:23   ` Roman Perepelitsa
  2020-01-17 12:05   ` Nathan Sidwell
  1 sibling, 0 replies; 4+ messages in thread
From: Roman Perepelitsa @ 2020-01-17  8:23 UTC (permalink / raw)
  To: dana; +Cc: Nathan Sidwell, Zsh hackers list

Zsh can figure out how many columns Unicode characters take provided
that you configure locale correctly. The most common reason why Zsh
might think that every byte is one character is because the encoding
in the current locale is not UTF-8.

There might be other reasons for the behavior you describe. This entry
from powerlevel10k FAQ can be helpful in diagnosing the problem:
https://github.com/romkatv/powerlevel10k/blob/master/README.md#why-is-my-cursor-in-the-wrong-place.
It's mostly not specific to powerlevel10k.

Roman.

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: unicode in prompt breaks command search
  2020-01-17  1:25 ` dana
  2020-01-17  8:23   ` Roman Perepelitsa
@ 2020-01-17 12:05   ` Nathan Sidwell
  1 sibling, 0 replies; 4+ messages in thread
From: Nathan Sidwell @ 2020-01-17 12:05 UTC (permalink / raw)
  To: dana, roman.perepelitsa; +Cc: zsh-workers

On 1/16/20 8:25 PM, dana wrote:
> On 16 Jan 2020, at 15:43, Nathan Sidwell <nathan@acm.org> wrote:
>> For reasons, I put a multibyte unicode char in $PROMPT, this ends up messing
>> with zsh's idea of the current column, as it doesn't understand the display
>> width of $PROMPT.
> 
> You need to tell it what it is with the %{/%} and/or %G escape sequences. For
> example, all of these are roughly equivalent and let zsh know that アイウエオ
> takes up ten columns:
> 
>    PROMPT='%10{アイウエオ%}'
>    PROMPT='%{アイウエオ%10G%}'
>    PROMPT='%{%2Gア%2Gイ%2Gウ%2Gエ%2Gオ%}'
> 
> %{...%} without a leading digit or embedded %G is zero-width (useful for
> invisible escape sequences).
> 
> http://zsh.sourceforge.net/Doc/Release/Prompt-Expansion.html#Visual-effects
> 
> (I don't think the behaviour of these sequences has changed since 5.2, but you
> can check your zshmisc(1) to be sure)

On 1/17/20 3:23 AM, Roman Perepelitsa wrote:
> Zsh can figure out how many columns Unicode characters take provided
> that you configure locale correctly. The most common reason why Zsh
> might think that every byte is one character is because the encoding
> in the current locale is not UTF-8.

thanks for the pointers!

nathan
-- 
Nathan Sidwell

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2020-01-17 12:05 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-01-16 21:43 unicode in prompt breaks command search Nathan Sidwell
2020-01-17  1:25 ` dana
2020-01-17  8:23   ` Roman Perepelitsa
2020-01-17 12:05   ` Nathan Sidwell

Code repositories for project(s) associated with this public inbox

	https://git.vuxu.org/mirror/zsh/

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).