diff --git a/src/nvim/ex_getln.c b/src/nvim/ex_getln.c index 1a97dc3d6f..7e6bf862d7 100644 --- a/src/nvim/ex_getln.c +++ b/src/nvim/ex_getln.c @@ -3669,27 +3669,44 @@ expand_cmdline ( return EXPAND_OK; } -/* - * Cleanup matches for help tags: remove "@en" if "en" is the only language. - */ - +// Cleanup matches for help tags: +// Remove "@ab" if the top of 'helplang' is "ab" and the language of the first +// tag matches it. Otherwise remove "@en" if "en" is the only language. static void cleanup_help_tags(int num_file, char_u **file) { - int i, j; - int len; + char_u buf[4]; + char_u *p = buf; - for (i = 0; i < num_file; ++i) { - len = (int)STRLEN(file[i]) - 3; - if (len > 0 && STRCMP(file[i] + len, "@en") == 0) { - /* Sorting on priority means the same item in another language may - * be anywhere. Search all items for a match up to the "@en". */ - for (j = 0; j < num_file; ++j) + if (p_hlg[0] != NUL) { + *p++ = '@'; + *p++ = p_hlg[0]; + *p++ = p_hlg[1]; + } + *p = NUL; + + for (int i = 0; i < num_file; i++) { + int len = (int)STRLEN(file[i]) - 3; + if (len <= 0) { + continue; + } + if (i == 0 && STRCMP(file[i] + len, buf) == 0) { + file[i][len] = NUL; + break; + } else if (STRCMP(file[i] + len, "@en") == 0) { + // Sorting on priority means the same item in another language may + // be anywhere. Search all items for a match up to the "@en". + int j; + for (j = 0; j < num_file; j++) { if (j != i && (int)STRLEN(file[j]) == len + 3 - && STRNCMP(file[i], file[j], len + 1) == 0) + && STRNCMP(file[i], file[j], len + 1) == 0) { break; - if (j == num_file) + } + } + if (j == num_file) { file[i][len] = NUL; + break; + } } } } diff --git a/src/nvim/version.c b/src/nvim/version.c index 685a2a843b..24c3d4eb5b 100644 --- a/src/nvim/version.c +++ b/src/nvim/version.c @@ -772,7 +772,7 @@ static int included_patches[] = { // 1674 NA 1673, // 1672 NA - // 1671, + 1671, // 1670, // 1669 NA // 1668 NA