1
0
forked from aniani/vim

patch 7.4.1833

Problem:    Cannot use an Ex command for 'keywordprg'.
Solution:   Accept an Ex command. (Nelo-Thara Wallus)
This commit is contained in:
Bram Moolenaar
2016-05-24 10:46:45 +02:00
parent 06d2d38ab7
commit 2ff8b64679
3 changed files with 23 additions and 6 deletions

View File

@@ -4587,16 +4587,18 @@ A jump table for the options with a short description can be found at |Q_op|.
*'keywordprg'* *'kp'* *'keywordprg'* *'kp'*
'keywordprg' 'kp' string (default "man" or "man -s", DOS: ":help", 'keywordprg' 'kp' string (default "man" or "man -s", DOS: ":help",
OS/2: "view /", VMS: "help") VMS: "help")
global or local to buffer |global-local| global or local to buffer |global-local|
{not in Vi} {not in Vi}
Program to use for the |K| command. Environment variables are Program to use for the |K| command. Environment variables are
expanded |:set_env|. ":help" may be used to access the Vim internal expanded |:set_env|. ":help" may be used to access the Vim internal
help. (Note that previously setting the global option to the empty help. (Note that previously setting the global option to the empty
value did this, which is now deprecated.) value did this, which is now deprecated.)
When "man" is used, Vim will automatically translate a count for the When the first character is ":", the command is invoked as a Vim
"K" command to a section number. Also for "man -s", in which case the Ex command prefixed with [count].
"-s" is removed when there is no count. When "man", "man -s" or an Ex command is used, Vim will automatically
translate a count for the "K" command and pass it as the first
argument. For "man -s" the "-s" is removed when there is no count.
See |option-backslash| about including spaces and backslashes. See |option-backslash| about including spaces and backslashes.
Example: > Example: >
:set keywordprg=man\ -s :set keywordprg=man\ -s

View File

@@ -5485,10 +5485,12 @@ nv_ident(cmdarg_T *cap)
{ {
char_u *ptr = NULL; char_u *ptr = NULL;
char_u *buf; char_u *buf;
unsigned buflen;
char_u *newbuf; char_u *newbuf;
char_u *p; char_u *p;
char_u *kp; /* value of 'keywordprg' */ char_u *kp; /* value of 'keywordprg' */
int kp_help; /* 'keywordprg' is ":help" */ int kp_help; /* 'keywordprg' is ":he" */
int kp_ex; /* 'keywordprg' starts with ":" */
int n = 0; /* init for GCC */ int n = 0; /* init for GCC */
int cmdchar; int cmdchar;
int g_cmd; /* "g" command */ int g_cmd; /* "g" command */
@@ -5536,7 +5538,9 @@ nv_ident(cmdarg_T *cap)
kp = (*curbuf->b_p_kp == NUL ? p_kp : curbuf->b_p_kp); kp = (*curbuf->b_p_kp == NUL ? p_kp : curbuf->b_p_kp);
kp_help = (*kp == NUL || STRCMP(kp, ":he") == 0 kp_help = (*kp == NUL || STRCMP(kp, ":he") == 0
|| STRCMP(kp, ":help") == 0); || STRCMP(kp, ":help") == 0);
buf = alloc((unsigned)(n * 2 + 30 + STRLEN(kp))); kp_ex = (*kp == ':');
buflen = (unsigned)(n * 2 + 30 + STRLEN(kp));
buf = alloc(buflen);
if (buf == NULL) if (buf == NULL)
return; return;
buf[0] = NUL; buf[0] = NUL;
@@ -5562,6 +5566,15 @@ nv_ident(cmdarg_T *cap)
case 'K': case 'K':
if (kp_help) if (kp_help)
STRCPY(buf, "he! "); STRCPY(buf, "he! ");
else if (kp_ex)
{
if (cap->count0 != 0)
vim_snprintf((char *)buf, buflen, "%s %ld",
kp, cap->count0);
else
STRCPY(buf, kp);
STRCAT(buf, " ");
}
else else
{ {
/* An external command will probably use an argument starting /* An external command will probably use an argument starting

View File

@@ -753,6 +753,8 @@ static char *(features[]) =
static int included_patches[] = static int included_patches[] =
{ /* Add new patch number below this line */ { /* Add new patch number below this line */
/**/
1833,
/**/ /**/
1832, 1832,
/**/ /**/