diff options
author | zeertzjq <zeertzjq@outlook.com> | 2023-06-11 12:23:11 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-06-11 12:23:11 +0800 |
commit | 4229bbe514b7a1bc5b9f888a294cc8a323a7d869 (patch) | |
tree | 0c6d03df472e4aaa3d31f2fcb18a878ca455fb6e | |
parent | 2237b384e4027af7c977a4be01d792fcb790819c (diff) | |
download | rneovim-4229bbe514b7a1bc5b9f888a294cc8a323a7d869.tar.gz rneovim-4229bbe514b7a1bc5b9f888a294cc8a323a7d869.tar.bz2 rneovim-4229bbe514b7a1bc5b9f888a294cc8a323a7d869.zip |
fix(helptags): make multibyte help tags work properly (#23975)
-rw-r--r-- | src/nvim/help.c | 2 | ||||
-rw-r--r-- | src/nvim/tag.c | 2 | ||||
-rw-r--r-- | test/functional/ex_cmds/help_spec.lua | 17 |
3 files changed, 19 insertions, 2 deletions
diff --git a/src/nvim/help.c b/src/nvim/help.c index 46310cb681..8c7c19e7c3 100644 --- a/src/nvim/help.c +++ b/src/nvim/help.c @@ -458,7 +458,7 @@ int find_help_tags(const char *arg, int *num_matches, char ***matches, bool keep // Replace "^x" by "CTRL-X". Don't do this for "^_" to make // ":help i_^_CTRL-D" work. // Insert '-' before and after "CTRL-X" when applicable. - if (*s < ' ' + if ((uint8_t)(*s) < ' ' || (*s == '^' && s[1] && (ASCII_ISALPHA(s[1]) || vim_strchr("?@[\\]^", (uint8_t)s[1]) != NULL))) { if (d > IObuff && d[-1] != '_' && d[-1] != '\\') { diff --git a/src/nvim/tag.c b/src/nvim/tag.c index 18331cc95d..4fe669631f 100644 --- a/src/nvim/tag.c +++ b/src/nvim/tag.c @@ -1762,7 +1762,7 @@ static tagmatch_status_T findtags_parse_line(findtags_state_T *st, tagptrs_T *ta if (st->state == TS_BINARY) { int tagcmp; // Simplistic check for unsorted tags file. - int i = (int)tagpp->tagname[0]; + int i = (uint8_t)tagpp->tagname[0]; if (margs->sortic) { i = TOUPPER_ASC(tagpp->tagname[0]); } diff --git a/test/functional/ex_cmds/help_spec.lua b/test/functional/ex_cmds/help_spec.lua index 0ec7249218..7fc318d813 100644 --- a/test/functional/ex_cmds/help_spec.lua +++ b/test/functional/ex_cmds/help_spec.lua @@ -4,6 +4,10 @@ local clear = helpers.clear local command = helpers.command local eq = helpers.eq local funcs = helpers.funcs +local meths = helpers.meths +local mkdir = helpers.mkdir +local rmdir = helpers.rmdir +local write_file = helpers.write_file describe(':help', function() before_each(clear) @@ -25,4 +29,17 @@ describe(':help', function() -- Before #9773, Nvim would crash on quitting the help window. eq(1002, funcs.win_getid()) end) + + it('multibyte help tags work #23978', function() + mkdir('Xhelptags') + finally(function() + rmdir('Xhelptags') + end) + mkdir('Xhelptags/doc') + write_file('Xhelptags/doc/Xhelptags.txt', '*…*') + command('helptags Xhelptags/doc') + command('set rtp+=Xhelptags') + command('help …') + eq('*…*', meths.get_current_line()) + end) end) |