You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Add support for Variation Selector 15 / U+FE0E (Original Title: Unicode Pawn does not display like other Unicode chess symbols) #13110
I expected it to match the current foreground color of the terminal similar to the other chess related Unicode symbols.
Actual Behavior
The pawn is always purple. Here's a screenshot of my chess game output in the windows terminal:
I can change the foreground color for all the other pieces using ANSI color codes but the pawn is always purple.
Reacted by Cees Timmerman, Zac Vuković, VonC, ruji-he-zstk, Joost Houben, Gegham Zakaryan, Jakub Kuczys and Oleg Aprelikov
Looks like the black pawn is an emoji, when the others aren't.
I suspect this is because the chess characters aren't in Cascadia Code (or most fonts), dwrite looks up the glyph in some other font that does have it, and the emoji font shows up higher in the search list than wherever the other pieces are coming from. Hmm.
Might not be anything we can do here besides changing the font fallback order for glyphs (#2664)
See also #6864, but like the opposite. The black bawn is "emoji yes, emoji-presentation no", so it shouldn't be rendered by dwrite as an emoji, but it is. Hmm.
My understanding is that there are a number of glyphs that have both a text presentation and an emoji presentation, and you can use a variant selector to choose which style you want. They each have a default style though (when no variant selector is used), and in the case of the black pawn, the default style is meant to be text.
I suspect this is because the chess characters aren't in Cascadia Code (or most fonts), dwrite looks up the glyph in some other font that does have it, and the emoji font shows up higher in the search list than wherever the other pieces are coming from.
The issue you linked would help a lot, enabling us to set it up the way we want on our own PCs. However it's not a great solution for if I wanted to distribute software that uses those symbols though. I would have to instruct all users on how to install a special font correctly if they are using Windows Terminal. Any ideas on how to address where the default is coming from?
If it was consistent and all the Unicode chess pieces were rendered as emoji, that would okay too. At least they would be usable together.
Seems like this isn't limited to Windows Terminal:
Discord has a similar issue:
And in Chrome:
I'm not sure if that means it's a Windows OS problem, or the best way to report that if it is. Maybe I should report it in the WinUI repo? https://github.com/microsoft/microsoft-ui-xaml Seems like they would probably just have to escalate it to whoever works on DirectWrite or something too though.
My understanding is that there are a number of glyphs that have both a text presentation and an emoji presentation, and you can use a variant selector to choose which style you want. They each have a default style though (when no variant selector is used), and in the case of the black pawn, the default style is meant to be text.
Apparently U+FE00 - U+FE0F are supposed to be variant selectors which you put after the Unicode character you want to modify. I'm having a hard time finding documentation on which ones do what though. In my testing in WT, all of them just make the character double wide (which is how my chess board looks so square in the first screenshot)
It seems we forgot to mention here that the latest Windows Terminal version now has a setting to disable colored Emojis:
However, we still need to add support for handling VS-15 and VS-16 so that colored and uncolored Emojis can be mixed. That's a little bit more difficult unfortunately and currently not that high of a priority.
It's possible that someone (Mike Griese (@zadjii-msft) maybe) should re-evaluate the priority of this issue. It's been in the backlog as p-3 for several years and issues are being closed as duplicates to it. I feel like this issue isn't as high priority as some of those closed issues might be considered (more than just the pawn affected).
(Personally I'm unsubscribing from this issue as I abandoned the project where I wanted this and I use wezterm now. Good luck!)
changed the title [-]Unicode Pawn does not display like other Unicode chess symbols[/-][+]Add support for Variation Selector 15 / U+FE0E (Original Title: Unicode Pawn does not display like other Unicode chess symbols)[/+]on Apr 6, 2026
The list is frozen (deprecated). This means that the list will not expand. Instead, new codes will be allocated for new emojis.
The list contains 371 elements.
The EPres (Emoji_Presentation) property of these elements indicates default text/emoji rendering style of these elements.
5.1. Fortunately, all elements in the list with EPres="Y" (emoji) are wide (ea="W") and do not require a default width correction in GraphemeTableGen.
5.2. Elements with EPres="N" (text) have ea equal to W,N,Na and A and do not require a default width correction too.
5.3. So you have no need to update GraphemeTableGen to process EPres and correct defaut width.
Now in CodepointWidthDetector.cpp only VS16 is taken into account (set w = 2).
// U+FE0F Variation Selector-16 is used to turn unqualified Emojis into qualified ones.
// By convention, this turns them from being ambiguous width (= narrow) into wide ones.
// We achieve this here by explicitly giving this codepoint a wide width.
// Later down below we'll clamp width back to <= 2.
if (cp == 0xFE0F)
{
w = 2;
}
Perhaps you need to add VS15 (set w = 1 like Kitty does). (This code assumes that the string has the correct Unicode
format - the VS15 and VS16 follow strictly the characters from this emoji-variation-sequences.txt list, and does not check this.).
If VS15 and VS16 are processed unconditionally, then it may make sense to adjust their length in GraphemeTableGen from 0 to 1 and 2, respectively, to exclude extra checks in _graphemeNext() (_graphemePrev).
I guess there is something in rendering that you need enhance. I hope the table of 371 elements is not a problem to add it there.
Activity
zadjii-msft commentedon May 16, 2022
a minimal repro
Looks like the black pawn is an emoji, when the others aren't.
I suspect this is because the chess characters aren't in Cascadia Code (or most fonts), dwrite looks up the glyph in some other font that does have it, and the emoji font shows up higher in the search list than wherever the other pieces are coming from. Hmm.
Might not be anything we can do here besides changing the font fallback order for glyphs (#2664)
zadjii-msft commentedon May 16, 2022
See also #6864, but like the opposite. The black bawn is "emoji yes, emoji-presentation no", so it shouldn't be rendered by dwrite as an emoji, but it is. Hmm.
j4james commentedon May 16, 2022
My understanding is that there are a number of glyphs that have both a text presentation and an emoji presentation, and you can use a variant selector to choose which style you want. They each have a default style though (when no variant selector is used), and in the case of the black pawn, the default style is meant to be text.
I'm sure I've seen a document somewhere that list all the default styles in a simple table, but the best I can find at the moment is this: https://www.unicode.org/emoji/charts/text-style.html
paul-hansen commentedon May 16, 2022
That seems accurate, I confirmed it does use the font's symbol if you use a font that has the symbols. I found a font that has chess symbols using this page https://www.fontspace.com/unicode/char/265C-black-chess-rook

The issue you linked would help a lot, enabling us to set it up the way we want on our own PCs. However it's not a great solution for if I wanted to distribute software that uses those symbols though. I would have to instruct all users on how to install a special font correctly if they are using Windows Terminal. Any ideas on how to address where the default is coming from?
If it was consistent and all the Unicode chess pieces were rendered as emoji, that would okay too. At least they would be usable together.
Seems like this isn't limited to Windows Terminal:


Discord has a similar issue:
And in Chrome:
I'm not sure if that means it's a Windows OS problem, or the best way to report that if it is. Maybe I should report it in the WinUI repo? https://github.com/microsoft/microsoft-ui-xaml Seems like they would probably just have to escalate it to whoever works on DirectWrite or something too though.
paul-hansen commentedon May 16, 2022
Apparently U+FE00 - U+FE0F are supposed to be variant selectors which you put after the Unicode character you want to modify. I'm having a hard time finding documentation on which ones do what though. In my testing in WT, all of them just make the character double wide (which is how my chess board looks so square in the first screenshot)
According to https://stackoverflow.com/a/38452396/5399098 U-FE0E is supposed to force the text version.

Black Pawn:♟️
Black Pawn with
︎:♟White Pawn: ♙️
Doesn't seem to work on Github for me but you can copy it into the textbox on https://www.w3schools.com/tags/tryit.asp?filename=tryhtml_textarea and it works there for me.
DHowett commentedon May 17, 2022
Just driving by to say: this touches on #1472 and friends (#8000)!
lhecker commentedon May 16, 2024
It seems we forgot to mention here that the latest Windows Terminal version now has a setting to disable colored Emojis:

However, we still need to add support for handling VS-15 and VS-16 so that colored and uncolored Emojis can be mixed. That's a little bit more difficult unfortunately and currently not that high of a priority.
Ashutosh-Chikhaliya commentedon Sep 22, 2024
czy-29 commentedon Jul 6, 2025
VS-16 needs to be supported, I need colored♠️ ♥️ ♣️ ♦️ characters, I hope we can support it!
paul-hansen commentedon Jul 6, 2025
It's possible that someone (Mike Griese (@zadjii-msft) maybe) should re-evaluate the priority of this issue. It's been in the backlog as p-3 for several years and issues are being closed as duplicates to it. I feel like this issue isn't as high priority as some of those closed issues might be considered (more than just the pawn affected).
(Personally I'm unsubscribing from this issue as I abandoned the project where I wanted this and I use wezterm now. Good luck!)
zakaryan2004 commentedon Nov 22, 2025
[-]Unicode Pawn does not display like other Unicode chess symbols[/-][+]Add support for Variation Selector 15 / U+FE0E (Original Title: Unicode Pawn does not display like other Unicode chess symbols)[/+]iSazonov commentedon Jun 22, 2026
It might be useful what I found while porting
GraphemeTableGen(andCodepointWidthDetector.cpp) to C#.<standardized-variants>section withdesc="emoji style"ordesc="text style".EPres(Emoji_Presentation) property of these elements indicates default text/emoji rendering style of these elements.5.1. Fortunately, all elements in the list with
EPres="Y"(emoji) are wide (ea="W") and do not require a default width correction inGraphemeTableGen.5.2. Elements with
EPres="N"(text) haveeaequal toW,N,NaandAand do not require a default width correction too.5.3. So you have no need to update
GraphemeTableGento processEPresand correct defaut width.terminal/src/types/CodepointWidthDetector.cpp
Lines 850 to 857 in 47253ef
Perhaps you need to add VS15 (set w = 1 like Kitty does). (This code assumes that the string has the correct Unicode
format - the VS15 and VS16 follow strictly the characters from this emoji-variation-sequences.txt list, and does not check this.).
GraphemeTableGenfrom 0 to 1 and 2, respectively, to exclude extra checks in_graphemeNext()(_graphemePrev).emoji-variation-sequences.txt.xlsx