mirror of
https://github.com/vim/vim.git
synced 2025-09-24 03:44:06 -04:00
patch 9.0.0568: autocmd code is indented more than needed
Problem: Autocmd code is indented more than needed. Solution: Break out sooner. (Yegappan Lakshmanan, closes #11208) Also in user function code.
This commit is contained in:
committed by
Bram Moolenaar
parent
87af60c915
commit
e9dcf13a30
257
src/autocmd.c
257
src/autocmd.c
@@ -320,26 +320,26 @@ show_autocmd(AutoPat *ap, event_T event)
|
|||||||
|
|
||||||
for (ac = ap->cmds; ac != NULL; ac = ac->next)
|
for (ac = ap->cmds; ac != NULL; ac = ac->next)
|
||||||
{
|
{
|
||||||
if (ac->cmd != NULL) // skip removed commands
|
if (ac->cmd == NULL) // skip removed commands
|
||||||
{
|
continue;
|
||||||
if (msg_col >= 14)
|
|
||||||
msg_putchar('\n');
|
if (msg_col >= 14)
|
||||||
msg_col = 14;
|
msg_putchar('\n');
|
||||||
if (got_int)
|
msg_col = 14;
|
||||||
return;
|
if (got_int)
|
||||||
msg_outtrans(ac->cmd);
|
return;
|
||||||
|
msg_outtrans(ac->cmd);
|
||||||
#ifdef FEAT_EVAL
|
#ifdef FEAT_EVAL
|
||||||
if (p_verbose > 0)
|
if (p_verbose > 0)
|
||||||
last_set_msg(ac->script_ctx);
|
last_set_msg(ac->script_ctx);
|
||||||
#endif
|
#endif
|
||||||
|
if (got_int)
|
||||||
|
return;
|
||||||
|
if (ac->next != NULL)
|
||||||
|
{
|
||||||
|
msg_putchar('\n');
|
||||||
if (got_int)
|
if (got_int)
|
||||||
return;
|
return;
|
||||||
if (ac->next != NULL)
|
|
||||||
{
|
|
||||||
msg_putchar('\n');
|
|
||||||
if (got_int)
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -492,21 +492,21 @@ au_new_group(char_u *name)
|
|||||||
int i;
|
int i;
|
||||||
|
|
||||||
i = au_find_group(name);
|
i = au_find_group(name);
|
||||||
if (i == AUGROUP_ERROR) // the group doesn't exist yet, add it
|
if (i != AUGROUP_ERROR)
|
||||||
{
|
return i;
|
||||||
// First try using a free entry.
|
|
||||||
for (i = 0; i < augroups.ga_len; ++i)
|
|
||||||
if (AUGROUP_NAME(i) == NULL)
|
|
||||||
break;
|
|
||||||
if (i == augroups.ga_len && ga_grow(&augroups, 1) == FAIL)
|
|
||||||
return AUGROUP_ERROR;
|
|
||||||
|
|
||||||
AUGROUP_NAME(i) = vim_strsave(name);
|
// the group doesn't exist yet, add it. First try using a free entry.
|
||||||
|
for (i = 0; i < augroups.ga_len; ++i)
|
||||||
if (AUGROUP_NAME(i) == NULL)
|
if (AUGROUP_NAME(i) == NULL)
|
||||||
return AUGROUP_ERROR;
|
break;
|
||||||
if (i == augroups.ga_len)
|
if (i == augroups.ga_len && ga_grow(&augroups, 1) == FAIL)
|
||||||
++augroups.ga_len;
|
return AUGROUP_ERROR;
|
||||||
}
|
|
||||||
|
AUGROUP_NAME(i) = vim_strsave(name);
|
||||||
|
if (AUGROUP_NAME(i) == NULL)
|
||||||
|
return AUGROUP_ERROR;
|
||||||
|
if (i == augroups.ga_len)
|
||||||
|
++augroups.ga_len;
|
||||||
|
|
||||||
return i;
|
return i;
|
||||||
}
|
}
|
||||||
@@ -514,37 +514,41 @@ au_new_group(char_u *name)
|
|||||||
static void
|
static void
|
||||||
au_del_group(char_u *name)
|
au_del_group(char_u *name)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
event_T event;
|
||||||
|
AutoPat *ap;
|
||||||
|
int in_use = FALSE;
|
||||||
|
|
||||||
|
|
||||||
i = au_find_group(name);
|
i = au_find_group(name);
|
||||||
if (i == AUGROUP_ERROR) // the group doesn't exist
|
if (i == AUGROUP_ERROR) // the group doesn't exist
|
||||||
semsg(_(e_no_such_group_str), name);
|
|
||||||
else if (i == current_augroup)
|
|
||||||
emsg(_(e_cannot_delete_current_group));
|
|
||||||
else
|
|
||||||
{
|
{
|
||||||
event_T event;
|
semsg(_(e_no_such_group_str), name);
|
||||||
AutoPat *ap;
|
return;
|
||||||
int in_use = FALSE;
|
|
||||||
|
|
||||||
for (event = (event_T)0; (int)event < NUM_EVENTS;
|
|
||||||
event = (event_T)((int)event + 1))
|
|
||||||
{
|
|
||||||
FOR_ALL_AUTOCMD_PATTERNS(event, ap)
|
|
||||||
if (ap->group == i && ap->pat != NULL)
|
|
||||||
{
|
|
||||||
give_warning((char_u *)_("W19: Deleting augroup that is still in use"), TRUE);
|
|
||||||
in_use = TRUE;
|
|
||||||
event = NUM_EVENTS;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
vim_free(AUGROUP_NAME(i));
|
|
||||||
if (in_use)
|
|
||||||
AUGROUP_NAME(i) = get_deleted_augroup();
|
|
||||||
else
|
|
||||||
AUGROUP_NAME(i) = NULL;
|
|
||||||
}
|
}
|
||||||
|
if (i == current_augroup)
|
||||||
|
{
|
||||||
|
emsg(_(e_cannot_delete_current_group));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (event = (event_T)0; (int)event < NUM_EVENTS;
|
||||||
|
event = (event_T)((int)event + 1))
|
||||||
|
{
|
||||||
|
FOR_ALL_AUTOCMD_PATTERNS(event, ap)
|
||||||
|
if (ap->group == i && ap->pat != NULL)
|
||||||
|
{
|
||||||
|
give_warning((char_u *)_("W19: Deleting augroup that is still in use"), TRUE);
|
||||||
|
in_use = TRUE;
|
||||||
|
event = NUM_EVENTS;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
vim_free(AUGROUP_NAME(i));
|
||||||
|
if (in_use)
|
||||||
|
AUGROUP_NAME(i) = get_deleted_augroup();
|
||||||
|
else
|
||||||
|
AUGROUP_NAME(i) = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -768,20 +772,23 @@ au_event_disable(char *what)
|
|||||||
char_u *save_ei;
|
char_u *save_ei;
|
||||||
|
|
||||||
save_ei = vim_strsave(p_ei);
|
save_ei = vim_strsave(p_ei);
|
||||||
if (save_ei != NULL)
|
if (save_ei == NULL)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
new_ei = vim_strnsave(p_ei, STRLEN(p_ei) + STRLEN(what));
|
||||||
|
if (new_ei == NULL)
|
||||||
{
|
{
|
||||||
new_ei = vim_strnsave(p_ei, STRLEN(p_ei) + STRLEN(what));
|
vim_free(save_ei);
|
||||||
if (new_ei != NULL)
|
return NULL;
|
||||||
{
|
|
||||||
if (*what == ',' && *p_ei == NUL)
|
|
||||||
STRCPY(new_ei, what + 1);
|
|
||||||
else
|
|
||||||
STRCAT(new_ei, what);
|
|
||||||
set_string_option_direct((char_u *)"ei", -1, new_ei,
|
|
||||||
OPT_FREE, SID_NONE);
|
|
||||||
vim_free(new_ei);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (*what == ',' && *p_ei == NUL)
|
||||||
|
STRCPY(new_ei, what + 1);
|
||||||
|
else
|
||||||
|
STRCAT(new_ei, what);
|
||||||
|
set_string_option_direct((char_u *)"ei", -1, new_ei,
|
||||||
|
OPT_FREE, SID_NONE);
|
||||||
|
vim_free(new_ei);
|
||||||
return save_ei;
|
return save_ei;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -908,48 +915,48 @@ do_autocmd(exarg_T *eap, char_u *arg_in, int forceit)
|
|||||||
cmd = skipwhite(cmd);
|
cmd = skipwhite(cmd);
|
||||||
for (i = 0; i < 2; i++)
|
for (i = 0; i < 2; i++)
|
||||||
{
|
{
|
||||||
if (*cmd != NUL)
|
if (*cmd == NUL)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
// Check for "++once" flag.
|
||||||
|
if (STRNCMP(cmd, "++once", 6) == 0 && VIM_ISWHITE(cmd[6]))
|
||||||
{
|
{
|
||||||
// Check for "++once" flag.
|
if (once)
|
||||||
if (STRNCMP(cmd, "++once", 6) == 0 && VIM_ISWHITE(cmd[6]))
|
semsg(_(e_duplicate_argument_str), "++once");
|
||||||
{
|
once = TRUE;
|
||||||
if (once)
|
cmd = skipwhite(cmd + 6);
|
||||||
semsg(_(e_duplicate_argument_str), "++once");
|
}
|
||||||
once = TRUE;
|
|
||||||
cmd = skipwhite(cmd + 6);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Check for "++nested" flag.
|
// Check for "++nested" flag.
|
||||||
if ((STRNCMP(cmd, "++nested", 8) == 0 && VIM_ISWHITE(cmd[8])))
|
if ((STRNCMP(cmd, "++nested", 8) == 0 && VIM_ISWHITE(cmd[8])))
|
||||||
|
{
|
||||||
|
if (nested)
|
||||||
{
|
{
|
||||||
if (nested)
|
semsg(_(e_duplicate_argument_str), "++nested");
|
||||||
{
|
return;
|
||||||
semsg(_(e_duplicate_argument_str), "++nested");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
nested = TRUE;
|
|
||||||
cmd = skipwhite(cmd + 8);
|
|
||||||
}
|
}
|
||||||
|
nested = TRUE;
|
||||||
|
cmd = skipwhite(cmd + 8);
|
||||||
|
}
|
||||||
|
|
||||||
// Check for the old "nested" flag in legacy script.
|
// Check for the old "nested" flag in legacy script.
|
||||||
if (STRNCMP(cmd, "nested", 6) == 0 && VIM_ISWHITE(cmd[6]))
|
if (STRNCMP(cmd, "nested", 6) == 0 && VIM_ISWHITE(cmd[6]))
|
||||||
|
{
|
||||||
|
if (in_vim9script())
|
||||||
{
|
{
|
||||||
if (in_vim9script())
|
// If there ever is a :nested command this error should
|
||||||
{
|
// be removed and "nested" accepted as the start of the
|
||||||
// If there ever is a :nested command this error should
|
// command.
|
||||||
// be removed and "nested" accepted as the start of the
|
emsg(_(e_invalid_command_nested_did_you_mean_plusplus_nested));
|
||||||
// command.
|
return;
|
||||||
emsg(_(e_invalid_command_nested_did_you_mean_plusplus_nested));
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (nested)
|
|
||||||
{
|
|
||||||
semsg(_(e_duplicate_argument_str), "nested");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
nested = TRUE;
|
|
||||||
cmd = skipwhite(cmd + 6);
|
|
||||||
}
|
}
|
||||||
|
if (nested)
|
||||||
|
{
|
||||||
|
semsg(_(e_duplicate_argument_str), "nested");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
nested = TRUE;
|
||||||
|
cmd = skipwhite(cmd + 6);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1407,30 +1414,30 @@ ex_doautoall(exarg_T *eap)
|
|||||||
FOR_ALL_BUFFERS(buf)
|
FOR_ALL_BUFFERS(buf)
|
||||||
{
|
{
|
||||||
// Only do loaded buffers and skip the current buffer, it's done last.
|
// Only do loaded buffers and skip the current buffer, it's done last.
|
||||||
if (buf->b_ml.ml_mfp != NULL && buf != curbuf)
|
if (buf->b_ml.ml_mfp == NULL || buf == curbuf)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
// find a window for this buffer and save some values
|
||||||
|
aucmd_prepbuf(&aco, buf);
|
||||||
|
set_bufref(&bufref, buf);
|
||||||
|
|
||||||
|
// execute the autocommands for this buffer
|
||||||
|
retval = do_doautocmd(arg, FALSE, &did_aucmd);
|
||||||
|
|
||||||
|
if (call_do_modelines && did_aucmd)
|
||||||
|
// Execute the modeline settings, but don't set window-local
|
||||||
|
// options if we are using the current window for another
|
||||||
|
// buffer.
|
||||||
|
do_modelines(curwin == aucmd_win ? OPT_NOWIN : 0);
|
||||||
|
|
||||||
|
// restore the current window
|
||||||
|
aucmd_restbuf(&aco);
|
||||||
|
|
||||||
|
// stop if there is some error or buffer was deleted
|
||||||
|
if (retval == FAIL || !bufref_valid(&bufref))
|
||||||
{
|
{
|
||||||
// find a window for this buffer and save some values
|
retval = FAIL;
|
||||||
aucmd_prepbuf(&aco, buf);
|
break;
|
||||||
set_bufref(&bufref, buf);
|
|
||||||
|
|
||||||
// execute the autocommands for this buffer
|
|
||||||
retval = do_doautocmd(arg, FALSE, &did_aucmd);
|
|
||||||
|
|
||||||
if (call_do_modelines && did_aucmd)
|
|
||||||
// Execute the modeline settings, but don't set window-local
|
|
||||||
// options if we are using the current window for another
|
|
||||||
// buffer.
|
|
||||||
do_modelines(curwin == aucmd_win ? OPT_NOWIN : 0);
|
|
||||||
|
|
||||||
// restore the current window
|
|
||||||
aucmd_restbuf(&aco);
|
|
||||||
|
|
||||||
// stop if there is some error or buffer was deleted
|
|
||||||
if (retval == FAIL || !bufref_valid(&bufref))
|
|
||||||
{
|
|
||||||
retval = FAIL;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -1881,7 +1881,7 @@ eval_fname_sid(char_u *p)
|
|||||||
* In a script change <SID>name() and s:name() to K_SNR 123_name().
|
* In a script change <SID>name() and s:name() to K_SNR 123_name().
|
||||||
* Change <SNR>123_name() to K_SNR 123_name().
|
* Change <SNR>123_name() to K_SNR 123_name().
|
||||||
* Use "fname_buf[FLEN_FIXED + 1]" when it fits, otherwise allocate memory
|
* Use "fname_buf[FLEN_FIXED + 1]" when it fits, otherwise allocate memory
|
||||||
* (slow).
|
* and set "tofree".
|
||||||
*/
|
*/
|
||||||
char_u *
|
char_u *
|
||||||
fname_trans_sid(char_u *name, char_u *fname_buf, char_u **tofree, int *error)
|
fname_trans_sid(char_u *name, char_u *fname_buf, char_u **tofree, int *error)
|
||||||
@@ -1891,43 +1891,41 @@ fname_trans_sid(char_u *name, char_u *fname_buf, char_u **tofree, int *error)
|
|||||||
int i;
|
int i;
|
||||||
|
|
||||||
llen = eval_fname_script(name);
|
llen = eval_fname_script(name);
|
||||||
if (llen > 0)
|
if (llen == 0)
|
||||||
|
return name; // no prefix
|
||||||
|
|
||||||
|
fname_buf[0] = K_SPECIAL;
|
||||||
|
fname_buf[1] = KS_EXTRA;
|
||||||
|
fname_buf[2] = (int)KE_SNR;
|
||||||
|
i = 3;
|
||||||
|
if (eval_fname_sid(name)) // "<SID>" or "s:"
|
||||||
{
|
{
|
||||||
fname_buf[0] = K_SPECIAL;
|
if (current_sctx.sc_sid <= 0)
|
||||||
fname_buf[1] = KS_EXTRA;
|
*error = FCERR_SCRIPT;
|
||||||
fname_buf[2] = (int)KE_SNR;
|
|
||||||
i = 3;
|
|
||||||
if (eval_fname_sid(name)) // "<SID>" or "s:"
|
|
||||||
{
|
|
||||||
if (current_sctx.sc_sid <= 0)
|
|
||||||
*error = FCERR_SCRIPT;
|
|
||||||
else
|
|
||||||
{
|
|
||||||
sprintf((char *)fname_buf + 3, "%ld_",
|
|
||||||
(long)current_sctx.sc_sid);
|
|
||||||
i = (int)STRLEN(fname_buf);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (i + STRLEN(name + llen) < FLEN_FIXED)
|
|
||||||
{
|
|
||||||
STRCPY(fname_buf + i, name + llen);
|
|
||||||
fname = fname_buf;
|
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
fname = alloc(i + STRLEN(name + llen) + 1);
|
sprintf((char *)fname_buf + 3, "%ld_",
|
||||||
if (fname == NULL)
|
(long)current_sctx.sc_sid);
|
||||||
*error = FCERR_OTHER;
|
i = (int)STRLEN(fname_buf);
|
||||||
else
|
|
||||||
{
|
|
||||||
*tofree = fname;
|
|
||||||
mch_memmove(fname, fname_buf, (size_t)i);
|
|
||||||
STRCPY(fname + i, name + llen);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (i + STRLEN(name + llen) < FLEN_FIXED)
|
||||||
|
{
|
||||||
|
STRCPY(fname_buf + i, name + llen);
|
||||||
|
fname = fname_buf;
|
||||||
|
}
|
||||||
else
|
else
|
||||||
fname = name;
|
{
|
||||||
|
fname = alloc(i + STRLEN(name + llen) + 1);
|
||||||
|
if (fname == NULL)
|
||||||
|
*error = FCERR_OTHER;
|
||||||
|
else
|
||||||
|
{
|
||||||
|
*tofree = fname;
|
||||||
|
mch_memmove(fname, fname_buf, (size_t)i);
|
||||||
|
STRCPY(fname + i, name + llen);
|
||||||
|
}
|
||||||
|
}
|
||||||
return fname;
|
return fname;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -699,6 +699,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 */
|
||||||
|
/**/
|
||||||
|
568,
|
||||||
/**/
|
/**/
|
||||||
567,
|
567,
|
||||||
/**/
|
/**/
|
||||||
|
Reference in New Issue
Block a user