aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorzeertzjq <zeertzjq@outlook.com>2023-06-11 12:23:11 +0800
committerGitHub <noreply@github.com>2023-06-11 12:23:11 +0800
commit4229bbe514b7a1bc5b9f888a294cc8a323a7d869 (patch)
tree0c6d03df472e4aaa3d31f2fcb18a878ca455fb6e
parent2237b384e4027af7c977a4be01d792fcb790819c (diff)
downloadrneovim-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.c2
-rw-r--r--src/nvim/tag.c2
-rw-r--r--test/functional/ex_cmds/help_spec.lua17
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)