diff options
author | Kovas Palunas <kovas@uw.edu> | 2019-06-18 13:35:35 -0700 |
---|---|---|
committer | Justin M. Keyes <justinkz@gmail.com> | 2019-06-30 15:25:49 +0200 |
commit | fdd8dcae01beb66397226ad65e4f1bbd3d1dd55c (patch) | |
tree | 2450b7c70e68676cd2eec30005460f1e09e06ce9 | |
parent | 0480e991d2180025ef040629c5dcd0a193055a2e (diff) | |
download | rneovim-fdd8dcae01beb66397226ad65e4f1bbd3d1dd55c.tar.gz rneovim-fdd8dcae01beb66397226ad65e4f1bbd3d1dd55c.tar.bz2 rneovim-fdd8dcae01beb66397226ad65e4f1bbd3d1dd55c.zip |
man.vim: Handle ANSI escape sequences with ":" #10267
closes #10267
-rw-r--r-- | runtime/lua/man.lua | 4 | ||||
-rw-r--r-- | test/functional/plugin/man_spec.lua | 33 |
2 files changed, 26 insertions, 11 deletions
diff --git a/runtime/lua/man.lua b/runtime/lua/man.lua index 1da8ed85fc..ba6b9d09c9 100644 --- a/runtime/lua/man.lua +++ b/runtime/lua/man.lua @@ -107,7 +107,9 @@ local function highlight_line(line, linenr) -- followed by '[', then a series of parameter and intermediate bytes in -- the range 0x20 - 0x3f, then 'm'. (See ECMA-48, sections 5.4 & 8.3.117) local sgr = prev_char:match("^%[([\032-\063]*)m$") - if sgr then + -- Ignore escape sequences with : characters, as specified by ITU's T.416 + -- Open Document Architecture and interchange format. + if sgr and not string.find(sgr, ":") then local match while sgr and #sgr > 0 do -- Match against SGR parameters, which may be separated by ';' diff --git a/test/functional/plugin/man_spec.lua b/test/functional/plugin/man_spec.lua index e5da7932a5..b25bd7e85a 100644 --- a/test/functional/plugin/man_spec.lua +++ b/test/functional/plugin/man_spec.lua @@ -1,23 +1,19 @@ local helpers = require('test.functional.helpers')(after_each) local plugin_helpers = require('test.functional.plugin.helpers') - local Screen = require('test.functional.ui.screen') - local command, eval, rawfeed = helpers.command, helpers.eval, helpers.rawfeed - -before_each(function() - plugin_helpers.reset() - helpers.clear() - command('syntax on') - command('set filetype=man') -end) +local clear = helpers.clear describe(':Man', function() describe('man.lua: highlight_line()', function() local screen before_each(function() - command('syntax off') -- Ignore syntax groups + plugin_helpers.reset() + clear() + command('syntax on') + command('set filetype=man') + command('syntax off') -- Ignore syntax groups screen = Screen.new(52, 5) screen:set_default_attr_ids({ b = { bold = true }, @@ -131,5 +127,22 @@ describe(':Man', function() | ]]) end) + + it('handles : characters in input', function() + rawfeed([[ + i<C-v><C-[>[40m 0 <C-v><C-[>[41m 1 <C-v><C-[>[42m 2 <C-v><C-[>[43m 3 + <C-v><C-[>[44m 4 <C-v><C-[>[45m 5 <C-v><C-[>[46m 6 <C-v><C-[>[47m 7 <C-v><C-[>[100m 8 <C-v><C-[>[101m 9 + <C-v><C-[>[102m 10 <C-v><C-[>[103m 11 <C-v><C-[>[104m 12 <C-v><C-[>[105m 13 <C-v><C-[>[106m 14 <C-v><C-[>[107m 15 + <C-v><C-[>[48:5:16m 16 <ESC>]]) + eval('man#init_pager()') + + screen:expect([[ + ^ 0 1 2 3 | + 4 5 6 7 8 9 | + 10 11 12 13 14 15 | + 16 | + | + ]]) + end) end) end) |