Draw an emoji-presentation character from the color face #31
No reviewers
Labels
No labels
Area/ci
Area/cli
Area/client
Area/client-core
Area/daemon
Area/deps
Area/docs
Area/grid
Area/manual
Area/nix
Area/protocol
Area/pty
Area/render
Area/shaping
Area/skills
Area/transport
Area/vt
Compat/Breaking
Kind/Bug
Kind/Documentation
Kind/Enhancement
Kind/Feature
Kind/Performance
Kind/Security
Kind/Testing
perf-regression-accepted
Reviewed
Confirmed
Reviewed
Duplicate
Reviewed
Invalid
Reviewed
Won't Fix
Status
Blocked
Status
Need More Info
Status
Upstream
No milestone
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
felis-terminal/felis!31
Loading…
Reference in a new issue
No description provided.
Delete branch "fix/emoji-presentation-face"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Closes #14.
A character whose default presentation is emoji (
Emoji_Presentation=Yes, such as ⭐ ⚡ ☕ ⌚ 🀄) now takes the first color face covering it, the primary included, instead of the first face of any kind. Before, the symbol faces that precede the emoji face in the fallback chain drew these characters small and monochrome in their two-cell footprint. kitty'sfont_for_cellmakes the same choice.crates/felis-shaping/src/presentation.rs: theEmoji_Presentationtable (Unicode 17.0.0emoji-data.txt), tested against unicode-width and against representative inclusions and exclusions.FontStack::resolve/resolve_styled_indexconsult the property, so the char path and the cluster path agree. An explicitfont.fallbacklist keeps its declared order for every other character.Shaper::shape_cluster: a VS15 directly after the base (⭐︎,🀄︎) keeps the base on the first covering face. Otherwise the existing rules apply: the ZWJ/modifier anchor first, then VS16.Before / after (offscreen render with Moralerspace Neon HW):
05486a1249c3ed6b0e4dThe Criterion gate failure is unrelated to this change: the benched crate (felis-client-core) does not depend on felis-shaping, the only crate the change touches besides felis-render-wgpu tests. The two runs flagged different benches (daemon_side/shell_prompt +64%, then multi_cycle_end_to_end/plaintext_scroll_individual +15.3%), both while the shared runner host was loaded. All other checks pass.