]> git.ipfire.org Git - thirdparty/vim.git/commitdiff
patch 7.4.1820 v7.4.1820
authorBram Moolenaar <Bram@vim.org>
Sat, 7 May 2016 16:36:48 +0000 (18:36 +0200)
committerBram Moolenaar <Bram@vim.org>
Sat, 7 May 2016 16:36:48 +0000 (18:36 +0200)
Problem:    Removing language from help tags too often.
Solution:   Only remove @en when not needed. (Hirohito Higashi)

src/ex_getln.c
src/testdir/test_help_tagjump.vim
src/version.c

index 26fed59724e234eb0a0216da0a12c2d9332a97ee..ed9707a26253eb8d66bb784856cf6d3c8df3ec69 100644 (file)
@@ -4519,25 +4519,32 @@ cleanup_help_tags(int num_file, char_u **file)
        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;
-       }
-       else if (STRCMP(file[i] + len, "@en") == 0)
+       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". */
            for (j = 0; j < num_file; ++j)
-               if (j != i
-                       && (int)STRLEN(file[j]) == len + 3
-                       && STRNCMP(file[i], file[j], len + 1) == 0)
+               if (j != i && (int)STRLEN(file[j]) == len + 3
+                          && STRNCMP(file[i], file[j], len + 1) == 0)
                    break;
            if (j == num_file)
                /* item only exists with @en, remove it */
                file[i][len] = NUL;
        }
     }
+
+    if (*buf != NUL)
+       for (i = 0; i < num_file; ++i)
+       {
+           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;
+           }
+       }
 }
 #endif
 
index f486583bc8c938bdd9c883af6a2ca927261e9d16..c3249d8fe9de90e4d9684171ead251ee0ae1c91c 100644 (file)
@@ -26,3 +26,118 @@ func Test_help_tagjump()
   call assert_true(getline('.') =~ '\*arglistid()\*')
   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(['h test-col@en', 'h test-col@ab',
+            \             'h test-char@en', 'h test-char@ab'], 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(['h test-col', 'h test-col@en',
+            \             'h test-char', 'h test-char@en'], 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(['h test-col@en', 'h test-col@ab',
+            \             'h test-col@ja', 'h test-char@en',
+            \             'h test-char@ab', 'h test-char@ja'], 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(['h test-col', 'h test-col@en',
+            \             'h test-col@ja', 'h test-char',
+            \             'h test-char@en', 'h test-char@ja'], 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(['h test-col', 'h test-col@ja',
+            \             'h test-col@en', 'h test-char',
+            \             'h test-char@ja', 'h test-char@en'], list)
+    endif
+  catch
+    call assert_exception('X')
+  finally
+    call s:doc_config_teardown()
+  endtry
+endfunc
+
+" vim: et sw=2:
index 0191775dbf7801445194606f5c36d6272e291ecb..4dafb844292d71e70048331d6202e169cd28a7cd 100644 (file)
@@ -753,6 +753,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    1820,
 /**/
     1819,
 /**/