fix: improve string width calculation #247
Open
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.
I found that sometimes notifications are not rendered correctly. Here is an example:
Such glitches can be caused by several factors: UTF-16 surrogate pairs (accidentally taken into account here and here), combining character sequences, fullwidth characters, etc.
To fix the problem, this PR makes the following changes:
#
operator to determine the position of extmarks, as it requires simply byte indices.vim.api.nvim_strwidth
instead ofvim.fn.strchars
orvim.str_utfindex
to more reliably calculate the width of a string on screen.Tested with NeoVim
v0.5.1
andv0.10.0-nightly
.Limitations
vim.api.nvim_strwidth
works well in many cases, but is not perfect (e.g., for emojis).