Skip to content

Emoji candidates render as missing glyphs when candidate_format omits [label] #1138

@wang-yzh

Description

@wang-yzh

Environment

  • Squirrel: 1.1.2
  • Rime: 1.16.0
  • macOS frontend: Squirrel for macOS
  • Layout: horizontal / linear candidate list
  • Tested with both Rime Ice and Wanxiang schemas

Problem

Some emoji candidates render as missing-glyph boxes when candidate_format omits the label placeholder.

The issue is reproducible with emoji such as:

  • 😄
  • 🥺
  • 🍃
  • 🇨🇳

Some other emoji-like symbols still render correctly, for example:

  • 1️⃣

Reproduction

Use a custom Squirrel style where candidate_format does not include [label]:

patch:
  style/candidate_list_layout: linear
  style/text_orientation: horizontal
  style/candidate_format: "[candidate] [comment]"

  preset_color_schemes/purity_of_form_custom/candidate_list_layout: linear
  preset_color_schemes/purity_of_form_custom/text_orientation: horizontal
  preset_color_schemes/purity_of_form_custom/candidate_format: "[candidate] [comment]"

Deploy Squirrel, then trigger emoji candidates from an emoji-enabled schema.

Observed result:

  • Emoji such as 😄, 🥺, 🍃, and 🇨🇳 are shown as tofu/missing-glyph boxes in the candidate window.

Then change only candidate_format back to a label-containing format:

patch:
  style/candidate_format: "[label]. [candidate] [comment]"
  preset_color_schemes/purity_of_form_custom/candidate_format: "[label]. [candidate] [comment]"

Deploy again.

Observed result:

  • The same emoji candidates render correctly.

Notes

During testing, the following did not fix the missing-glyph rendering:

  • Changing color values
  • Resetting compact layout geometry such as border_height, border_width, base_offset, and surrounding_extra_expansion
  • Adding AppleColorEmoji / Apple Color Emoji fallbacks to font_face
  • Adding emoji font fallbacks to label_font_face and comment_font_face

The behavior seems specifically tied to whether candidate_format contains the label placeholder.

Expected Behavior

Emoji candidates should render correctly even when the user hides labels with a format such as:

candidate_format: "[candidate] [comment]"

If [label] is required internally for correct text shaping or fallback, it would be helpful to document that limitation.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions