mirror of
https://github.com/neovim/neovim.git
synced 2026-05-01 11:34:56 +00:00
refactor(options): use schar_T representation for fillchars and listchars
A bit big, but practically it was a lot simpler to change over all fillchars and all listchars at once, to not need to maintain two parallel implementations. This is mostly an internal refactor, but it also removes an arbitrary limitation: that 'fillchars' and 'listchars' values can only be single-codepoint characters. Now any character which fits into a single screen cell can be used.
This commit is contained in:
@@ -6,6 +6,7 @@ local eq = helpers.eq
|
||||
local exc_exec = helpers.exc_exec
|
||||
local insert = helpers.insert
|
||||
local feed = helpers.feed
|
||||
local meths = helpers.meths
|
||||
|
||||
describe("'fillchars'", function()
|
||||
local screen
|
||||
@@ -53,10 +54,18 @@ describe("'fillchars'", function()
|
||||
]])
|
||||
end)
|
||||
|
||||
it('supports composing multibyte char', function()
|
||||
command('set fillchars=eob:å̲')
|
||||
screen:expect([[
|
||||
^ |
|
||||
å̲ |*3
|
||||
|
|
||||
]])
|
||||
end)
|
||||
|
||||
it('handles invalid values', function()
|
||||
shouldfail('eob:') -- empty string
|
||||
shouldfail('eob:馬') -- doublewidth char
|
||||
shouldfail('eob:å̲') -- composing chars
|
||||
shouldfail('eob:xy') -- two ascii chars
|
||||
shouldfail('eob:\255', 'eob:<ff>') -- invalid UTF-8
|
||||
end)
|
||||
@@ -178,4 +187,28 @@ describe("'listchars'", function()
|
||||
|
|
||||
]])
|
||||
end)
|
||||
|
||||
it('supports composing chars', function()
|
||||
screen:set_default_attr_ids {
|
||||
[1] = { foreground = Screen.colors.Blue1, bold = true },
|
||||
}
|
||||
feed('i<tab><tab><tab>x<esc>')
|
||||
command('set list laststatus=0')
|
||||
-- tricky: the tab value forms three separate one-cell chars,
|
||||
-- thus it should be accepted despite being a mess.
|
||||
command('set listchars=tab:d̞̄̃̒̉̎ò́̌̌̂̐l̞̀̄̆̌̚,eol:å̲')
|
||||
screen:expect([[
|
||||
{1:d̞̄̃̒̉̎ò́̌̌̂̐ò́̌̌̂̐ò́̌̌̂̐ò́̌̌̂̐ò́̌̌̂̐ò́̌̌̂̐l̞̀̄̆̌̚d̞̄̃̒̉̎ò́̌̌̂̐ò́̌̌̂̐ò́̌̌̂̐ò́̌̌̂̐ò́̌̌̂̐ò́̌̌̂̐l̞̀̄̆̌̚d̞̄̃̒̉̎ò́̌̌̂̐ò́̌̌̂̐ò́̌̌̂̐ò́̌̌̂̐ò́̌̌̂̐ò́̌̌̂̐l̞̀̄̆̌̚}^x{1:å̲} |
|
||||
{1:~ }|*3
|
||||
|
|
||||
]])
|
||||
|
||||
meths._invalidate_glyph_cache()
|
||||
screen:_reset()
|
||||
screen:expect([[
|
||||
{1:d̞̄̃̒̉̎ò́̌̌̂̐ò́̌̌̂̐ò́̌̌̂̐ò́̌̌̂̐ò́̌̌̂̐ò́̌̌̂̐l̞̀̄̆̌̚d̞̄̃̒̉̎ò́̌̌̂̐ò́̌̌̂̐ò́̌̌̂̐ò́̌̌̂̐ò́̌̌̂̐ò́̌̌̂̐l̞̀̄̆̌̚d̞̄̃̒̉̎ò́̌̌̂̐ò́̌̌̂̐ò́̌̌̂̐ò́̌̌̂̐ò́̌̌̂̐ò́̌̌̂̐l̞̀̄̆̌̚}^x{1:å̲} |
|
||||
{1:~ }|*3
|
||||
|
|
||||
]])
|
||||
end)
|
||||
end)
|
||||
|
||||
Reference in New Issue
Block a user