I found that sometimes notifications are not rendered correctly. Here is an example:
local notify = require("notify")
local title = "\u{1D4AF}\u{212F}\u{1D4C8}\u{1D4C9}" -- "𝒯ℯ𝓈𝓉"
notify("Title not correctly highlighted", nil, { title = title, render = "compact" })
notify("Borderline too short", nil, { title = title, render = "simple" })
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
](https://neovim.io/doc/user/api.html#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).