]> granicus.if.org Git - vim/commitdiff
patch 8.0.0116 v8.0.0116
authorBram Moolenaar <Bram@vim.org>
Thu, 1 Dec 2016 20:32:32 +0000 (21:32 +0100)
committerBram Moolenaar <Bram@vim.org>
Thu, 1 Dec 2016 20:32:32 +0000 (21:32 +0100)
Problem:    When reading English help and using CTRl-] the language from
            'helplang' is used.
Solution:   Make help tag jumps keep the language. (Tatsuki, test by Hirohito
            Higashi, closes #1249)

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

index ecf949858dc1327cad4e0f6fbc1c50f14a8cd382..646cbcd62b6327f2bd384a504649744f12cb751d 100644 (file)
--- a/src/tag.c
+++ b/src/tag.c
@@ -742,7 +742,7 @@ do_tag(
                        /* skip backslash used for escaping a command char or
                         * a backslash */
                        if (*p == '\\' && (*(p + 1) == *tagp.command
-                                       || *(p + 1) == '\\'))
+                                       || *(p + 1) == '\\'))
                            ++p;
 
                        if (*p == TAB)
@@ -1356,6 +1356,7 @@ find_tags(
     char_u     *help_lang_find = NULL;         /* lang to be found */
     char_u     help_lang[3];                   /* lang of current tags file */
     char_u     *saved_pat = NULL;              /* copy of pat[] */
+    int                is_txt = FALSE;                 /* flag of file extension */
 #endif
 
     pat_T      orgpat;                 /* holds unconverted pattern info */
@@ -1388,7 +1389,7 @@ find_tags(
      */
     switch (curbuf->b_tc_flags ? curbuf->b_tc_flags : tc_flags)
     {
-       case TC_FOLLOWIC:                break;
+       case TC_FOLLOWIC:                break;
        case TC_IGNORE:    p_ic = TRUE;  break;
        case TC_MATCH:     p_ic = FALSE; break;
        case TC_FOLLOWSCS: p_ic = ignorecase(pat); break;
@@ -1476,6 +1477,15 @@ find_tags(
      * When the tag file is case-fold sorted, it is either one or the other.
      * Only ignore case when TAG_NOIC not used or 'ignorecase' set.
      */
+#ifdef FEAT_MULTI_LANG
+    /* Set a flag if the file extension is .txt */
+    if ((flags & TAG_KEEP_LANG)
+           && help_lang_find == NULL
+           && curbuf->b_fname != NULL
+           && (i = (int)STRLEN(curbuf->b_fname)) > 4
+           && STRICMP(curbuf->b_fname + i - 4, ".txt") == 0)
+       is_txt = TRUE;
+#endif
 #ifdef FEAT_TAG_BINS
     orgpat.regmatch.rm_ic = ((p_ic || !noic)
                                && (findall || orgpat.headlen == 0 || !p_tbs));
@@ -1509,14 +1519,19 @@ find_tags(
 #ifdef FEAT_MULTI_LANG
            if (curbuf->b_help)
            {
-               /* Prefer help tags according to 'helplang'.  Put the
-                * two-letter language name in help_lang[]. */
-               i = (int)STRLEN(tag_fname);
-               if (i > 3 && tag_fname[i - 3] == '-')
-                   STRCPY(help_lang, tag_fname + i - 2);
-               else
+               /* Keep en if the file extension is .txt*/
+               if (is_txt)
                    STRCPY(help_lang, "en");
-
+               else
+               {
+                   /* Prefer help tags according to 'helplang'.  Put the
+                    * two-letter language name in help_lang[]. */
+                   i = (int)STRLEN(tag_fname);
+                   if (i > 3 && tag_fname[i - 3] == '-')
+                       STRCPY(help_lang, tag_fname + i - 2);
+                   else
+                       STRCPY(help_lang, "en");
+               }
                /* When searching for a specific language skip tags files
                 * for other languages. */
                if (help_lang_find != NULL
index d11a1fafbd72202746d54fd78242ac0ce246cdc0..1d443894b306436b441eb0b0a284b87a071de60f 100644 (file)
@@ -141,4 +141,36 @@ func Test_help_complete()
   endtry
 endfunc
 
+func Test_help_respect_current_file_lang()
+  try
+    let list = []
+    call s:doc_config_setup()
+
+    if has('multi_lang')
+      function s:check_help_file_ext(help_keyword, ext)
+        exec 'help ' . a:help_keyword
+        call assert_equal(a:ext, expand('%:e'))
+        call feedkeys("\<C-]>", 'tx')
+        call assert_equal(a:ext, expand('%:e'))
+        pop
+        helpclose
+      endfunc
+
+      set rtp+=Xdir1/doc-ab
+      set rtp+=Xdir1/doc-ja
+
+      set helplang=ab
+      call s:check_help_file_ext('test-char', 'abx')
+      call s:check_help_file_ext('test-char@ja', 'jax')
+      set helplang=ab,ja
+      call s:check_help_file_ext('test-char@ja', 'jax')
+      call s:check_help_file_ext('test-char@en', 'txt')
+    endif
+  catch
+    call assert_exception('X')
+  finally
+    call s:doc_config_teardown()
+  endtry
+endfunc
+
 " vim: shiftwidth=2 sts=2 expandtab
index e0bbcb4fa62156283af5bafbb51328661e73566f..598a7eae4404de0008bcfdc0e3a524e206cbf875 100644 (file)
@@ -764,6 +764,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    116,
 /**/
     115,
 /**/