rcarriga / nvim-notify

A fancy, configurable, notification manager for NeoVim
MIT License
2.88k stars 72 forks source link

fix: improve string width calculation #247

Open teatimeguest opened 5 months ago

teatimeguest commented 5 months ago

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" })
notifications

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:

Tested with NeoVim v0.5.1 and v0.10.0-nightly.

Limitations

vim.api.nvim_strwidth works well in many cases, but is not perfect (e.g., for emojis).