TERMINAL CORE

Unicode & Emoji Support

CJK, RTL, combining characters, color emoji. Unicode rendered correctly, not approximately.

Questions this answers

  • Terminal not displaying emoji correctly on macOS
  • CJK characters wrong width in terminal emulator
  • How to fix broken Unicode rendering in my terminal
  • Terminal emoji alignment issues with Powerline fonts
  • Combining characters not rendering in terminal

How it works

Chau7 implements Unicode 15.1 character width calculation using the East Asian Width property and the emoji presentation selector rules. CJK ideographs, fullwidth forms, and emoji with presentation selectors are correctly assigned double-width cells. Ambiguous-width characters follow a configurable policy (single or double width) to match user locale expectations.

Combining characters and grapheme clusters are rendered correctly by grouping code points according to Unicode Extended Grapheme Cluster boundaries. A base character followed by any number of combining marks (accents, diacritics, enclosing marks) occupies a single terminal cell. Emoji sequences including skin tone modifiers, ZWJ sequences (family, profession), and flag sequences are rendered as a single glyph in one or two cells.

Text shaping is delegated to Core Text, which handles complex scripts (Arabic, Devanagari, Thai) that require contextual glyph selection and reordering. The shaped glyph output is cached in the Metal glyph atlas alongside monospace glyphs, so complex script rendering incurs no per-frame overhead after the initial shaping pass.

Why it matters

Modern developer workflows produce Unicode content constantly: international file paths, multilingual log messages, emoji in commit messages, and mathematical symbols in documentation. Chau7 handles Unicode at the grapheme-cluster level, correctly measuring and rendering everything from Chinese characters to ZWJ emoji sequences.

Frequently asked questions

Does Chau7 support Nerd Fonts and Powerline symbols?

Yes. Nerd Font symbols are Private Use Area code points that Chau7 renders at the correct single-cell width. Powerline-patched fonts work without any special configuration.

How does Chau7 handle emoji that are wider than two cells?

No standard emoji exceeds two terminal cells. ZWJ sequences (like family emoji composed of multiple people) are rendered as a single glyph within two cells. If the font does not support a particular ZWJ sequence, Chau7 falls back to rendering the component emoji sequentially.

Can I use a different font for CJK characters?

Yes. Chau7 supports per-script font fallback configuration. You can assign a dedicated CJK font (like Sarasa Mono or Noto Sans CJK) that will be used for CJK code points while your primary font handles Latin text.