Skip to content

Commit 8757a2d

Browse files
committed
Fix: PUA/Nerd Font character width (Fixes GothenburgBitFactory/taskwarrior#3992)
Signed-off-by: James Elson <jameselson19@gmail.com>
1 parent 71b8ab5 commit 8757a2d

2 files changed

Lines changed: 9 additions & 0 deletions

File tree

src/utf8.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -341,6 +341,10 @@ int mk_wcwidth(wchar_t ucs)
341341
if (width == widechar_ambiguous)
342342
return 1;
343343

344+
// Interpret Private Use Area (PUA) characters as 1 char for Nerd Fonts
345+
if (width == widechar_private_use)
346+
return 1;
347+
344348
// Emoji pictographs (U+1F300+) — width 2 in modern terminals
345349
if ((ucs >= 0x1F300 && ucs <= 0x1F9FF) || // Misc Symbols, Pictographs, Emoticons, Supplemental
346350
(ucs >= 0x1FA00 && ucs <= 0x1FAFF)) // Symbols and Pictographs Extended-A

test/utf8.t.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -152,6 +152,11 @@ int main (int, char**)
152152
t.is (mk_wcwidth (0x1F602), 2, "mk_wcwidth U+1F602 '😂' --> 2");
153153
t.is (mk_wcwidth (0x1F64F), 2, "mk_wcwidth U+1F64F '🙏' --> 2");
154154

155+
// Nerd Fonts
156+
t.is (mk_wcwidth (0xF023), 1, "mk_wcwidth U+F023'' --> 1");
157+
t.is (mk_wcwidth (0xF023), 1, "mk_wcwidth U+F023'' --> 1");
158+
t.is (mk_wcwidth (0xF023), 1, "mk_wcwidth U+F023'' --> 1");
159+
155160
t.is (mk_wcwidth (0x5149), 2, "mk_wcwidth U+5149 --> 2");
156161
t.is (mk_wcwidth (0x9a8c), 2, "mk_wcwidth U+9a8c --> 2");
157162
t.is (mk_wcwidth (0x4e70), 2, "mk_wcwidth U+4e70 --> 2");

0 commit comments

Comments
 (0)