kovidgoyal / kitty

Cross-platform, fast, feature-rich, GPU based terminal
https://sw.kovidgoyal.net/kitty/
GNU General Public License v3.0
23.96k stars 968 forks source link

`symbol_map` is inconsistent for codepoints that have both text and emoji presentations #6572

Closed zeorin closed 1 year ago

zeorin commented 1 year ago

Describe the bug Setting symbol_map for codepoints with text and emoji presentations to an emoji font does not work for all the codepoints.

I'm trying to get kitty to render all codepoints in https://www.unicode.org/Public/15.0.0/ucd/emoji/emoji-variation-sequences.txt, when not suffixed with either VS15 (U+FE0E) or VS16 (U+FE0F), as emoji.

I would expect all these code points to be rendered as emoji when using symbol_map to render them with Noto Color Emoji. Noto Color Emoji has glyphs for all of them.

Instead, some code points are not rendered at all. The ones that aren't rendered are ones that would be rendered as text by default. The ones that are rendered are ones that are rendered as emoji by default.

If I choose a regular font for the symbol map instead, the codepoints that are rendered as emoji by default are instead rendered as tofu, which makes sense, since that font does not have glyphs for them.

To Reproduce

  1. Install Noto Color Emoji font
  2. Launch kitty as follows:
    FONT="Noto Color Emoji" kitty \
     --config NONE \
     --override symbol_map="U+0023,U+002A,U+0030,U+0031,U+0032,U+0033,U+0034,U+0035,U+0036,U+0037,U+0038,U+0039,U+00A9,U+00AE,U+203C,U+2049,U+2122,U+2139,U+2194,U+2195,U+2196,U+2197,U+2198,U+2199,U+21A9,U+21AA,U+231A,U+231B,U+2328,U+23CF,U+23E9,U+23EA,U+23ED,U+23EE,U+23EF,U+23F1,U+23F2,U+23F3,U+23F8,U+23F9,U+23FA,U+24C2,U+25AA,U+25AB,U+25B6,U+25C0,U+25FB,U+25FC,U+25FD,U+25FE,U+2600,U+2601,U+2602,U+2603,U+2604,U+260E,U+2611,U+2614,U+2615,U+2618,U+261D,U+2620,U+2622,U+2623,U+2626,U+262A,U+262E,U+262F,U+2638,U+2639,U+263A,U+2640,U+2642,U+2648,U+2649,U+264A,U+264B,U+264C,U+264D,U+264E,U+264F,U+2650,U+2651,U+2652,U+2653,U+265F,U+2660,U+2663,U+2665,U+2666,U+2668,U+267B,U+267E,U+267F,U+2692,U+2693,U+2694,U+2695,U+2696,U+2697,U+2699,U+269B,U+269C,U+26A0,U+26A1,U+26A7,U+26AA,U+26AB,U+26B0,U+26B1,U+26BD,U+26BE,U+26C4,U+26C5,U+26C8,U+26CF,U+26D1,U+26D3,U+26D4,U+26E9,U+26EA,U+26F0,U+26F1,U+26F2,U+26F3,U+26F4,U+26F5,U+26F7,U+26F8,U+26F9,U+26FA,U+26FD,U+2702,U+2708,U+2709,U+270C,U+270D,U+270F,U+2712,U+2714,U+2716,U+271D,U+2721,U+2733,U+2734,U+2744,U+2747,U+2753,U+2757,U+2763,U+2764,U+27A1,U+2934,U+2935,U+2B05,U+2B06,U+2B07,U+2B1B,U+2B1C,U+2B50,U+2B55,U+3030,U+303D,U+3297,U+3299,U+1F004,U+1F170,U+1F171,U+1F17E,U+1F17F,U+1F202,U+1F21A,U+1F22F,U+1F237,U+1F30D,U+1F30E,U+1F30F,U+1F315,U+1F31C,U+1F321,U+1F324,U+1F325,U+1F326,U+1F327,U+1F328,U+1F329,U+1F32A,U+1F32B,U+1F32C,U+1F336,U+1F378,U+1F37D,U+1F393,U+1F396,U+1F397,U+1F399,U+1F39A,U+1F39B,U+1F39E,U+1F39F,U+1F3A7,U+1F3AC,U+1F3AD,U+1F3AE,U+1F3C2,U+1F3C4,U+1F3C6,U+1F3CA,U+1F3CB,U+1F3CC,U+1F3CD,U+1F3CE,U+1F3D4,U+1F3D5,U+1F3D6,U+1F3D7,U+1F3D8,U+1F3D9,U+1F3DA,U+1F3DB,U+1F3DC,U+1F3DD,U+1F3DE,U+1F3DF,U+1F3E0,U+1F3ED,U+1F3F3,U+1F3F5,U+1F3F7,U+1F408,U+1F415,U+1F41F,U+1F426,U+1F43F,U+1F441,U+1F442,U+1F446,U+1F447,U+1F448,U+1F449,U+1F44D,U+1F44E,U+1F453,U+1F46A,U+1F47D,U+1F4A3,U+1F4B0,U+1F4B3,U+1F4BB,U+1F4BF,U+1F4CB,U+1F4DA,U+1F4DF,U+1F4E4,U+1F4E5,U+1F4E6,U+1F4EA,U+1F4EB,U+1F4EC,U+1F4ED,U+1F4F7,U+1F4F9,U+1F4FA,U+1F4FB,U+1F4FD,U+1F508,U+1F50D,U+1F512,U+1F513,U+1F549,U+1F54A,U+1F550,U+1F551,U+1F552,U+1F553,U+1F554,U+1F555,U+1F556,U+1F557,U+1F558,U+1F559,U+1F55A,U+1F55B,U+1F55C,U+1F55D,U+1F55E,U+1F55F,U+1F560,U+1F561,U+1F562,U+1F563,U+1F564,U+1F565,U+1F566,U+1F567,U+1F56F,U+1F570,U+1F573,U+1F574,U+1F575,U+1F576,U+1F577,U+1F578,U+1F579,U+1F587,U+1F58A,U+1F58B,U+1F58C,U+1F58D,U+1F590,U+1F5A5,U+1F5A8,U+1F5B1,U+1F5B2,U+1F5BC,U+1F5C2,U+1F5C3,U+1F5C4,U+1F5D1,U+1F5D2,U+1F5D3,U+1F5DC,U+1F5DD,U+1F5DE,U+1F5E1,U+1F5E3,U+1F5E8,U+1F5EF,U+1F5F3,U+1F5FA,U+1F610,U+1F687,U+1F68D,U+1F691,U+1F694,U+1F698,U+1F6AD,U+1F6B2,U+1F6B9,U+1F6BA,U+1F6BC,U+1F6CB,U+1F6CD,U+1F6CE,U+1F6CF,U+1F6E0,U+1F6E1,U+1F6E2,U+1F6E3,U+1F6E4,U+1F6E5,U+1F6E9,U+1F6F0,U+1F6F3 $FONT" \
     --hold \
     bash -c 'printf "\u0023\u002A\u0030\u0031\u0032\u0033\u0034\u0035\u0036\u0037\u0038\u0039\u00A9\u00AE\u203C\u2049\u2122\u2139\u2194\u2195\u2196\u2197\u2198\u2199\u21A9\u21AA\u231A\u231B\u2328\u23CF\u23E9\u23EA\u23ED\u23EE\u23EF\u23F1\u23F2\u23F3\u23F8\u23F9\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB\u25FC\u25FD\u25FE\u2600\u2601\u2602\u2603\u2604\u260E\u2611\u2614\u2615\u2618\u261D\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638\u2639\u263A\u2640\u2642\u2648\u2649\u264A\u264B\u264C\u264D\u264E\u264F\u2650\u2651\u2652\u2653\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u267F\u2692\u2693\u2694\u2695\u2696\u2697\u2699\u269B\u269C\u26A0\u26A1\u26A7\u26AA\u26AB\u26B0\u26B1\u26BD\u26BE\u26C4\u26C5\u26C8\u26CF\u26D1\u26D3\u26D4\u26E9\u26EA\u26F0\u26F1\u26F2\u26F3\u26F4\u26F5\u26F7\u26F8\u26F9\u26FA\u26FD\u2702\u2708\u2709\u270C\u270D\u270F\u2712\u2714\u2716\u271D\u2721\u2733\u2734\u2744\u2747\u2753\u2757\u2763\u2764\u27A1\u2934\u2935\u2B05\u2B06\u2B07\u2B1B\u2B1C\u2B50\u2B55\u3030\u303D\u3297\u3299\U0001F004\U0001F170\U0001F171\U0001F17E\U0001F17F\U0001F202\U0001F21A\U0001F22F\U0001F237\U0001F30D\U0001F30E\U0001F30F\U0001F315\U0001F31C\U0001F321\U0001F324\U0001F325\U0001F326\U0001F327\U0001F328\U0001F329\U0001F32A\U0001F32B\U0001F32C\U0001F336\U0001F378\U0001F37D\U0001F393\U0001F396\U0001F397\U0001F399\U0001F39A\U0001F39B\U0001F39E\U0001F39F\U0001F3A7\U0001F3AC\U0001F3AD\U0001F3AE\U0001F3C2\U0001F3C4\U0001F3C6\U0001F3CA\U0001F3CB\U0001F3CC\U0001F3CD\U0001F3CE\U0001F3D4\U0001F3D5\U0001F3D6\U0001F3D7\U0001F3D8\U0001F3D9\U0001F3DA\U0001F3DB\U0001F3DC\U0001F3DD\U0001F3DE\U0001F3DF\U0001F3E0\U0001F3ED\U0001F3F3\U0001F3F5\U0001F3F7\U0001F408\U0001F415\U0001F41F\U0001F426\U0001F43F\U0001F441\U0001F442\U0001F446\U0001F447\U0001F448\U0001F449\U0001F44D\U0001F44E\U0001F453\U0001F46A\U0001F47D\U0001F4A3\U0001F4B0\U0001F4B3\U0001F4BB\U0001F4BF\U0001F4CB\U0001F4DA\U0001F4DF\U0001F4E4\U0001F4E5\U0001F4E6\U0001F4EA\U0001F4EB\U0001F4EC\U0001F4ED\U0001F4F7\U0001F4F9\U0001F4FA\U0001F4FB\U0001F4FD\U0001F508\U0001F50D\U0001F512\U0001F513\U0001F549\U0001F54A\U0001F550\U0001F551\U0001F552\U0001F553\U0001F554\U0001F555\U0001F556\U0001F557\U0001F558\U0001F559\U0001F55A\U0001F55B\U0001F55C\U0001F55D\U0001F55E\U0001F55F\U0001F560\U0001F561\U0001F562\U0001F563\U0001F564\U0001F565\U0001F566\U0001F567\U0001F56F\U0001F570\U0001F573\U0001F574\U0001F575\U0001F576\U0001F577\U0001F578\U0001F579\U0001F587\U0001F58A\U0001F58B\U0001F58C\U0001F58D\U0001F590\U0001F5A5\U0001F5A8\U0001F5B1\U0001F5B2\U0001F5BC\U0001F5C2\U0001F5C3\U0001F5C4\U0001F5D1\U0001F5D2\U0001F5D3\U0001F5DC\U0001F5DD\U0001F5DE\U0001F5E1\U0001F5E3\U0001F5E8\U0001F5EF\U0001F5F3\U0001F5FA\U0001F610\U0001F687\U0001F68D\U0001F691\U0001F694\U0001F698\U0001F6AD\U0001F6B2\U0001F6B9\U0001F6BA\U0001F6BC\U0001F6CB\U0001F6CD\U0001F6CE\U0001F6CF\U0001F6E0\U0001F6E1\U0001F6E2\U0001F6E3\U0001F6E4\U0001F6E5\U0001F6E9\U0001F6F0\U0001F6F3"'

Screenshots

FONT="Noto Color Emoji" kitty \
  --config NONE \
  --override symbol_map="U+0023,U+002A,U+0030,U+0031,U+0032,U+0033,U+0034,U+0035,U+0036,U+0037,U+0038,U+0039,U+00A9,U+00AE,U+203C,U+2049,U+2122,U+2139,U+2194,U+2195,U+2196,U+2197,U+2198,U+2199,U+21A9,U+21AA,U+231A,U+231B,U+2328,U+23CF,U+23E9,U+23EA,U+23ED,U+23EE,U+23EF,U+23F1,U+23F2,U+23F3,U+23F8,U+23F9,U+23FA,U+24C2,U+25AA,U+25AB,U+25B6,U+25C0,U+25FB,U+25FC,U+25FD,U+25FE,U+2600,U+2601,U+2602,U+2603,U+2604,U+260E,U+2611,U+2614,U+2615,U+2618,U+261D,U+2620,U+2622,U+2623,U+2626,U+262A,U+262E,U+262F,U+2638,U+2639,U+263A,U+2640,U+2642,U+2648,U+2649,U+264A,U+264B,U+264C,U+264D,U+264E,U+264F,U+2650,U+2651,U+2652,U+2653,U+265F,U+2660,U+2663,U+2665,U+2666,U+2668,U+267B,U+267E,U+267F,U+2692,U+2693,U+2694,U+2695,U+2696,U+2697,U+2699,U+269B,U+269C,U+26A0,U+26A1,U+26A7,U+26AA,U+26AB,U+26B0,U+26B1,U+26BD,U+26BE,U+26C4,U+26C5,U+26C8,U+26CF,U+26D1,U+26D3,U+26D4,U+26E9,U+26EA,U+26F0,U+26F1,U+26F2,U+26F3,U+26F4,U+26F5,U+26F7,U+26F8,U+26F9,U+26FA,U+26FD,U+2702,U+2708,U+2709,U+270C,U+270D,U+270F,U+2712,U+2714,U+2716,U+271D,U+2721,U+2733,U+2734,U+2744,U+2747,U+2753,U+2757,U+2763,U+2764,U+27A1,U+2934,U+2935,U+2B05,U+2B06,U+2B07,U+2B1B,U+2B1C,U+2B50,U+2B55,U+3030,U+303D,U+3297,U+3299,U+1F004,U+1F170,U+1F171,U+1F17E,U+1F17F,U+1F202,U+1F21A,U+1F22F,U+1F237,U+1F30D,U+1F30E,U+1F30F,U+1F315,U+1F31C,U+1F321,U+1F324,U+1F325,U+1F326,U+1F327,U+1F328,U+1F329,U+1F32A,U+1F32B,U+1F32C,U+1F336,U+1F378,U+1F37D,U+1F393,U+1F396,U+1F397,U+1F399,U+1F39A,U+1F39B,U+1F39E,U+1F39F,U+1F3A7,U+1F3AC,U+1F3AD,U+1F3AE,U+1F3C2,U+1F3C4,U+1F3C6,U+1F3CA,U+1F3CB,U+1F3CC,U+1F3CD,U+1F3CE,U+1F3D4,U+1F3D5,U+1F3D6,U+1F3D7,U+1F3D8,U+1F3D9,U+1F3DA,U+1F3DB,U+1F3DC,U+1F3DD,U+1F3DE,U+1F3DF,U+1F3E0,U+1F3ED,U+1F3F3,U+1F3F5,U+1F3F7,U+1F408,U+1F415,U+1F41F,U+1F426,U+1F43F,U+1F441,U+1F442,U+1F446,U+1F447,U+1F448,U+1F449,U+1F44D,U+1F44E,U+1F453,U+1F46A,U+1F47D,U+1F4A3,U+1F4B0,U+1F4B3,U+1F4BB,U+1F4BF,U+1F4CB,U+1F4DA,U+1F4DF,U+1F4E4,U+1F4E5,U+1F4E6,U+1F4EA,U+1F4EB,U+1F4EC,U+1F4ED,U+1F4F7,U+1F4F9,U+1F4FA,U+1F4FB,U+1F4FD,U+1F508,U+1F50D,U+1F512,U+1F513,U+1F549,U+1F54A,U+1F550,U+1F551,U+1F552,U+1F553,U+1F554,U+1F555,U+1F556,U+1F557,U+1F558,U+1F559,U+1F55A,U+1F55B,U+1F55C,U+1F55D,U+1F55E,U+1F55F,U+1F560,U+1F561,U+1F562,U+1F563,U+1F564,U+1F565,U+1F566,U+1F567,U+1F56F,U+1F570,U+1F573,U+1F574,U+1F575,U+1F576,U+1F577,U+1F578,U+1F579,U+1F587,U+1F58A,U+1F58B,U+1F58C,U+1F58D,U+1F590,U+1F5A5,U+1F5A8,U+1F5B1,U+1F5B2,U+1F5BC,U+1F5C2,U+1F5C3,U+1F5C4,U+1F5D1,U+1F5D2,U+1F5D3,U+1F5DC,U+1F5DD,U+1F5DE,U+1F5E1,U+1F5E3,U+1F5E8,U+1F5EF,U+1F5F3,U+1F5FA,U+1F610,U+1F687,U+1F68D,U+1F691,U+1F694,U+1F698,U+1F6AD,U+1F6B2,U+1F6B9,U+1F6BA,U+1F6BC,U+1F6CB,U+1F6CD,U+1F6CE,U+1F6CF,U+1F6E0,U+1F6E1,U+1F6E2,U+1F6E3,U+1F6E4,U+1F6E5,U+1F6E9,U+1F6F0,U+1F6F3 $FONT" \
  --hold \
  bash -c 'printf "\u0023\u002A\u0030\u0031\u0032\u0033\u0034\u0035\u0036\u0037\u0038\u0039\u00A9\u00AE\u203C\u2049\u2122\u2139\u2194\u2195\u2196\u2197\u2198\u2199\u21A9\u21AA\u231A\u231B\u2328\u23CF\u23E9\u23EA\u23ED\u23EE\u23EF\u23F1\u23F2\u23F3\u23F8\u23F9\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB\u25FC\u25FD\u25FE\u2600\u2601\u2602\u2603\u2604\u260E\u2611\u2614\u2615\u2618\u261D\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638\u2639\u263A\u2640\u2642\u2648\u2649\u264A\u264B\u264C\u264D\u264E\u264F\u2650\u2651\u2652\u2653\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u267F\u2692\u2693\u2694\u2695\u2696\u2697\u2699\u269B\u269C\u26A0\u26A1\u26A7\u26AA\u26AB\u26B0\u26B1\u26BD\u26BE\u26C4\u26C5\u26C8\u26CF\u26D1\u26D3\u26D4\u26E9\u26EA\u26F0\u26F1\u26F2\u26F3\u26F4\u26F5\u26F7\u26F8\u26F9\u26FA\u26FD\u2702\u2708\u2709\u270C\u270D\u270F\u2712\u2714\u2716\u271D\u2721\u2733\u2734\u2744\u2747\u2753\u2757\u2763\u2764\u27A1\u2934\u2935\u2B05\u2B06\u2B07\u2B1B\u2B1C\u2B50\u2B55\u3030\u303D\u3297\u3299\U0001F004\U0001F170\U0001F171\U0001F17E\U0001F17F\U0001F202\U0001F21A\U0001F22F\U0001F237\U0001F30D\U0001F30E\U0001F30F\U0001F315\U0001F31C\U0001F321\U0001F324\U0001F325\U0001F326\U0001F327\U0001F328\U0001F329\U0001F32A\U0001F32B\U0001F32C\U0001F336\U0001F378\U0001F37D\U0001F393\U0001F396\U0001F397\U0001F399\U0001F39A\U0001F39B\U0001F39E\U0001F39F\U0001F3A7\U0001F3AC\U0001F3AD\U0001F3AE\U0001F3C2\U0001F3C4\U0001F3C6\U0001F3CA\U0001F3CB\U0001F3CC\U0001F3CD\U0001F3CE\U0001F3D4\U0001F3D5\U0001F3D6\U0001F3D7\U0001F3D8\U0001F3D9\U0001F3DA\U0001F3DB\U0001F3DC\U0001F3DD\U0001F3DE\U0001F3DF\U0001F3E0\U0001F3ED\U0001F3F3\U0001F3F5\U0001F3F7\U0001F408\U0001F415\U0001F41F\U0001F426\U0001F43F\U0001F441\U0001F442\U0001F446\U0001F447\U0001F448\U0001F449\U0001F44D\U0001F44E\U0001F453\U0001F46A\U0001F47D\U0001F4A3\U0001F4B0\U0001F4B3\U0001F4BB\U0001F4BF\U0001F4CB\U0001F4DA\U0001F4DF\U0001F4E4\U0001F4E5\U0001F4E6\U0001F4EA\U0001F4EB\U0001F4EC\U0001F4ED\U0001F4F7\U0001F4F9\U0001F4FA\U0001F4FB\U0001F4FD\U0001F508\U0001F50D\U0001F512\U0001F513\U0001F549\U0001F54A\U0001F550\U0001F551\U0001F552\U0001F553\U0001F554\U0001F555\U0001F556\U0001F557\U0001F558\U0001F559\U0001F55A\U0001F55B\U0001F55C\U0001F55D\U0001F55E\U0001F55F\U0001F560\U0001F561\U0001F562\U0001F563\U0001F564\U0001F565\U0001F566\U0001F567\U0001F56F\U0001F570\U0001F573\U0001F574\U0001F575\U0001F576\U0001F577\U0001F578\U0001F579\U0001F587\U0001F58A\U0001F58B\U0001F58C\U0001F58D\U0001F590\U0001F5A5\U0001F5A8\U0001F5B1\U0001F5B2\U0001F5BC\U0001F5C2\U0001F5C3\U0001F5C4\U0001F5D1\U0001F5D2\U0001F5D3\U0001F5DC\U0001F5DD\U0001F5DE\U0001F5E1\U0001F5E3\U0001F5E8\U0001F5EF\U0001F5F3\U0001F5FA\U0001F610\U0001F687\U0001F68D\U0001F691\U0001F694\U0001F698\U0001F6AD\U0001F6B2\U0001F6B9\U0001F6BA\U0001F6BC\U0001F6CB\U0001F6CD\U0001F6CE\U0001F6CF\U0001F6E0\U0001F6E1\U0001F6E2\U0001F6E3\U0001F6E4\U0001F6E5\U0001F6E9\U0001F6F0\U0001F6F3"'

image


kitty \
  --config NONE \
  --hold \
  bash -c 'printf "\u0023\u002A\u0030\u0031\u0032\u0033\u0034\u0035\u0036\u0037\u0038\u0039\u00A9\u00AE\u203C\u2049\u2122\u2139\u2194\u2195\u2196\u2197\u2198\u2199\u21A9\u21AA\u231A\u231B\u2328\u23CF\u23E9\u23EA\u23ED\u23EE\u23EF\u23F1\u23F2\u23F3\u23F8\u23F9\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB\u25FC\u25FD\u25FE\u2600\u2601\u2602\u2603\u2604\u260E\u2611\u2614\u2615\u2618\u261D\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638\u2639\u263A\u2640\u2642\u2648\u2649\u264A\u264B\u264C\u264D\u264E\u264F\u2650\u2651\u2652\u2653\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u267F\u2692\u2693\u2694\u2695\u2696\u2697\u2699\u269B\u269C\u26A0\u26A1\u26A7\u26AA\u26AB\u26B0\u26B1\u26BD\u26BE\u26C4\u26C5\u26C8\u26CF\u26D1\u26D3\u26D4\u26E9\u26EA\u26F0\u26F1\u26F2\u26F3\u26F4\u26F5\u26F7\u26F8\u26F9\u26FA\u26FD\u2702\u2708\u2709\u270C\u270D\u270F\u2712\u2714\u2716\u271D\u2721\u2733\u2734\u2744\u2747\u2753\u2757\u2763\u2764\u27A1\u2934\u2935\u2B05\u2B06\u2B07\u2B1B\u2B1C\u2B50\u2B55\u3030\u303D\u3297\u3299\U0001F004\U0001F170\U0001F171\U0001F17E\U0001F17F\U0001F202\U0001F21A\U0001F22F\U0001F237\U0001F30D\U0001F30E\U0001F30F\U0001F315\U0001F31C\U0001F321\U0001F324\U0001F325\U0001F326\U0001F327\U0001F328\U0001F329\U0001F32A\U0001F32B\U0001F32C\U0001F336\U0001F378\U0001F37D\U0001F393\U0001F396\U0001F397\U0001F399\U0001F39A\U0001F39B\U0001F39E\U0001F39F\U0001F3A7\U0001F3AC\U0001F3AD\U0001F3AE\U0001F3C2\U0001F3C4\U0001F3C6\U0001F3CA\U0001F3CB\U0001F3CC\U0001F3CD\U0001F3CE\U0001F3D4\U0001F3D5\U0001F3D6\U0001F3D7\U0001F3D8\U0001F3D9\U0001F3DA\U0001F3DB\U0001F3DC\U0001F3DD\U0001F3DE\U0001F3DF\U0001F3E0\U0001F3ED\U0001F3F3\U0001F3F5\U0001F3F7\U0001F408\U0001F415\U0001F41F\U0001F426\U0001F43F\U0001F441\U0001F442\U0001F446\U0001F447\U0001F448\U0001F449\U0001F44D\U0001F44E\U0001F453\U0001F46A\U0001F47D\U0001F4A3\U0001F4B0\U0001F4B3\U0001F4BB\U0001F4BF\U0001F4CB\U0001F4DA\U0001F4DF\U0001F4E4\U0001F4E5\U0001F4E6\U0001F4EA\U0001F4EB\U0001F4EC\U0001F4ED\U0001F4F7\U0001F4F9\U0001F4FA\U0001F4FB\U0001F4FD\U0001F508\U0001F50D\U0001F512\U0001F513\U0001F549\U0001F54A\U0001F550\U0001F551\U0001F552\U0001F553\U0001F554\U0001F555\U0001F556\U0001F557\U0001F558\U0001F559\U0001F55A\U0001F55B\U0001F55C\U0001F55D\U0001F55E\U0001F55F\U0001F560\U0001F561\U0001F562\U0001F563\U0001F564\U0001F565\U0001F566\U0001F567\U0001F56F\U0001F570\U0001F573\U0001F574\U0001F575\U0001F576\U0001F577\U0001F578\U0001F579\U0001F587\U0001F58A\U0001F58B\U0001F58C\U0001F58D\U0001F590\U0001F5A5\U0001F5A8\U0001F5B1\U0001F5B2\U0001F5BC\U0001F5C2\U0001F5C3\U0001F5C4\U0001F5D1\U0001F5D2\U0001F5D3\U0001F5DC\U0001F5DD\U0001F5DE\U0001F5E1\U0001F5E3\U0001F5E8\U0001F5EF\U0001F5F3\U0001F5FA\U0001F610\U0001F687\U0001F68D\U0001F691\U0001F694\U0001F698\U0001F6AD\U0001F6B2\U0001F6B9\U0001F6BA\U0001F6BC\U0001F6CB\U0001F6CD\U0001F6CE\U0001F6CF\U0001F6E0\U0001F6E1\U0001F6E2\U0001F6E3\U0001F6E4\U0001F6E5\U0001F6E9\U0001F6F0\U0001F6F3"'

image


FONT="DejaVu Sans Mono" kitty \
  --config NONE \
  --override symbol_map="U+0023,U+002A,U+0030,U+0031,U+0032,U+0033,U+0034,U+0035,U+0036,U+0037,U+0038,U+0039,U+00A9,U+00AE,U+203C,U+2049,U+2122,U+2139,U+2194,U+2195,U+2196,U+2197,U+2198,U+2199,U+21A9,U+21AA,U+231A,U+231B,U+2328,U+23CF,U+23E9,U+23EA,U+23ED,U+23EE,U+23EF,U+23F1,U+23F2,U+23F3,U+23F8,U+23F9,U+23FA,U+24C2,U+25AA,U+25AB,U+25B6,U+25C0,U+25FB,U+25FC,U+25FD,U+25FE,U+2600,U+2601,U+2602,U+2603,U+2604,U+260E,U+2611,U+2614,U+2615,U+2618,U+261D,U+2620,U+2622,U+2623,U+2626,U+262A,U+262E,U+262F,U+2638,U+2639,U+263A,U+2640,U+2642,U+2648,U+2649,U+264A,U+264B,U+264C,U+264D,U+264E,U+264F,U+2650,U+2651,U+2652,U+2653,U+265F,U+2660,U+2663,U+2665,U+2666,U+2668,U+267B,U+267E,U+267F,U+2692,U+2693,U+2694,U+2695,U+2696,U+2697,U+2699,U+269B,U+269C,U+26A0,U+26A1,U+26A7,U+26AA,U+26AB,U+26B0,U+26B1,U+26BD,U+26BE,U+26C4,U+26C5,U+26C8,U+26CF,U+26D1,U+26D3,U+26D4,U+26E9,U+26EA,U+26F0,U+26F1,U+26F2,U+26F3,U+26F4,U+26F5,U+26F7,U+26F8,U+26F9,U+26FA,U+26FD,U+2702,U+2708,U+2709,U+270C,U+270D,U+270F,U+2712,U+2714,U+2716,U+271D,U+2721,U+2733,U+2734,U+2744,U+2747,U+2753,U+2757,U+2763,U+2764,U+27A1,U+2934,U+2935,U+2B05,U+2B06,U+2B07,U+2B1B,U+2B1C,U+2B50,U+2B55,U+3030,U+303D,U+3297,U+3299,U+1F004,U+1F170,U+1F171,U+1F17E,U+1F17F,U+1F202,U+1F21A,U+1F22F,U+1F237,U+1F30D,U+1F30E,U+1F30F,U+1F315,U+1F31C,U+1F321,U+1F324,U+1F325,U+1F326,U+1F327,U+1F328,U+1F329,U+1F32A,U+1F32B,U+1F32C,U+1F336,U+1F378,U+1F37D,U+1F393,U+1F396,U+1F397,U+1F399,U+1F39A,U+1F39B,U+1F39E,U+1F39F,U+1F3A7,U+1F3AC,U+1F3AD,U+1F3AE,U+1F3C2,U+1F3C4,U+1F3C6,U+1F3CA,U+1F3CB,U+1F3CC,U+1F3CD,U+1F3CE,U+1F3D4,U+1F3D5,U+1F3D6,U+1F3D7,U+1F3D8,U+1F3D9,U+1F3DA,U+1F3DB,U+1F3DC,U+1F3DD,U+1F3DE,U+1F3DF,U+1F3E0,U+1F3ED,U+1F3F3,U+1F3F5,U+1F3F7,U+1F408,U+1F415,U+1F41F,U+1F426,U+1F43F,U+1F441,U+1F442,U+1F446,U+1F447,U+1F448,U+1F449,U+1F44D,U+1F44E,U+1F453,U+1F46A,U+1F47D,U+1F4A3,U+1F4B0,U+1F4B3,U+1F4BB,U+1F4BF,U+1F4CB,U+1F4DA,U+1F4DF,U+1F4E4,U+1F4E5,U+1F4E6,U+1F4EA,U+1F4EB,U+1F4EC,U+1F4ED,U+1F4F7,U+1F4F9,U+1F4FA,U+1F4FB,U+1F4FD,U+1F508,U+1F50D,U+1F512,U+1F513,U+1F549,U+1F54A,U+1F550,U+1F551,U+1F552,U+1F553,U+1F554,U+1F555,U+1F556,U+1F557,U+1F558,U+1F559,U+1F55A,U+1F55B,U+1F55C,U+1F55D,U+1F55E,U+1F55F,U+1F560,U+1F561,U+1F562,U+1F563,U+1F564,U+1F565,U+1F566,U+1F567,U+1F56F,U+1F570,U+1F573,U+1F574,U+1F575,U+1F576,U+1F577,U+1F578,U+1F579,U+1F587,U+1F58A,U+1F58B,U+1F58C,U+1F58D,U+1F590,U+1F5A5,U+1F5A8,U+1F5B1,U+1F5B2,U+1F5BC,U+1F5C2,U+1F5C3,U+1F5C4,U+1F5D1,U+1F5D2,U+1F5D3,U+1F5DC,U+1F5DD,U+1F5DE,U+1F5E1,U+1F5E3,U+1F5E8,U+1F5EF,U+1F5F3,U+1F5FA,U+1F610,U+1F687,U+1F68D,U+1F691,U+1F694,U+1F698,U+1F6AD,U+1F6B2,U+1F6B9,U+1F6BA,U+1F6BC,U+1F6CB,U+1F6CD,U+1F6CE,U+1F6CF,U+1F6E0,U+1F6E1,U+1F6E2,U+1F6E3,U+1F6E4,U+1F6E5,U+1F6E9,U+1F6F0,U+1F6F3 $FONT" \
  --hold \
  bash -c 'printf "\u0023\u002A\u0030\u0031\u0032\u0033\u0034\u0035\u0036\u0037\u0038\u0039\u00A9\u00AE\u203C\u2049\u2122\u2139\u2194\u2195\u2196\u2197\u2198\u2199\u21A9\u21AA\u231A\u231B\u2328\u23CF\u23E9\u23EA\u23ED\u23EE\u23EF\u23F1\u23F2\u23F3\u23F8\u23F9\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB\u25FC\u25FD\u25FE\u2600\u2601\u2602\u2603\u2604\u260E\u2611\u2614\u2615\u2618\u261D\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638\u2639\u263A\u2640\u2642\u2648\u2649\u264A\u264B\u264C\u264D\u264E\u264F\u2650\u2651\u2652\u2653\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u267F\u2692\u2693\u2694\u2695\u2696\u2697\u2699\u269B\u269C\u26A0\u26A1\u26A7\u26AA\u26AB\u26B0\u26B1\u26BD\u26BE\u26C4\u26C5\u26C8\u26CF\u26D1\u26D3\u26D4\u26E9\u26EA\u26F0\u26F1\u26F2\u26F3\u26F4\u26F5\u26F7\u26F8\u26F9\u26FA\u26FD\u2702\u2708\u2709\u270C\u270D\u270F\u2712\u2714\u2716\u271D\u2721\u2733\u2734\u2744\u2747\u2753\u2757\u2763\u2764\u27A1\u2934\u2935\u2B05\u2B06\u2B07\u2B1B\u2B1C\u2B50\u2B55\u3030\u303D\u3297\u3299\U0001F004\U0001F170\U0001F171\U0001F17E\U0001F17F\U0001F202\U0001F21A\U0001F22F\U0001F237\U0001F30D\U0001F30E\U0001F30F\U0001F315\U0001F31C\U0001F321\U0001F324\U0001F325\U0001F326\U0001F327\U0001F328\U0001F329\U0001F32A\U0001F32B\U0001F32C\U0001F336\U0001F378\U0001F37D\U0001F393\U0001F396\U0001F397\U0001F399\U0001F39A\U0001F39B\U0001F39E\U0001F39F\U0001F3A7\U0001F3AC\U0001F3AD\U0001F3AE\U0001F3C2\U0001F3C4\U0001F3C6\U0001F3CA\U0001F3CB\U0001F3CC\U0001F3CD\U0001F3CE\U0001F3D4\U0001F3D5\U0001F3D6\U0001F3D7\U0001F3D8\U0001F3D9\U0001F3DA\U0001F3DB\U0001F3DC\U0001F3DD\U0001F3DE\U0001F3DF\U0001F3E0\U0001F3ED\U0001F3F3\U0001F3F5\U0001F3F7\U0001F408\U0001F415\U0001F41F\U0001F426\U0001F43F\U0001F441\U0001F442\U0001F446\U0001F447\U0001F448\U0001F449\U0001F44D\U0001F44E\U0001F453\U0001F46A\U0001F47D\U0001F4A3\U0001F4B0\U0001F4B3\U0001F4BB\U0001F4BF\U0001F4CB\U0001F4DA\U0001F4DF\U0001F4E4\U0001F4E5\U0001F4E6\U0001F4EA\U0001F4EB\U0001F4EC\U0001F4ED\U0001F4F7\U0001F4F9\U0001F4FA\U0001F4FB\U0001F4FD\U0001F508\U0001F50D\U0001F512\U0001F513\U0001F549\U0001F54A\U0001F550\U0001F551\U0001F552\U0001F553\U0001F554\U0001F555\U0001F556\U0001F557\U0001F558\U0001F559\U0001F55A\U0001F55B\U0001F55C\U0001F55D\U0001F55E\U0001F55F\U0001F560\U0001F561\U0001F562\U0001F563\U0001F564\U0001F565\U0001F566\U0001F567\U0001F56F\U0001F570\U0001F573\U0001F574\U0001F575\U0001F576\U0001F577\U0001F578\U0001F579\U0001F587\U0001F58A\U0001F58B\U0001F58C\U0001F58D\U0001F590\U0001F5A5\U0001F5A8\U0001F5B1\U0001F5B2\U0001F5BC\U0001F5C2\U0001F5C3\U0001F5C4\U0001F5D1\U0001F5D2\U0001F5D3\U0001F5DC\U0001F5DD\U0001F5DE\U0001F5E1\U0001F5E3\U0001F5E8\U0001F5EF\U0001F5F3\U0001F5FA\U0001F610\U0001F687\U0001F68D\U0001F691\U0001F694\U0001F698\U0001F6AD\U0001F6B2\U0001F6B9\U0001F6BA\U0001F6BC\U0001F6CB\U0001F6CD\U0001F6CE\U0001F6CF\U0001F6E0\U0001F6E1\U0001F6E2\U0001F6E3\U0001F6E4\U0001F6E5\U0001F6E9\U0001F6F0\U0001F6F3"'

image


For reference, here are two screenshots of these exact same codepoints (copy-pasted from kitty itself) being rendered in LibreOffice Writer.

Using DejaVu Sans Mono:

image

Using Noto Color Emoji (this is what I expected from kitty):

image

Environment details

kitty 0.28.1 created by Kovid Goyal
Linux guru 6.1.46-xanmod1 #1-NixOS SMP PREEMPT_DYNAMIC Tue Jan  1 00:00:00 UTC 1980 x86_64

<<< Welcome to NixOS 23.05.2975.a16f7eb56e88 (x86_64) - /dev/tty >>>

Run 'nixos-help' for the NixOS manual.

DISTRIB_CODENAME=stoat
DISTRIB_DESCRIPTION="NixOS 23.05 (Stoat)"
DISTRIB_ID=nixos
DISTRIB_RELEASE="23.05"
LSB_VERSION="23.05 (Stoat)"
Running under: X11
Frozen: False
Paths:
  kitty: /nix/store/a723bx5i1bzr9g8vy8yp07dplmr6iqy1-kitty-0.28.1/bin/kitty
  base dir: /nix/store/a723bx5i1bzr9g8vy8yp07dplmr6iqy1-kitty-0.28.1/lib/kitty
  extensions dir: /nix/store/a723bx5i1bzr9g8vy8yp07dplmr6iqy1-kitty-0.28.1/lib/kitty/kitty
  system shell: /run/current-system/sw/bin/fish
Loaded config overrides:
  symbol_map U+0023,U+002A,U+0030,U+0031,U+0032,U+0033,U+0034,U+0035,U+0036,U+0037,U+0038,U+0039,U+00A9,U+00AE,U+203C,U+2049,U+2122,U+2139,U+2194,U+2195,U+2196,U+2197,U+2198,U+2199,U+21A9,U+21AA,U+231A,U+231B,U+2328,U+23CF,U+23E9,U+23EA,U+23ED,U+23EE,U+23EF,U+23F1,U+23F2,U+23F3,U+23F8,U+23F9,U+23FA,U+24C2,U+25AA,U+25AB,U+25B6,U+25C0,U+25FB,U+25FC,U+25FD,U+25FE,U+2600,U+2601,U+2602,U+2603,U+2604,U+260E,U+2611,U+2614,U+2615,U+2618,U+261D,U+2620,U+2622,U+2623,U+2626,U+262A,U+262E,U+262F,U+2638,U+2639,U+263A,U+2640,U+2642,U+2648,U+2649,U+264A,U+264B,U+264C,U+264D,U+264E,U+264F,U+2650,U+2651,U+2652,U+2653,U+265F,U+2660,U+2663,U+2665,U+2666,U+2668,U+267B,U+267E,U+267F,U+2692,U+2693,U+2694,U+2695,U+2696,U+2697,U+2699,U+269B,U+269C,U+26A0,U+26A1,U+26A7,U+26AA,U+26AB,U+26B0,U+26B1,U+26BD,U+26BE,U+26C4,U+26C5,U+26C8,U+26CF,U+26D1,U+26D3,U+26D4,U+26E9,U+26EA,U+26F0,U+26F1,U+26F2,U+26F3,U+26F4,U+26F5,U+26F7,U+26F8,U+26F9,U+26FA,U+26FD,U+2702,U+2708,U+2709,U+270C,U+270D,U+270F,U+2712,U+2714,U+2716,U+271D,U+2721,U+2733,U+2734,U+2744,U+2747,U+2753,U+2757,U+2763,U+2764,U+27A1,U+2934,U+2935,U+2B05,U+2B06,U+2B07,U+2B1B,U+2B1C,U+2B50,U+2B55,U+3030,U+303D,U+3297,U+3299,U+1F004,U+1F170,U+1F171,U+1F17E,U+1F17F,U+1F202,U+1F21A,U+1F22F,U+1F237,U+1F30D,U+1F30E,U+1F30F,U+1F315,U+1F31C,U+1F321,U+1F324,U+1F325,U+1F326,U+1F327,U+1F328,U+1F329,U+1F32A,U+1F32B,U+1F32C,U+1F336,U+1F378,U+1F37D,U+1F393,U+1F396,U+1F397,U+1F399,U+1F39A,U+1F39B,U+1F39E,U+1F39F,U+1F3A7,U+1F3AC,U+1F3AD,U+1F3AE,U+1F3C2,U+1F3C4,U+1F3C6,U+1F3CA,U+1F3CB,U+1F3CC,U+1F3CD,U+1F3CE,U+1F3D4,U+1F3D5,U+1F3D6,U+1F3D7,U+1F3D8,U+1F3D9,U+1F3DA,U+1F3DB,U+1F3DC,U+1F3DD,U+1F3DE,U+1F3DF,U+1F3E0,U+1F3ED,U+1F3F3,U+1F3F5,U+1F3F7,U+1F408,U+1F415,U+1F41F,U+1F426,U+1F43F,U+1F441,U+1F442,U+1F446,U+1F447,U+1F448,U+1F449,U+1F44D,U+1F44E,U+1F453,U+1F46A,U+1F47D,U+1F4A3,U+1F4B0,U+1F4B3,U+1F4BB,U+1F4BF,U+1F4CB,U+1F4DA,U+1F4DF,U+1F4E4,U+1F4E5,U+1F4E6,U+1F4EA,U+1F4EB,U+1F4EC,U+1F4ED,U+1F4F7,U+1F4F9,U+1F4FA,U+1F4FB,U+1F4FD,U+1F508,U+1F50D,U+1F512,U+1F513,U+1F549,U+1F54A,U+1F550,U+1F551,U+1F552,U+1F553,U+1F554,U+1F555,U+1F556,U+1F557,U+1F558,U+1F559,U+1F55A,U+1F55B,U+1F55C,U+1F55D,U+1F55E,U+1F55F,U+1F560,U+1F561,U+1F562,U+1F563,U+1F564,U+1F565,U+1F566,U+1F567,U+1F56F,U+1F570,U+1F573,U+1F574,U+1F575,U+1F576,U+1F577,U+1F578,U+1F579,U+1F587,U+1F58A,U+1F58B,U+1F58C,U+1F58D,U+1F590,U+1F5A5,U+1F5A8,U+1F5B1,U+1F5B2,U+1F5BC,U+1F5C2,U+1F5C3,U+1F5C4,U+1F5D1,U+1F5D2,U+1F5D3,U+1F5DC,U+1F5DD,U+1F5DE,U+1F5E1,U+1F5E3,U+1F5E8,U+1F5EF,U+1F5F3,U+1F5FA,U+1F610,U+1F687,U+1F68D,U+1F691,U+1F694,U+1F698,U+1F6AD,U+1F6B2,U+1F6B9,U+1F6BA,U+1F6BC,U+1F6CB,U+1F6CD,U+1F6CE,U+1F6CF,U+1F6E0,U+1F6E1,U+1F6E2,U+1F6E3,U+1F6E4,U+1F6E5,U+1F6E9,U+1F6F0,U+1F6F3 Noto Color Emoji

Config options different from defaults:
symbol_map:
    U+0023 - U+0023 → Noto Color Emoji
    U+002a - U+002a → Noto Color Emoji
    U+0030 - U+0030 → Noto Color Emoji
    U+0031 - U+0031 → Noto Color Emoji
    U+0032 - U+0032 → Noto Color Emoji
    U+0033 - U+0033 → Noto Color Emoji
    U+0034 - U+0034 → Noto Color Emoji
    U+0035 - U+0035 → Noto Color Emoji
    U+0036 - U+0036 → Noto Color Emoji
    U+0037 - U+0037 → Noto Color Emoji
    U+0038 - U+0038 → Noto Color Emoji
    U+0039 - U+0039 → Noto Color Emoji
    U+00a9 - U+00a9 → Noto Color Emoji
    U+00ae - U+00ae → Noto Color Emoji
    U+203c - U+203c → Noto Color Emoji
    U+2049 - U+2049 → Noto Color Emoji
    U+2122 - U+2122 → Noto Color Emoji
    U+2139 - U+2139 → Noto Color Emoji
    U+2194 - U+2194 → Noto Color Emoji
    U+2195 - U+2195 → Noto Color Emoji
    U+2196 - U+2196 → Noto Color Emoji
    U+2197 - U+2197 → Noto Color Emoji
    U+2198 - U+2198 → Noto Color Emoji
    U+2199 - U+2199 → Noto Color Emoji
    U+21a9 - U+21a9 → Noto Color Emoji
    U+21aa - U+21aa → Noto Color Emoji
    U+231a - U+231a → Noto Color Emoji
    U+231b - U+231b → Noto Color Emoji
    U+2328 - U+2328 → Noto Color Emoji
    U+23cf - U+23cf → Noto Color Emoji
    U+23e9 - U+23e9 → Noto Color Emoji
    U+23ea - U+23ea → Noto Color Emoji
    U+23ed - U+23ed → Noto Color Emoji
    U+23ee - U+23ee → Noto Color Emoji
    U+23ef - U+23ef → Noto Color Emoji
    U+23f1 - U+23f1 → Noto Color Emoji
    U+23f2 - U+23f2 → Noto Color Emoji
    U+23f3 - U+23f3 → Noto Color Emoji
    U+23f8 - U+23f8 → Noto Color Emoji
    U+23f9 - U+23f9 → Noto Color Emoji
    U+23fa - U+23fa → Noto Color Emoji
    U+24c2 - U+24c2 → Noto Color Emoji
    U+25aa - U+25aa → Noto Color Emoji
    U+25ab - U+25ab → Noto Color Emoji
    U+25b6 - U+25b6 → Noto Color Emoji
    U+25c0 - U+25c0 → Noto Color Emoji
    U+25fb - U+25fb → Noto Color Emoji
    U+25fc - U+25fc → Noto Color Emoji
    U+25fd - U+25fd → Noto Color Emoji
    U+25fe - U+25fe → Noto Color Emoji
    U+2600 - U+2600 → Noto Color Emoji
    U+2601 - U+2601 → Noto Color Emoji
    U+2602 - U+2602 → Noto Color Emoji
    U+2603 - U+2603 → Noto Color Emoji
    U+2604 - U+2604 → Noto Color Emoji
    U+260e - U+260e → Noto Color Emoji
    U+2611 - U+2611 → Noto Color Emoji
    U+2614 - U+2614 → Noto Color Emoji
    U+2615 - U+2615 → Noto Color Emoji
    U+2618 - U+2618 → Noto Color Emoji
    U+261d - U+261d → Noto Color Emoji
    U+2620 - U+2620 → Noto Color Emoji
    U+2622 - U+2622 → Noto Color Emoji
    U+2623 - U+2623 → Noto Color Emoji
    U+2626 - U+2626 → Noto Color Emoji
    U+262a - U+262a → Noto Color Emoji
    U+262e - U+262e → Noto Color Emoji
    U+262f - U+262f → Noto Color Emoji
    U+2638 - U+2638 → Noto Color Emoji
    U+2639 - U+2639 → Noto Color Emoji
    U+263a - U+263a → Noto Color Emoji
    U+2640 - U+2640 → Noto Color Emoji
    U+2642 - U+2642 → Noto Color Emoji
    U+2648 - U+2648 → Noto Color Emoji
    U+2649 - U+2649 → Noto Color Emoji
    U+264a - U+264a → Noto Color Emoji
    U+264b - U+264b → Noto Color Emoji
    U+264c - U+264c → Noto Color Emoji
    U+264d - U+264d → Noto Color Emoji
    U+264e - U+264e → Noto Color Emoji
    U+264f - U+264f → Noto Color Emoji
    U+2650 - U+2650 → Noto Color Emoji
    U+2651 - U+2651 → Noto Color Emoji
    U+2652 - U+2652 → Noto Color Emoji
    U+2653 - U+2653 → Noto Color Emoji
    U+265f - U+265f → Noto Color Emoji
    U+2660 - U+2660 → Noto Color Emoji
    U+2663 - U+2663 → Noto Color Emoji
    U+2665 - U+2665 → Noto Color Emoji
    U+2666 - U+2666 → Noto Color Emoji
    U+2668 - U+2668 → Noto Color Emoji
    U+267b - U+267b → Noto Color Emoji
    U+267e - U+267e → Noto Color Emoji
    U+267f - U+267f → Noto Color Emoji
    U+2692 - U+2692 → Noto Color Emoji
    U+2693 - U+2693 → Noto Color Emoji
    U+2694 - U+2694 → Noto Color Emoji
    U+2695 - U+2695 → Noto Color Emoji
    U+2696 - U+2696 → Noto Color Emoji
    U+2697 - U+2697 → Noto Color Emoji
    U+2699 - U+2699 → Noto Color Emoji
    U+269b - U+269b → Noto Color Emoji
    U+269c - U+269c → Noto Color Emoji
    U+26a0 - U+26a0 → Noto Color Emoji
    U+26a1 - U+26a1 → Noto Color Emoji
    U+26a7 - U+26a7 → Noto Color Emoji
    U+26aa - U+26aa → Noto Color Emoji
    U+26ab - U+26ab → Noto Color Emoji
    U+26b0 - U+26b0 → Noto Color Emoji
    U+26b1 - U+26b1 → Noto Color Emoji
    U+26bd - U+26bd → Noto Color Emoji
    U+26be - U+26be → Noto Color Emoji
    U+26c4 - U+26c4 → Noto Color Emoji
    U+26c5 - U+26c5 → Noto Color Emoji
    U+26c8 - U+26c8 → Noto Color Emoji
    U+26cf - U+26cf → Noto Color Emoji
    U+26d1 - U+26d1 → Noto Color Emoji
    U+26d3 - U+26d3 → Noto Color Emoji
    U+26d4 - U+26d4 → Noto Color Emoji
    U+26e9 - U+26e9 → Noto Color Emoji
    U+26ea - U+26ea → Noto Color Emoji
    U+26f0 - U+26f0 → Noto Color Emoji
    U+26f1 - U+26f1 → Noto Color Emoji
    U+26f2 - U+26f2 → Noto Color Emoji
    U+26f3 - U+26f3 → Noto Color Emoji
    U+26f4 - U+26f4 → Noto Color Emoji
    U+26f5 - U+26f5 → Noto Color Emoji
    U+26f7 - U+26f7 → Noto Color Emoji
    U+26f8 - U+26f8 → Noto Color Emoji
    U+26f9 - U+26f9 → Noto Color Emoji
    U+26fa - U+26fa → Noto Color Emoji
    U+26fd - U+26fd → Noto Color Emoji
    U+2702 - U+2702 → Noto Color Emoji
    U+2708 - U+2708 → Noto Color Emoji
    U+2709 - U+2709 → Noto Color Emoji
    U+270c - U+270c → Noto Color Emoji
    U+270d - U+270d → Noto Color Emoji
    U+270f - U+270f → Noto Color Emoji
    U+2712 - U+2712 → Noto Color Emoji
    U+2714 - U+2714 → Noto Color Emoji
    U+2716 - U+2716 → Noto Color Emoji
    U+271d - U+271d → Noto Color Emoji
    U+2721 - U+2721 → Noto Color Emoji
    U+2733 - U+2733 → Noto Color Emoji
    U+2734 - U+2734 → Noto Color Emoji
    U+2744 - U+2744 → Noto Color Emoji
    U+2747 - U+2747 → Noto Color Emoji
    U+2753 - U+2753 → Noto Color Emoji
    U+2757 - U+2757 → Noto Color Emoji
    U+2763 - U+2763 → Noto Color Emoji
    U+2764 - U+2764 → Noto Color Emoji
    U+27a1 - U+27a1 → Noto Color Emoji
    U+2934 - U+2934 → Noto Color Emoji
    U+2935 - U+2935 → Noto Color Emoji
    U+2b05 - U+2b05 → Noto Color Emoji
    U+2b06 - U+2b06 → Noto Color Emoji
    U+2b07 - U+2b07 → Noto Color Emoji
    U+2b1b - U+2b1b → Noto Color Emoji
    U+2b1c - U+2b1c → Noto Color Emoji
    U+2b50 - U+2b50 → Noto Color Emoji
    U+2b55 - U+2b55 → Noto Color Emoji
    U+3030 - U+3030 → Noto Color Emoji
    U+303d - U+303d → Noto Color Emoji
    U+3297 - U+3297 → Noto Color Emoji
    U+3299 - U+3299 → Noto Color Emoji
    U+1f004 - U+1f004 → Noto Color Emoji
    U+1f170 - U+1f170 → Noto Color Emoji
    U+1f171 - U+1f171 → Noto Color Emoji
    U+1f17e - U+1f17e → Noto Color Emoji
    U+1f17f - U+1f17f → Noto Color Emoji
    U+1f202 - U+1f202 → Noto Color Emoji
    U+1f21a - U+1f21a → Noto Color Emoji
    U+1f22f - U+1f22f → Noto Color Emoji
    U+1f237 - U+1f237 → Noto Color Emoji
    U+1f30d - U+1f30d → Noto Color Emoji
    U+1f30e - U+1f30e → Noto Color Emoji
    U+1f30f - U+1f30f → Noto Color Emoji
    U+1f315 - U+1f315 → Noto Color Emoji
    U+1f31c - U+1f31c → Noto Color Emoji
    U+1f321 - U+1f321 → Noto Color Emoji
    U+1f324 - U+1f324 → Noto Color Emoji
    U+1f325 - U+1f325 → Noto Color Emoji
    U+1f326 - U+1f326 → Noto Color Emoji
    U+1f327 - U+1f327 → Noto Color Emoji
    U+1f328 - U+1f328 → Noto Color Emoji
    U+1f329 - U+1f329 → Noto Color Emoji
    U+1f32a - U+1f32a → Noto Color Emoji
    U+1f32b - U+1f32b → Noto Color Emoji
    U+1f32c - U+1f32c → Noto Color Emoji
    U+1f336 - U+1f336 → Noto Color Emoji
    U+1f378 - U+1f378 → Noto Color Emoji
    U+1f37d - U+1f37d → Noto Color Emoji
    U+1f393 - U+1f393 → Noto Color Emoji
    U+1f396 - U+1f396 → Noto Color Emoji
    U+1f397 - U+1f397 → Noto Color Emoji
    U+1f399 - U+1f399 → Noto Color Emoji
    U+1f39a - U+1f39a → Noto Color Emoji
    U+1f39b - U+1f39b → Noto Color Emoji
    U+1f39e - U+1f39e → Noto Color Emoji
    U+1f39f - U+1f39f → Noto Color Emoji
    U+1f3a7 - U+1f3a7 → Noto Color Emoji
    U+1f3ac - U+1f3ac → Noto Color Emoji
    U+1f3ad - U+1f3ad → Noto Color Emoji
    U+1f3ae - U+1f3ae → Noto Color Emoji
    U+1f3c2 - U+1f3c2 → Noto Color Emoji
    U+1f3c4 - U+1f3c4 → Noto Color Emoji
    U+1f3c6 - U+1f3c6 → Noto Color Emoji
    U+1f3ca - U+1f3ca → Noto Color Emoji
    U+1f3cb - U+1f3cb → Noto Color Emoji
    U+1f3cc - U+1f3cc → Noto Color Emoji
    U+1f3cd - U+1f3cd → Noto Color Emoji
    U+1f3ce - U+1f3ce → Noto Color Emoji
    U+1f3d4 - U+1f3d4 → Noto Color Emoji
    U+1f3d5 - U+1f3d5 → Noto Color Emoji
    U+1f3d6 - U+1f3d6 → Noto Color Emoji
    U+1f3d7 - U+1f3d7 → Noto Color Emoji
    U+1f3d8 - U+1f3d8 → Noto Color Emoji
    U+1f3d9 - U+1f3d9 → Noto Color Emoji
    U+1f3da - U+1f3da → Noto Color Emoji
    U+1f3db - U+1f3db → Noto Color Emoji
    U+1f3dc - U+1f3dc → Noto Color Emoji
    U+1f3dd - U+1f3dd → Noto Color Emoji
    U+1f3de - U+1f3de → Noto Color Emoji
    U+1f3df - U+1f3df → Noto Color Emoji
    U+1f3e0 - U+1f3e0 → Noto Color Emoji
    U+1f3ed - U+1f3ed → Noto Color Emoji
    U+1f3f3 - U+1f3f3 → Noto Color Emoji
    U+1f3f5 - U+1f3f5 → Noto Color Emoji
    U+1f3f7 - U+1f3f7 → Noto Color Emoji
    U+1f408 - U+1f408 → Noto Color Emoji
    U+1f415 - U+1f415 → Noto Color Emoji
    U+1f41f - U+1f41f → Noto Color Emoji
    U+1f426 - U+1f426 → Noto Color Emoji
    U+1f43f - U+1f43f → Noto Color Emoji
    U+1f441 - U+1f441 → Noto Color Emoji
    U+1f442 - U+1f442 → Noto Color Emoji
    U+1f446 - U+1f446 → Noto Color Emoji
    U+1f447 - U+1f447 → Noto Color Emoji
    U+1f448 - U+1f448 → Noto Color Emoji
    U+1f449 - U+1f449 → Noto Color Emoji
    U+1f44d - U+1f44d → Noto Color Emoji
    U+1f44e - U+1f44e → Noto Color Emoji
    U+1f453 - U+1f453 → Noto Color Emoji
    U+1f46a - U+1f46a → Noto Color Emoji
    U+1f47d - U+1f47d → Noto Color Emoji
    U+1f4a3 - U+1f4a3 → Noto Color Emoji
    U+1f4b0 - U+1f4b0 → Noto Color Emoji
    U+1f4b3 - U+1f4b3 → Noto Color Emoji
    U+1f4bb - U+1f4bb → Noto Color Emoji
    U+1f4bf - U+1f4bf → Noto Color Emoji
    U+1f4cb - U+1f4cb → Noto Color Emoji
    U+1f4da - U+1f4da → Noto Color Emoji
    U+1f4df - U+1f4df → Noto Color Emoji
    U+1f4e4 - U+1f4e4 → Noto Color Emoji
    U+1f4e5 - U+1f4e5 → Noto Color Emoji
    U+1f4e6 - U+1f4e6 → Noto Color Emoji
    U+1f4ea - U+1f4ea → Noto Color Emoji
    U+1f4eb - U+1f4eb → Noto Color Emoji
    U+1f4ec - U+1f4ec → Noto Color Emoji
    U+1f4ed - U+1f4ed → Noto Color Emoji
    U+1f4f7 - U+1f4f7 → Noto Color Emoji
    U+1f4f9 - U+1f4f9 → Noto Color Emoji
    U+1f4fa - U+1f4fa → Noto Color Emoji
    U+1f4fb - U+1f4fb → Noto Color Emoji
    U+1f4fd - U+1f4fd → Noto Color Emoji
    U+1f508 - U+1f508 → Noto Color Emoji
    U+1f50d - U+1f50d → Noto Color Emoji
    U+1f512 - U+1f512 → Noto Color Emoji
    U+1f513 - U+1f513 → Noto Color Emoji
    U+1f549 - U+1f549 → Noto Color Emoji
    U+1f54a - U+1f54a → Noto Color Emoji
    U+1f550 - U+1f550 → Noto Color Emoji
    U+1f551 - U+1f551 → Noto Color Emoji
    U+1f552 - U+1f552 → Noto Color Emoji
    U+1f553 - U+1f553 → Noto Color Emoji
    U+1f554 - U+1f554 → Noto Color Emoji
    U+1f555 - U+1f555 → Noto Color Emoji
    U+1f556 - U+1f556 → Noto Color Emoji
    U+1f557 - U+1f557 → Noto Color Emoji
    U+1f558 - U+1f558 → Noto Color Emoji
    U+1f559 - U+1f559 → Noto Color Emoji
    U+1f55a - U+1f55a → Noto Color Emoji
    U+1f55b - U+1f55b → Noto Color Emoji
    U+1f55c - U+1f55c → Noto Color Emoji
    U+1f55d - U+1f55d → Noto Color Emoji
    U+1f55e - U+1f55e → Noto Color Emoji
    U+1f55f - U+1f55f → Noto Color Emoji
    U+1f560 - U+1f560 → Noto Color Emoji
    U+1f561 - U+1f561 → Noto Color Emoji
    U+1f562 - U+1f562 → Noto Color Emoji
    U+1f563 - U+1f563 → Noto Color Emoji
    U+1f564 - U+1f564 → Noto Color Emoji
    U+1f565 - U+1f565 → Noto Color Emoji
    U+1f566 - U+1f566 → Noto Color Emoji
    U+1f567 - U+1f567 → Noto Color Emoji
    U+1f56f - U+1f56f → Noto Color Emoji
    U+1f570 - U+1f570 → Noto Color Emoji
    U+1f573 - U+1f573 → Noto Color Emoji
    U+1f574 - U+1f574 → Noto Color Emoji
    U+1f575 - U+1f575 → Noto Color Emoji
    U+1f576 - U+1f576 → Noto Color Emoji
    U+1f577 - U+1f577 → Noto Color Emoji
    U+1f578 - U+1f578 → Noto Color Emoji
    U+1f579 - U+1f579 → Noto Color Emoji
    U+1f587 - U+1f587 → Noto Color Emoji
    U+1f58a - U+1f58a → Noto Color Emoji
    U+1f58b - U+1f58b → Noto Color Emoji
    U+1f58c - U+1f58c → Noto Color Emoji
    U+1f58d - U+1f58d → Noto Color Emoji
    U+1f590 - U+1f590 → Noto Color Emoji
    U+1f5a5 - U+1f5a5 → Noto Color Emoji
    U+1f5a8 - U+1f5a8 → Noto Color Emoji
    U+1f5b1 - U+1f5b1 → Noto Color Emoji
    U+1f5b2 - U+1f5b2 → Noto Color Emoji
    U+1f5bc - U+1f5bc → Noto Color Emoji
    U+1f5c2 - U+1f5c2 → Noto Color Emoji
    U+1f5c3 - U+1f5c3 → Noto Color Emoji
    U+1f5c4 - U+1f5c4 → Noto Color Emoji
    U+1f5d1 - U+1f5d1 → Noto Color Emoji
    U+1f5d2 - U+1f5d2 → Noto Color Emoji
    U+1f5d3 - U+1f5d3 → Noto Color Emoji
    U+1f5dc - U+1f5dc → Noto Color Emoji
    U+1f5dd - U+1f5dd → Noto Color Emoji
    U+1f5de - U+1f5de → Noto Color Emoji
    U+1f5e1 - U+1f5e1 → Noto Color Emoji
    U+1f5e3 - U+1f5e3 → Noto Color Emoji
    U+1f5e8 - U+1f5e8 → Noto Color Emoji
    U+1f5ef - U+1f5ef → Noto Color Emoji
    U+1f5f3 - U+1f5f3 → Noto Color Emoji
    U+1f5fa - U+1f5fa → Noto Color Emoji
    U+1f610 - U+1f610 → Noto Color Emoji
    U+1f687 - U+1f687 → Noto Color Emoji
    U+1f68d - U+1f68d → Noto Color Emoji
    U+1f691 - U+1f691 → Noto Color Emoji
    U+1f694 - U+1f694 → Noto Color Emoji
    U+1f698 - U+1f698 → Noto Color Emoji
    U+1f6ad - U+1f6ad → Noto Color Emoji
    U+1f6b2 - U+1f6b2 → Noto Color Emoji
    U+1f6b9 - U+1f6b9 → Noto Color Emoji
    U+1f6ba - U+1f6ba → Noto Color Emoji
    U+1f6bc - U+1f6bc → Noto Color Emoji
    U+1f6cb - U+1f6cb → Noto Color Emoji
    U+1f6cd - U+1f6cd → Noto Color Emoji
    U+1f6ce - U+1f6ce → Noto Color Emoji
    U+1f6cf - U+1f6cf → Noto Color Emoji
    U+1f6e0 - U+1f6e0 → Noto Color Emoji
    U+1f6e1 - U+1f6e1 → Noto Color Emoji
    U+1f6e2 - U+1f6e2 → Noto Color Emoji
    U+1f6e3 - U+1f6e3 → Noto Color Emoji
    U+1f6e4 - U+1f6e4 → Noto Color Emoji
    U+1f6e5 - U+1f6e5 → Noto Color Emoji
    U+1f6e9 - U+1f6e9 → Noto Color Emoji
    U+1f6f0 - U+1f6f0 → Noto Color Emoji
    U+1f6f3 - U+1f6f3 → Noto Color Emoji

Important environment variables seen by the kitty process:
    PATH                                /nix/store/a723bx5i1bzr9g8vy8yp07dplmr6iqy1-kitty-0.28.1/bin:/nix/store/y9dp5zdwdamskjrnr11vjddvi7cma4z4-imagemagick-7.1.1-15/bin:/nix/store/3j8n1hl92r8bhwzqxgvx3nzpb6h59qm2-ncurses-6.4-dev/bin:/nix/store/l8a1viwbq9q47yybmgsgz2rq9b9pwysq-aspell-env/bin:/nix/store/cdiayy9lcraawg0wj5scnq065d2dk9z0-hunspell-with-dicts-1.7.2/bin:/nix/store/118abj4r9y1mhli8m6cv4x8cj791mw8f-nuspell-with-dicts-5.1.2/bin:/nix/store/39cdnc531y2fg7r75a6l93dl0r1wx1hm-enchant-2.3.4/bin:/nix/store/3cbhqrfmp6byrqvr9yr8wqi5a3np95ch-LanguageTool-6.1/bin:/nix/store/d6clmawmbpr6dyz82v9zb4k6kw5q3npf-ltex-ls-16.0.0/bin:/nix/store/mckya33laxs58s4msprmk00bf02j09jw-texlive-combined-medium-2022-final/bin:/nix/store/bc45k1n0pkrdkr3xa6w84w1xhkl1kkyp-python3-3.10.12/bin:/nix/store/pkh5iv65zlgbjr6rgjlhpc05w5d5x5fd-aspell-0.60.8/bin:/nix/store/qnjzh4b0zgdkpb9x3r3h3bnc3rhdysbx-binutils-wrapper-2.40/bin:/nix/store/4vlsd04znab0vrnklgjwzvaa512ks0z0-ripgrep-13.0.0/bin:/nix/store/4qlz5r10zk61xj8lmlgjbjz0h8il8p1w-fd-8.7.0/bin:/nix/store/vmz626s3xmirgsgc5zmzlxyyb3xd1awx-gnutls-3.8.0-bin/bin:/nix/store/sy9yhqhqfwic8lb0nc4ygsrf1ph1xkc5-imagemagick-7.1.1-15/bin:/nix/store/7gqmifamblx3zb25qcrxdsmsi3az7an2-zstd-1.5.5-bin/bin:/nix/store/3647cvicj50bvr03dl3smrwwh4v4i6mx-shfmt-3.6.0/bin:/nix/store/gaz50r8mc3vasijwpmn7jq92y50himfj-shellcheck-0.9.0-bin/bin:/nix/store/gzd16s4p87n52nnchyzz9hinbil7pggk-sqlite-3.41.2-bin/bin:/nix/store/44lqf2b3jhb99ifnsqdkf576l2ill6jl-editorconfig-core-c-0.12.5/bin:/nix/store/cdd7srlcj77pb403hmzlq7d1r6wyjdh5-_at_mermaid-js_slash_mermaid-cli-10.1.0/bin:/nix/store/8cya31zpz6zk5dwrbjfpmychq0v62jr9-pandoc-2.19.2/bin:/nix/store/lcf37pgp3rgww67v9x2990hbfwx96c1w-gcc-wrapper-12.2.0/bin:/nix/store/xamv1c7wdgb13zypqjqbxm5vzwm7mjba-gdb-13.1/bin:/nix/store/yjh3zl7ca0mvd94n1hl9jzl1bg34iqn0-lldb-14.0.6/bin:/nix/store/h27g4i5qvqffi201c950982018w9khxc-graphviz-7.1.0/bin:/nix/store/fbb3k62l0z44lxpx2pi3c0zwf50qf9dc-wordnet-3.0/bin:/nix/store/fhcgdi10h7c6janjibli9cm7ihymh4hx-python3.10-beancount-2.3.5/bin:/nix/store/8qlwhsdy0rhpgxrbr81mv4r4kmps0rjj-beancount-language-server-1.3.1/bin:/nix/store/sd0qccws4zm99lnswgvkhkn6aczqj7l6-fava-1.24.4/bin:/nix/store/q3fmdxsb55npjkwp06zjh5f25jp2f2hc-haskell-language-server-1.10.0.0/bin:/nix/store/88866djqlz31rf5nzjbn5xgjcyc0iazj-hoogle-5.0.18.3/bin:/nix/store/4qnqzyzjsx4glc5slapf5brrfz18ac4h-cabal-install-3.10.1.0/bin:/nix/store/bz87l3bh60j3fabbj6w1g3rnp4jdjxim-ormolu-0.5.0.1-bin/bin:/nix/store/phjpd444gildgnk98p4qj42c6v0l5kj8-hlint-3.4.1/bin:/nix/store/xhj2if2a76psxz53cl6k3gn4sfsdn97r-html-tidy-5.8.0/bin:/nix/store/1l03gdg4w3cvkygvbxsq9i19flnp1p3y-nodejs-18.17.1/bin:/nix/store/6qqg6843ya9jd727zv67r82q1bvlf9xl-bash-language-server-4.9.2/bin:/nix/store/kfgivrf8jlnp5n6pbw4hn251251rb72i-stylelint-15.6.2/bin:/nix/store/q4ncf9zlr4101n3lr7m08xdax3xq36x9-dockerfile-language-server-nodejs-0.9.0/bin:/nix/store/96i57p8r7ry84k9mkgqmxwj0wljy9wzi-js-beautify-1.14.7/bin:/nix/store/bfh7pz4fl0qqa5rsr78b0minldw5m88v-typescript-language-server-3.3.2/bin:/nix/store/l29nldfmfq5971kv8in8lhzjl8skbryj-typescript-5.0.4/bin:/nix/store/9hn8v7172shzaxggyr88kfwy3p94n5mm-vscode-css-language-server/bin:/nix/store/bz2xyi3sdbyaw15pn9wyvks3928bg516-vscode-html-language-server/bin:/nix/store/9fr3crqpnp3f5ih54s1rshj2y1aawd1a-vscode-json-language-server/bin:/nix/store/4hm1fpvh9mcd214z6pw9vn2dkjfn35cw-vscode-markdown-language-server/bin:/nix/store/ia9gql213bizmh3gw594gdwxccxcijh0-yaml-language-server-1.12.0/bin:/nix/store/0wypjq03mkvzphy51m87n6bkl7y0fx1k-unified-language-server-3.1.0/bin:/nix/store/grpd0l06p53b9fwchzhx1cvq9chb5qya-prettier-2.8.8/bin:/nix/store/i1jf9af43mf4jpnz7angp62bfndm8ksd-jq-1.6-bin/bin:/nix/store/95drg5x0ybrk8596md334ihdm5l6d04k-nixfmt-0.5.0/bin:/nix/store/d2zqw8vws93hs4lgscml0ljpr35j7b1s-python3.10-black-23.1.0/bin:/nix/store/5bxmxf40ssmnq6ahncwv4hdsa0yzgmyr-python3.10-isort-5.12.0/bin:/nix/store/rfm1jd2d8rplgzlsmjif1h843nwdp7j4-pipenv-2023.2.4/bin:/nix/store/5d4i4jsrplxia3ga002iqwql00k4zk0h-python3.10-pytest-7.2.1/bin:/nix/store/wjq64qp097rf8lp4r8ij9657w10gcnj3-python3.10-nose-1.3.7/bin:/nix/store/xc38kpayrjm09rip46444lsc6n1ipck1-python3.10-pyflakes-3.0.1/bin:/nix/store/9950d0s6kicm32vyvc703fjf6nqarcba-python3.10-python-lsp-server-1.7.2/bin:/nix/store/m6cfgkbwj0w00dc58a57p2ia3zg8q3z1-python3.10-grip-4.6.1/bin:/nix/store/ldi05fixfbbgppq01m4iihlcq1fvaqn4-multimarkdown-6.6.0/bin:/nix/store/6b9bvw41ds7q8qzkv4zj5sbivwlhrgz8-xclip-0.13/bin:/nix/store/b1n6h68rd5pzfdc4bhvwamm80xqp18wy-xdotool-3.20211022.1/bin:/nix/store/4p4wmk5snyg1p50dxfcxjncgwh54ly1n-xwininfo-1.1.4/bin:/nix/store/615z69dcn137d5m3qvkxsv5pqhycd2qi-xprop-1.2.6/bin:/nix/store/xng394r197f3p1ivk0rf54f6c3ksv5dl-watchman-2023.01.30.00/bin:/nix/store/l8a1viwbq9q47yybmgsgz2rq9b9pwysq-aspell-env/bin:/nix/store/cdiayy9lcraawg0wj5scnq065d2dk9z0-hunspell-with-dicts-1.7.2/bin:/nix/store/118abj4r9y1mhli8m6cv4x8cj791mw8f-nuspell-with-dicts-5.1.2/bin:/nix/store/39cdnc531y2fg7r75a6l93dl0r1wx1hm-enchant-2.3.4/bin:/nix/store/3cbhqrfmp6byrqvr9yr8wqi5a3np95ch-LanguageTool-6.1/bin:/nix/store/d6clmawmbpr6dyz82v9zb4k6kw5q3npf-ltex-ls-16.0.0/bin:/nix/store/mckya33laxs58s4msprmk00bf02j09jw-texlive-combined-medium-2022-final/bin:/nix/store/bc45k1n0pkrdkr3xa6w84w1xhkl1kkyp-python3-3.10.12/bin:/nix/store/pkh5iv65zlgbjr6rgjlhpc05w5d5x5fd-aspell-0.60.8/bin:/nix/store/qnjzh4b0zgdkpb9x3r3h3bnc3rhdysbx-binutils-wrapper-2.40/bin:/nix/store/4vlsd04znab0vrnklgjwzvaa512ks0z0-ripgrep-13.0.0/bin:/nix/store/4qlz5r10zk61xj8lmlgjbjz0h8il8p1w-fd-8.7.0/bin:/nix/store/vmz626s3xmirgsgc5zmzlxyyb3xd1awx-gnutls-3.8.0-bin/bin:/nix/store/7gqmifamblx3zb25qcrxdsmsi3az7an2-zstd-1.5.5-bin/bin:/nix/store/3647cvicj50bvr03dl3smrwwh4v4i6mx-shfmt-3.6.0/bin:/nix/store/gaz50r8mc3vasijwpmn7jq92y50himfj-shellcheck-0.9.0-bin/bin:/nix/store/gzd16s4p87n52nnchyzz9hinbil7pggk-sqlite-3.41.2-bin/bin:/nix/store/44lqf2b3jhb99ifnsqdkf576l2ill6jl-editorconfig-core-c-0.12.5/bin:/nix/store/kgmcd1lk7zh0qrlp936v68hz5gj5i52p-_at_mermaid-js_slash_mermaid-cli-10.1.0/bin:/nix/store/8cya31zpz6zk5dwrbjfpmychq0v62jr9-pandoc-2.19.2/bin:/nix/store/lcf37pgp3rgww67v9x2990hbfwx96c1w-gcc-wrapper-12.2.0/bin:/nix/store/xamv1c7wdgb13zypqjqbxm5vzwm7mjba-gdb-13.1/bin:/nix/store/yjh3zl7ca0mvd94n1hl9jzl1bg34iqn0-lldb-14.0.6/bin:/nix/store/h27g4i5qvqffi201c950982018w9khxc-graphviz-7.1.0/bin:/nix/store/fbb3k62l0z44lxpx2pi3c0zwf50qf9dc-wordnet-3.0/bin:/nix/store/fhcgdi10h7c6janjibli9cm7ihymh4hx-python3.10-beancount-2.3.5/bin:/nix/store/8qlwhsdy0rhpgxrbr81mv4r4kmps0rjj-beancount-language-server-1.3.1/bin:/nix/store/sd0qccws4zm99lnswgvkhkn6aczqj7l6-fava-1.24.4/bin:/nix/store/q3fmdxsb55npjkwp06zjh5f25jp2f2hc-haskell-language-server-1.10.0.0/bin:/nix/store/88866djqlz31rf5nzjbn5xgjcyc0iazj-hoogle-5.0.18.3/bin:/nix/store/4qnqzyzjsx4glc5slapf5brrfz18ac4h-cabal-install-3.10.1.0/bin:/nix/store/bz87l3bh60j3fabbj6w1g3rnp4jdjxim-ormolu-0.5.0.1-bin/bin:/nix/store/phjpd444gildgnk98p4qj42c6v0l5kj8-hlint-3.4.1/bin:/nix/store/xhj2if2a76psxz53cl6k3gn4sfsdn97r-html-tidy-5.8.0/bin:/nix/store/1l03gdg4w3cvkygvbxsq9i19flnp1p3y-nodejs-18.17.1/bin:/nix/store/6qqg6843ya9jd727zv67r82q1bvlf9xl-bash-language-server-4.9.2/bin:/nix/store/kfgivrf8jlnp5n6pbw4hn251251rb72i-stylelint-15.6.2/bin:/nix/store/q4ncf9zlr4101n3lr7m08xdax3xq36x9-dockerfile-language-server-nodejs-0.9.0/bin:/nix/store/96i57p8r7ry84k9mkgqmxwj0wljy9wzi-js-beautify-1.14.7/bin:/nix/store/bfh7pz4fl0qqa5rsr78b0minldw5m88v-typescript-language-server-3.3.2/bin:/nix/store/l29nldfmfq5971kv8in8lhzjl8skbryj-typescript-5.0.4/bin:/nix/store/vzpi0hf8rma9qjcknczqsxvkm0psdd45-vscode-css-language-server/bin:/nix/store/cpydsw9a829nl9a38hlqry88ilg220hw-vscode-html-language-server/bin:/nix/store/nc7s57ham8lzl5fmhhhf5lh1rldqy0yk-vscode-json-language-server/bin:/nix/store/bcwcklppzbsi8wdg74yasqg4sw8qiz4w-vscode-markdown-language-server/bin:/nix/store/ia9gql213bizmh3gw594gdwxccxcijh0-yaml-language-server-1.12.0/bin:/nix/store/0wypjq03mkvzphy51m87n6bkl7y0fx1k-unified-language-server-3.1.0/bin:/nix/store/grpd0l06p53b9fwchzhx1cvq9chb5qya-prettier-2.8.8/bin:/nix/store/i1jf9af43mf4jpnz7angp62bfndm8ksd-jq-1.6-bin/bin:/nix/store/95drg5x0ybrk8596md334ihdm5l6d04k-nixfmt-0.5.0/bin:/nix/store/d2zqw8vws93hs4lgscml0ljpr35j7b1s-python3.10-black-23.1.0/bin:/nix/store/5bxmxf40ssmnq6ahncwv4hdsa0yzgmyr-python3.10-isort-5.12.0/bin:/nix/store/rfm1jd2d8rplgzlsmjif1h843nwdp7j4-pipenv-2023.2.4/bin:/nix/store/5d4i4jsrplxia3ga002iqwql00k4zk0h-python3.10-pytest-7.2.1/bin:/nix/store/wjq64qp097rf8lp4r8ij9657w10gcnj3-python3.10-nose-1.3.7/bin:/nix/store/xc38kpayrjm09rip46444lsc6n1ipck1-python3.10-pyflakes-3.0.1/bin:/nix/store/rcxknmb6ddh5z6l3i82pxswk7f2xmpxz-python3.10-python-lsp-server-1.7.2/bin:/nix/store/m6cfgkbwj0w00dc58a57p2ia3zg8q3z1-python3.10-grip-4.6.1/bin:/nix/store/ldi05fixfbbgppq01m4iihlcq1fvaqn4-multimarkdown-6.6.0/bin:/nix/store/6b9bvw41ds7q8qzkv4zj5sbivwlhrgz8-xclip-0.13/bin:/nix/store/b1n6h68rd5pzfdc4bhvwamm80xqp18wy-xdotool-3.20211022.1/bin:/nix/store/4p4wmk5snyg1p50dxfcxjncgwh54ly1n-xwininfo-1.1.4/bin:/nix/store/615z69dcn137d5m3qvkxsv5pqhycd2qi-xprop-1.2.6/bin:/nix/store/xng394r197f3p1ivk0rf54f6c3ksv5dl-watchman-2023.01.30.00/bin:/nix/store/y9dp5zdwdamskjrnr11vjddvi7cma4z4-imagemagick-7.1.1-15/bin:/run/wrappers/bin:/home/zeorin/.local/share/flatpak/exports/bin:/var/lib/flatpak/exports/bin:/home/zeorin/.nix-profile/bin:/etc/profiles/per-user/zeorin/bin:/nix/var/nix/profiles/default/bin:/run/current-system/sw/bin:/home/zeorin/.config/doom-emacs/bin
    LANG                                en_ZA.UTF-8
    VISUAL                              /nix/store/qg6znw7rqhjabr6wdbh0rrl1rhfy2hkz-VISUAL.sh
    EDITOR                              /nix/store/546izxnsyfw8rzw0nhk6va9ahrnqllcg-EDITOR.sh
    SHELL                               /run/current-system/sw/bin/fish
    DISPLAY                             :0
    USER                                zeorin
    XDG_CONFIG_DIRS                     /etc/xdg:/home/zeorin/.local/share/flatpak/exports/etc/xdg:/var/lib/flatpak/exports/etc/xdg:/home/zeorin/.nix-profile/etc/xdg:/etc/profiles/per-user/zeorin/etc/xdg:/nix/var/nix/profiles/default/etc/xdg:/run/current-system/sw/etc/xdg
    XDG_SESSION_PATH                    /org/freedesktop/DisplayManager/Session0
    XDG_DATA_HOME                       /home/zeorin/.local/share
    XDG_CONFIG_HOME                     /home/zeorin/.config
    XDG_SEAT                            seat0
    XDG_VIDEOS_DIR                      /home/zeorin/Videos
    XDG_SESSION_DESKTOP                 xsession
    XDG_SESSION_TYPE                    x11
    XDG_PICTURES_DIR                    /home/zeorin/Pictures
    XDG_GREETER_DATA_DIR                /var/lib/lightdm-data/zeorin
    XDG_PUBLICSHARE_DIR                 /home/zeorin/Public
    XDG_CURRENT_DESKTOP                 xsession
    XDG_DOWNLOAD_DIR                    /home/zeorin/Downloads
    XDG_SEAT_PATH                       /org/freedesktop/DisplayManager/Seat0
    XDG_MUSIC_DIR                       /home/zeorin/Music
    XDG_TEMPLATES_DIR                   /home/zeorin/Templates
    XDG_CACHE_HOME                      /home/zeorin/.cache
    XDG_SESSION_CLASS                   user
    XDG_DESKTOP_DIR                     /home/zeorin/Desktop
    XDG_DESKTOP_PORTAL_DIR              /nix/store/8jr5ck16hl48bb6rawwmky1xjzfxj4xb-xdg-portals/share/xdg-desktop-portal/portals
    XDG_VTNR                            7
    XDG_SESSION_ID                      1
    XDG_STATE_HOME                      /home/zeorin/.local/state
    XDG_RUNTIME_DIR                     /run/user/1000
    XDG_DOCUMENTS_DIR                   /home/zeorin/Documents
    XDG_DATA_DIRS                       /nix/store/bh0qcgs9g8p96cyi02xs6l1mh1h9gms8-emacs-gtk3-29.1/share:/nix/store/9r06isigxqfa6b41g2cmci0x5fqxi49p-gsettings-desktop-schemas-44.0/share/gsettings-schemas/gsettings-desktop-schemas-44.0:/nix/store/fpd6sdn9pkkwnj9krpqdrsc2l1lb4dav-gtk+3-3.24.37/share/gsettings-schemas/gtk+3-3.24.37:/nix/store/smg0xbn6fyxz4mkn4df67q62ab4aaa0d-emacs-gtk3-29.1-rc1/share:/nix/store/9r06isigxqfa6b41g2cmci0x5fqxi49p-gsettings-desktop-schemas-44.0/share/gsettings-schemas/gsettings-desktop-schemas-44.0:/nix/store/fpd6sdn9pkkwnj9krpqdrsc2l1lb4dav-gtk+3-3.24.37/share/gsettings-schemas/gtk+3-3.24.37:/nix/store/4q4ib4xv74mvl27hpyba0nzskwsqhylq-desktops/share:/home/zeorin/.local/share/flatpak/exports/share:/var/lib/flatpak/exports/share:/home/zeorin/.nix-profile/share:/etc/profiles/per-user/zeorin/share:/nix/var/nix/profiles/default/share:/run/current-system/sw/share

Additional context

Adding --debug-font-fallback does not seem to yield any clues:

[235 15:53:42.413054] Preloaded font faces:
[235 15:53:42.413122] normal face: /nix/store/x9xli3ba6gwplkfsa7xzr051a16qqvn8-home-manager-path/share/fonts/truetype/DejaVuSansMono.ttf:0
[235 15:53:42.413163] bold face: /nix/store/x9xli3ba6gwplkfsa7xzr051a16qqvn8-home-manager-path/share/fonts/truetype/DejaVuSansMono.ttf:0
[235 15:53:42.413182] italic face: /nix/store/x9xli3ba6gwplkfsa7xzr051a16qqvn8-home-manager-path/share/fonts/truetype/DejaVuSansMono.ttf:0
[235 15:53:42.413220] bi face: /nix/store/x9xli3ba6gwplkfsa7xzr051a16qqvn8-home-manager-path/share/fonts/truetype/DejaVuSansMono.ttf:0
[235 15:53:42.413239] Symbol map faces:
[235 15:53:42.413269] /home/zeorin/.nix-profile/share/fonts/noto/NotoColorEmoji.ttf:0
kovidgoyal commented 1 year ago

Dont do that. Absolutely never mess with unicode codepoint widths. Doing that means any program running in the terminal now has absolutely no way to know what width a string has.

zeorin commented 1 year ago

Do programs make these assumptions? The standard says that the default presentation style of these codepoints is effectively up to the environment. https://www.unicode.org/reports/tr51/#Emoji_vs_Text_Display

Even if programs make those assumptions, shouldn't users still be able to control the default presentation? Obviously, for characters like *#0123456789, changing their default presentation is foolhardy (they were included in this bug report for completeness' sake).

Regardless of the wisdom of what I'm doing, I'm asking kitty to use a specific font for specific code points, in a way that the standard allows for, and kitty silently makes some of those characters invisible, it doesn't fall back to a text representation, nor does it log an error or a warning.

I think that regardless of one's opinion about whether you want to allow a user to set the default presentation of these codepoints explicitly, the current behaviour is still a bug, at least ito the lack of feedback or fallback.

kovidgoyal commented 1 year ago

On Wed, Aug 23, 2023 at 11:40:16PM -0700, Xandor Schiefer wrote:

Do programs make these assumptions? The standard says that the default presentation style of these codepoints is effectively up to the environment.https://www.unicode.org/reports/tr51/#Emoji_vs_Text_Display

I would not have said that they do if they didnt, now would I? And even a moments thought about the issue would lead one to conclude that they have to. There are two independent players that need to compute the width of the string and arrive at the same answer. The terminal program and the terminal emulator. The only way that can happen is if both use the same assumptions/standards.

Even if programs make those assumptions, shouldn't users still be able to control the default presentation? Obviously, for characters like *#0123456789, changing their default presentation is foolhardy (they were included in this bug report for completeness' sake).

No, because now you have made it impossible for the two parties above to agree on widths.

Regardless of the wisdom of what I'm doing, I'm asking kitty to use a specific font for specific code points, in a way that the standard allows for, and kitty silently makes some of those characters invisible, it doesn't fall back to a text representation, nor does it log an error or a warning.

The standard does not allow for it.

I think that regardless of one's opinion about whether you want to allow a user to set the default presentation of these codepoints explicitly, the current behaviour is still a bug, at least ito the lack of feedback or fallback.

Sure, except that what you are doing will break things and therefore is not a supported use case and not one I want to spend time adding extra error handling for. Patches welcome.

zeorin commented 1 year ago

How would you feel about a patch that picks a presentation of these code points depending on whether they're directly followed by whitespace or not?

kovidgoyal commented 1 year ago

What's the use case? Rather than using spaces which would allow only for making text presentation into emoji rather than the other way around, use the variation selectors, that allow you to do both.

zeorin commented 1 year ago

I prefer emoji presentations, where possible, as they are often easier to read, especially at lower font sizes. But, I'm not necessarily in control of the codepoints that are emitted by programs.

Your point about a program not having any way to know how many cells a terminal emulator will use to render a glyph, and thus needing to assume the default presentation's cell width, is indeed a very good point.

However, it is common to display some glyphs a little bit bigger than a single cell if there is sufficient space to do so, typically when the character is succeeded by a space. Even kitty itself already does this for certain glyphs:

When separated by non-breaking spaces, the text characters all use only one cell to render: image

When separated by normal spaces, some text characters are rendered larger, they're allowed to bleed into the following cell: image

I would like to be able to tell kitty to render some of these code points as emoji if they are followed by a space. And/or, being able force the emoji representation regardless of whether the character is followed by a space, but just rendering it smaller when it is not followed by a space; though I'm not as sure of the benefit of this, they might be rendered too small to be worth it.

kovidgoyal commented 1 year ago

But if you are not in control of the output from the programs, how are you going to insert the needed spaces? The issue here is that if kitty changes how characters are rendered in ways outside the standard then programs can no longer rely on that rendering. Admittedly, if the width isn't changed, the consequences are not too severe, but they are still present. For instance, text mode characters are rendered using the foreground color, emojis are not. A program could conceivably rely on a character being rendered in the foreground color.

zeorin commented 1 year ago

But if you are not in control of the output from the programs, how are you going to insert the needed spaces?

I'm not going to be able to insert such spaces in most cases. However, because of the aforementioned current behaviour of some of the codepoints which default to text representation being displayed larger if there is a space following them, in some cases the programs do emit a space following the character specifically for that reason.

Even if a programmer may not have added the space specifically for that reason, since the characters in question are pictographs and not letters, they are usually not emitted next to non-space characters anyway.

The issue here is that if kitty changes how characters are rendered in ways outside the standard then programs can no longer rely on that rendering.

For some of these characters, the rendering is already dependent on whether or not they're followed by a space. Their rendered width is already variable. This is, in principle, not new behaviour, at least as far as rendered widths are concerned.

Even for characters whose text presentation is not rendered larger when followed by a space, if I was able to render them as emoji when they're followed by a space, this is very unlikely to cause an issue with the proper functioning or rendering of any program, because the emoji is being rendered into its original characters' cell and the following space's cell. No other cells would be affected in any way.

At worst, perhaps for some programs some of the emoji might end up looking more crowded by neighbouring characters than the program author intended, but it breaks none of the assumptions they would have made about which other glyphs would have been rendered where, as the overall cell grid is not affected.

I do think this should be opt-in functionality, for specific code points that the user can specify, not for all of them (especially since *#1234567890 are part of this set of codepoints). Given the ability to be able to programmatically change kitty's settings at runtime, it's even possible for a user to wrap programs in a shell script that enables / disables this functionality for specific code points if they wish, effectively allowing one to use a specific "emoji presentation map" for some programs.

Admittedly, if the width isn't changed, the consequences are not too severe, but they are still present. For instance, text mode characters are rendered using the foreground color, emojis are not. A program could conceivably rely on a character being rendered in the foreground color.

Yes, that is true. But given that the user would opt in to this behaviour, that is the trade-off that they're making. But, they'd be able to choose which code points behaved this way, and with some shell scripting they could even customise this for some programs.

When combined with symbol_map, they could even choose different emoji fonts for different characters, which might also be a way to work around some of those issues; some emoji fonts use very flat designs, but others don't, which affects how much a glyph might e.g. "fade into the background" if its color is similar to the background color; emoji fonts sometimes also have rather different pictograms for some code points, e.g. "🫖 Teapot".

kovidgoyal commented 1 year ago

On Thu, Aug 24, 2023 at 04:32:49AM -0700, Xandor Schiefer wrote:

But if you are not in control of the output from the programs, how are you going to insert the needed spaces?

I'm not going to be able to insert such spaces in most cases. However, because of the aforementioned current behaviour of some of the codepoints which default to text representation being displayed larger if there is a space following them, in some cases the programs do emit a space following the character specifically for that reason.

Converting a text mode character into a emoji is not a behavior that should be relied on. If a programmer wants emoji presentation they should ask for it. Perpetuating this hack is just bad for the ecosystem.

Even if a programmer may not have added the space specifically for that reason, since the characters in question are pictographs and not letters, they are usually not emitted next to non-space characters anyway.

Either the programmer wanted text mode or was not aware of the two modes at all. In either case you are hacking around their intentions which can break things. Now everyone everywhere has to be aware that how their unicode codepoints are rendered is dependent on whether they are followed by a space or not.

The issue here is that if kitty changes how characters are rendered in ways outside the standard then programs can no longer rely on that rendering.

For some of these characters, the rendering is already dependent on whether or not they're followed by a space. Their rendered width is already variable. This is, in principle, not new behaviour, at least as far as rendered widths are concerned.

kitty has variable rendered width only for PUA characters (which have no defined appearance) and some dingbats. It does not change the type of character only the amount of width it is rendered in. That is not the same as changing the type of a character from text to emoji or vice versa. Text and emoji characters have very different semantics when it comes to foreground colors.

Even for characters whose text presentation is not rendered larger when followed by a space, if I was able to render them as emoji when they're followed by a space, this is very unlikely to cause an issue with the proper functioning or rendering of any program, because the emoji is being rendered into its original characters' cell and the following space's cell. No other cells would be affected in any way.

background = white foreground = black. text mode character rendered as black. emoji happens to be mostly white => rendered invisible or indistinguishable.

At worst, perhaps for some programs some of the emoji might end up looking more crowded by neighbouring characters than the program author intended, but it breaks none of the assumptions they would have made about which other glyphs would have been rendered where, as the overall cell grid is not affected.

I do think this should be opt-in functionality, for specific code points that the user can specify, not for all of them (especially since *#1234567890 are part of this set of codepoints). Given the ability to be able to programmatically change kitty's settings at runtime, it's even possible for a user to wrap programs in a shell script that enables / disables this functionality for specific code points if they wish, effectively allowing one to use a "emoji map" for some programs.

Your opt in functionality makes it impossible to rely on the nature of characters for people trying to write terminal programs. I have again and again refused to implement such options in kitty. See bold-as-bright or overriding fonts for box drawing, braille and related symbols.

I have been struggling for years to introduce some thoughtful design and coherence into this space which is basically a tower of half thought out hacks upon half thought out hacks.

Ordinarily I am all in favor of allowing users to customise things, but not at the expense of making it impossible to write robust terminal programs.

Admittedly, if the width isn't changed, the consequences are not too severe, but they are still present. For instance, text mode characters are rendered using the foreground color, emojis are not. A program could conceivably rely on a character being rendered in the foreground color.

Yes, that is true. But given that the user would opt in to this behaviour, that is the trade-off that they're making. But, they'd be able to choose which code points behaved this way, and with some shell scripting they could even customise this for some programs.

When combined with symbol_map, they could even choose different emoji fonts for different characters, which might also be a way to work around some of those issues; some emoji fonts use very flat designs, but others don't, which affects how much a glyph might e.g. "fade into the background" if its color is similar to the background color; emoji fonts sometimes also have rather different pictograms for some code points, e.g. "🫖 Teapot".

Sorry, but I am not convinced.

zeorin commented 1 year ago

OK. I appreciate the attention you gave this issue. Thanks for all the work you do.