diff --git a/src/utf8.cpp b/src/utf8.cpp index 809d471..4bd2e5d 100644 --- a/src/utf8.cpp +++ b/src/utf8.cpp @@ -341,6 +341,10 @@ int mk_wcwidth(wchar_t ucs) if (width == widechar_ambiguous) return 1; + // Interpret Private Use Area (PUA) characters as 1 char for Nerd Fonts + if (width == widechar_private_use) + return 1; + // Emoji pictographs (U+1F300+) — width 2 in modern terminals if ((ucs >= 0x1F300 && ucs <= 0x1F9FF) || // Misc Symbols, Pictographs, Emoticons, Supplemental (ucs >= 0x1FA00 && ucs <= 0x1FAFF)) // Symbols and Pictographs Extended-A diff --git a/test/utf8.t.cpp b/test/utf8.t.cpp index bc544d2..59f50b7 100644 --- a/test/utf8.t.cpp +++ b/test/utf8.t.cpp @@ -152,6 +152,11 @@ int main (int, char**) t.is (mk_wcwidth (0x1F602), 2, "mk_wcwidth U+1F602 '😂' --> 2"); t.is (mk_wcwidth (0x1F64F), 2, "mk_wcwidth U+1F64F '🙏' --> 2"); + // Nerd Fonts + t.is (mk_wcwidth (0xF023), 1, "mk_wcwidth U+F023'' --> 1"); + t.is (mk_wcwidth (0xF023), 1, "mk_wcwidth U+F023'' --> 1"); + t.is (mk_wcwidth (0xF023), 1, "mk_wcwidth U+F023'' --> 1"); + t.is (mk_wcwidth (0x5149), 2, "mk_wcwidth U+5149 --> 2"); t.is (mk_wcwidth (0x9a8c), 2, "mk_wcwidth U+9a8c --> 2"); t.is (mk_wcwidth (0x4e70), 2, "mk_wcwidth U+4e70 --> 2");