fix(tostring): resolve emoji shorthands to Unicode for correct table column widths#483
Merged
OXY2DEV merged 1 commit intoOXY2DEV:mainfrom Mar 20, 2026
Merged
Conversation
…calculation md_str.emoji() was stripping the colons from shortcodes (e.g. :rocket: → 'rocket') but never resolving them to the actual Unicode emoji character. This caused strdisplaywidth() to return the name length (e.g. 6 for 'rocket') instead of the true on-screen width (2 for '🚀'), producing column width overestimates and misaligned table borders. Now resolve through symbols.shorthands[] — matching what the inline renderer actually displays — so width calculations are accurate.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Problem
Table columns containing emoji shortcodes (e.g.
:rocket:,:sparkles:) render with misaligned borders. The column width calculation overestimates cells that contain emojis.Root cause
md_str.emoji()intostring.luastrips the colons from shortcodes but never resolves them to the actual Unicode character:tostringreturnedstrdisplaywidthstrdisplaywidth:sparkles:sparkles:rocket:rocket:wrench:wrenchThe inline renderer (
inline.emoji) correctly replaces the shortcode with the Unicode symbol viasymbols.shorthands[], but the width-calculation path never did — socol_widthswas inflated by the difference.Fix
Resolve the shortcode through
symbols.shorthands[]inmd_str.emoji()(falling back to the stripped name if the symbol isn't found), matching what the inline renderer actually displays.