components/vim/patches/vim-help.patch
changeset 379 c6a17bba1da3
child 7049 e8d705cba87d
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/vim/patches/vim-help.patch	Tue May 10 08:58:55 2011 -0700
@@ -0,0 +1,107 @@
+--- src/ex_cmds.c	Thu Apr 21 16:23:08 2011
++++ src/ex_cmds.c	Thu Apr 21 16:23:08 2011
[email protected]@ -5525,6 +5525,8 @@
+     int		len;
+     char_u	*lang;
+ #endif
++    int		nohelp = FALSE, nominhelp = FALSE;
++    char_u	*mhf = NULL;
+ 
+     if (eap != NULL)
+     {
[email protected]@ -5576,6 +5578,23 @@
+     n = find_help_tags(arg, &num_matches, &matches,
+ 						 eap != NULL && eap->forceit);
+ 
++    /*
++     * If we didn't find the help topic, check to see whether 'helpfile'
++     * (typically $VIMRUNTIME/doc/help.txt) exists.  If not, then we'll send the
++     * user to the minimized help file delivered with the core vim package which
++     * explains why there's no help and how to get it.
++     */
++    if (num_matches == 0 && mch_access((char *)p_hf, F_OK) < 0) {
++	nohelp = TRUE;
++	mhf = alloc(MAXPATHL);
++	STRNCPY(mhf, p_hf, MAXPATHL - 1);
++	mhf[STRLEN(mhf) - 8] = '\0';
++	STRNCAT(mhf, "help_minimized.txt", MAXPATHL - STRLEN(mhf) - 1);
++
++	if (mch_access((char *)mhf, F_OK) < 0)
++	    nominhelp = TRUE;
++    }
++
+     i = 0;
+ #ifdef FEAT_MULTI_LANG
+     if (n != FAIL && lang != NULL)
[email protected]@ -5588,7 +5607,7 @@
+ 		break;
+ 	}
+ #endif
+-    if (i >= num_matches || n == FAIL)
++    if (!nohelp && i >= num_matches || n == FAIL)
+     {
+ #ifdef FEAT_MULTI_LANG
+ 	if (lang != NULL)
[email protected]@ -5601,9 +5620,11 @@
+ 	return;
+     }
+ 
+-    /* The first match (in the requested language) is the best match. */
+-    tag = vim_strsave(matches[i]);
+-    FreeWild(num_matches, matches);
++    if (!nohelp) {
++	/* The first match (in the requested language) is the best match. */
++	tag = vim_strsave(matches[i]);
++	FreeWild(num_matches, matches);
++    }
+ 
+ #ifdef FEAT_GUI
+     need_mouse_correct = TRUE;
[email protected]@ -5635,12 +5656,14 @@
+ 	     * There is no help window yet.
+ 	     * Try to open the file specified by the "helpfile" option.
+ 	     */
+-	    if ((helpfd = mch_fopen((char *)p_hf, READBIN)) == NULL)
+-	    {
+-		smsg((char_u *)_("Sorry, help file \"%s\" not found"), p_hf);
+-		goto erret;
++	    if (!nohelp || nominhelp) {
++		if ((helpfd = mch_fopen((char *)p_hf, READBIN)) == NULL)
++		{
++		    smsg((char_u *)_("Sorry, help file \"%s\" not found"), p_hf);
++		    goto erret;
++		}
++		fclose(helpfd);
+ 	    }
+-	    fclose(helpfd);
+ 
+ #ifdef FEAT_WINDOWS
+ 	    /* Split off help window; put it at far top if no position
[email protected]@ -5671,7 +5694,7 @@
+ 	     * Set the alternate file to the previously edited file.
+ 	     */
+ 	    alt_fnum = curbuf->b_fnum;
+-	    (void)do_ecmd(0, NULL, NULL, NULL, ECMD_LASTL,
++	    (void)do_ecmd(0, mhf, NULL, NULL, ECMD_LASTL,
+ 			  ECMD_HIDE + ECMD_SET_HELP,
+ #ifdef FEAT_WINDOWS
+ 			  NULL  /* buffer is still open, don't store info */
[email protected]@ -5688,7 +5711,7 @@
+     if (!p_im)
+ 	restart_edit = 0;	    /* don't want insert mode in help file */
+ 
+-    if (tag != NULL)
++    if (!nohelp && tag != NULL)
+ 	do_tag(tag, DT_HELP, 1, FALSE, TRUE);
+ 
+     /* Delete the empty buffer if we're not using it.  Careful: autocommands
[email protected]@ -5706,7 +5729,8 @@
+ 	curwin->w_alt_fnum = alt_fnum;
+ 
+ erret:
+-    vim_free(tag);
++    if (!nohelp)
++	vim_free(tag);
+ }
+ 
+