aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJames McCoy <jamessan@jamessan.com>2016-09-27 11:55:05 -0400
committerJames McCoy <jamessan@jamessan.com>2016-09-27 11:55:05 -0400
commit45d5b78aecd4138b9207a49cd0fc5c36310ae8c5 (patch)
tree8a4a23ccf3f84e2216463bc1086ee89f9925bc40
parent36ffb6a7d82ef33e05c4c1aaf846aac92a27df98 (diff)
parentb6f8c35cf7d88b0fb23e12f51f1d032f030ec845 (diff)
downloadrneovim-45d5b78aecd4138b9207a49cd0fc5c36310ae8c5.tar.gz
rneovim-45d5b78aecd4138b9207a49cd0fc5c36310ae8c5.tar.bz2
rneovim-45d5b78aecd4138b9207a49cd0fc5c36310ae8c5.zip
Merge pull request #5357 from jbradaric/vim-7.4.1671
vim-patch:7.4.{1671,1818,1820,1821}
-rw-r--r--src/nvim/ex_getln.c62
-rw-r--r--src/nvim/testdir/test_help_tagjump.vim115
-rw-r--r--src/nvim/version.c8
3 files changed, 163 insertions, 22 deletions
diff --git a/src/nvim/ex_getln.c b/src/nvim/ex_getln.c
index 1a97dc3d6f..4c997844ea 100644
--- a/src/nvim/ex_getln.c
+++ b/src/nvim/ex_getln.c
@@ -2548,10 +2548,9 @@ static void cmdline_del(int from)
ccline.cmdpos = from;
}
-/*
- * this function is called when the screen size changes and with incremental
- * search
- */
+// This function is called when the screen size changes and with incremental
+// search and in other situations where the command line may have been
+// overwritten.
void redrawcmdline(void)
{
if (cmd_silent)
@@ -3669,27 +3668,54 @@ 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;
+
+ if (p_hlg[0] != NUL && (p_hlg[0] != 'e' || p_hlg[1] != 'n')) {
+ *p++ = '@';
+ *p++ = p_hlg[0];
+ *p++ = p_hlg[1];
+ }
+ *p = NUL;
- 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)
+ for (int i = 0; i < num_file; i++) {
+ int len = (int)STRLEN(file[i]) - 3;
+ if (len <= 0) {
+ continue;
+ }
+ 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) {
+ // item only exists with @en, remove it
+ file[i][len] = NUL;
+ }
+ }
+ }
+
+ if (*buf != NUL) {
+ for (int i = 0; i < num_file; i++) {
+ int len = (int)STRLEN(file[i]) - 3;
+ if (len <= 0) {
+ continue;
+ }
+ if (STRCMP(file[i] + len, buf) == 0) {
+ // remove the default language
file[i][len] = NUL;
+ }
}
}
}
diff --git a/src/nvim/testdir/test_help_tagjump.vim b/src/nvim/testdir/test_help_tagjump.vim
index 42f8391aba..cc1c81c7f6 100644
--- a/src/nvim/testdir/test_help_tagjump.vim
+++ b/src/nvim/testdir/test_help_tagjump.vim
@@ -48,3 +48,118 @@ func Test_help_tagjump()
call assert_true(getline('.') =~ '\*{address}\*')
helpclose
endfunc
+
+let s:langs = ['en', 'ab', 'ja']
+
+func s:doc_config_setup()
+ let s:helpfile_save = &helpfile
+ let &helpfile="Xdir1/doc-en/doc/testdoc.txt"
+ let s:rtp_save = &rtp
+ let &rtp="Xdir1/doc-en"
+ if has('multi_lang')
+ let s:helplang_save=&helplang
+ endif
+
+ call delete('Xdir1', 'rf')
+
+ for lang in s:langs
+ if lang ==# 'en'
+ let tagfname = 'tags'
+ let docfname = 'testdoc.txt'
+ else
+ let tagfname = 'tags-' . lang
+ let docfname = 'testdoc.' . lang . 'x'
+ endif
+ let docdir = "Xdir1/doc-" . lang . "/doc"
+ call mkdir(docdir, "p")
+ call writefile(["\t*test-char*", "\t*test-col*"], docdir . '/' . docfname)
+ call writefile(["test-char\t" . docfname . "\t/*test-char*",
+ \ "test-col\t" . docfname . "\t/*test-col*"],
+ \ docdir . '/' . tagfname)
+ endfor
+endfunc
+
+func s:doc_config_teardown()
+ call delete('Xdir1', 'rf')
+
+ let &helpfile = s:helpfile_save
+ let &rtp = s:rtp_save
+ if has('multi_lang')
+ let &helplang = s:helplang_save
+ endif
+endfunc
+
+func s:get_cmd_compl_list(cmd)
+ let list = []
+ let str = ''
+ for cnt in range(1, 999)
+ call feedkeys(a:cmd . repeat("\<Tab>", cnt) . "'\<C-B>let str='\<CR>", 'tx')
+ if str ==# a:cmd[1:]
+ break
+ endif
+ call add(list, str)
+ endfor
+ return list
+endfunc
+
+func Test_help_complete()
+ try
+ let list = []
+ call s:doc_config_setup()
+
+ " 'helplang=' and help file lang is 'en'
+ if has('multi_lang')
+ set helplang=
+ endif
+ let list = s:get_cmd_compl_list(":h test")
+ call assert_equal(['h test-col', 'h test-char'], list)
+
+ if has('multi_lang')
+ " 'helplang=ab' and help file lang is 'en'
+ set helplang=ab
+ let list = s:get_cmd_compl_list(":h test")
+ call assert_equal(['h test-col', 'h test-char'], list)
+
+ " 'helplang=' and help file lang is 'en' and 'ab'
+ set rtp+=Xdir1/doc-ab
+ set helplang=
+ let list = s:get_cmd_compl_list(":h test")
+ call assert_equal(sort(['h test-col@en', 'h test-col@ab',
+ \ 'h test-char@en', 'h test-char@ab']), sort(list))
+
+ " 'helplang=ab' and help file lang is 'en' and 'ab'
+ set helplang=ab
+ let list = s:get_cmd_compl_list(":h test")
+ call assert_equal(sort(['h test-col', 'h test-col@en',
+ \ 'h test-char', 'h test-char@en']), sort(list))
+
+ " 'helplang=' and help file lang is 'en', 'ab' and 'ja'
+ set rtp+=Xdir1/doc-ja
+ set helplang=
+ let list = s:get_cmd_compl_list(":h test")
+ call assert_equal(sort(['h test-col@en', 'h test-col@ab',
+ \ 'h test-col@ja', 'h test-char@en',
+ \ 'h test-char@ab', 'h test-char@ja']), sort(list))
+
+ " 'helplang=ab' and help file lang is 'en', 'ab' and 'ja'
+ set helplang=ab
+ let list = s:get_cmd_compl_list(":h test")
+ call assert_equal(sort(['h test-col', 'h test-col@en',
+ \ 'h test-col@ja', 'h test-char',
+ \ 'h test-char@en', 'h test-char@ja']), sort(list))
+
+ " 'helplang=ab,ja' and help file lang is 'en', 'ab' and 'ja'
+ set helplang=ab,ja
+ let list = s:get_cmd_compl_list(":h test")
+ call assert_equal(sort(['h test-col', 'h test-col@ja',
+ \ 'h test-col@en', 'h test-char',
+ \ 'h test-char@ja', 'h test-char@en']), sort(list))
+ endif
+ catch
+ call assert_exception('X')
+ finally
+ call s:doc_config_teardown()
+ endtry
+endfunc
+
+" vim: et sw=2:
diff --git a/src/nvim/version.c b/src/nvim/version.c
index bc446fcedb..3f11c7e860 100644
--- a/src/nvim/version.c
+++ b/src/nvim/version.c
@@ -620,10 +620,10 @@ static int included_patches[] = {
// 1824 NA
// 1823,
// 1822 NA
- // 1821,
- // 1820,
+ 1821,
+ 1820,
// 1819 NA
- // 1818,
+ 1818,
// 1817 NA
// 1816,
// 1815,
@@ -772,7 +772,7 @@ static int included_patches[] = {
// 1674 NA
1673,
// 1672 NA
- // 1671,
+ 1671,
1670,
// 1669 NA
// 1668 NA