From: Advait Maybhate <advait@warp.dev>
To: zsh-workers@zsh.org
Cc: Aloke Desai <aloke@warp.dev>, Zach Bai <zachbai@warp.dev>
Subject: [BUG] ZLE character width with emoji presentation variation selectors in Unicode
Date: Thu, 9 May 2024 10:45:32 -0400 [thread overview]
Message-ID: <CAN+tYMf4fH2Lkww5nzAB24fGZ6uJAt7r_FpRcFocYpaYOD=1Yw@mail.gmail.com> (raw)
[-- Attachment #1: Type: text/plain, Size: 2275 bytes --]
Hey folks!
Wanted to file a bug report/get a discussion going on the best way to
handle emoji variation selectors with Unicode characters.
Metadata:
Zsh version: zsh 5.9 (x86_64-apple-darwin23.0), OS version: macOS Sonoma
14.3.1
Terminal: tested across Warp, Kitty, default Mac terminal, Alacritty, iTerm
2
ZLE incorrectly treats characters with the emoji variation selector as 1
character instead of 2 characters, causing off-by-one cursor movement
issues in terminals that (correctly) treat it as 2 characters.
This is most easily reproduced in Kitty (v0.34), which renders and
calculates these emojis as 2 cells (most terminal emulators seem to
incorrectly handle this case of Unicode).
To repro:
-
Paste in the command “echo ☁️” into Kitty (the last character is \0x2601
followed by \0xFE0F). Note that this results in bracketed paste mode in Zsh.
Expected behavior:
-
ZLE contains “echo ☁️”.
Actual behavior:
-
ZLE contains “eecho ☁️” (note the additional “e” at the beginning here -
inverted colors from the bracketed paste). Confirmed that this is due to
an off-by-one on the cursor instruction, from the PTY recording.
Screenshot: link
<https://github.com/warpdotdev/Warp/assets/12927474/b8ae2aae-7be4-4a9b-a471-423d098b5c8a>
I’d love to discuss how to fix this for terminals that do respect variation
selectors. One way to do this could be via a new `terminfo` entry, but I’d
love to know what ZSH devs think! I’m an engineer building the Warp
terminal, so I’d be happy to work on any terminal-side changes of this with
`terminfo` (we actually use bracketed paste mode for all commands, to best
support multiline commands with Warp's input editor)!
Notably, Fish 3.6 seems to calculate the width correctly as 2 cells (this
is what originally prompted my investigation, due to the Starship prompt -
see fish-shell/issues/10461
<https://github.com/fish-shell/fish-shell/issues/10461>), along with Bash
(using bracketed paste with Bash 5.2).
I’ve seen 2017/msg00432 <https://www.zsh.org/mla/users/2017/msg00432.html>
which is related to this, but deals with 0xFE0E not 0xFE0F.
Thanks!
Best,
Advait
[-- Attachment #2: Type: text/html, Size: 12804 bytes --]
next reply other threads:[~2024-05-09 14:46 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-05-09 14:45 Advait Maybhate [this message]
2024-05-10 9:37 ` Mikael Magnusson
2024-05-10 9:54 ` Mikael Magnusson
2024-05-10 17:11 ` Advait Maybhate
2024-05-10 18:57 ` Mikael Magnusson
2024-05-14 0:08 ` Advait Maybhate
2024-05-10 20:40 ` Bart Schaefer
2024-05-14 0:04 ` Advait Maybhate
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to='CAN+tYMf4fH2Lkww5nzAB24fGZ6uJAt7r_FpRcFocYpaYOD=1Yw@mail.gmail.com' \
--to=advait@warp.dev \
--cc=aloke@warp.dev \
--cc=zachbai@warp.dev \
--cc=zsh-workers@zsh.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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).