mirror of
https://github.com/vim/vim
synced 2025-04-02 07:56:44 +02:00
patch 8.0.1564: too many #ifdefs
Problem: Too many #ifdefs. Solution: Graduate the +autocmd feature. Takes away 450 #ifdefs and increases code size of tiny Vim by only 40 Kbyte.
This commit is contained in:
parent
3f54fd319f
commit
f2bd8ef2b4
48 changed files with 326 additions and 1157 deletions
src
buffer.cdiff.cedit.ceval.cevalfunc.cex_cmds.cex_cmds2.cex_docmd.cex_getln.cfeature.hfileio.cgetchar.cglobals.hgui.cgui_mac.cif_cscope.cif_xcmdsrv.cmain.cmbyte.cmemline.cmenu.cmisc1.cmisc2.cmove.cnetbeans.cnormal.cops.coption.coption.hos_amiga.cos_mswin.cos_unix.cos_win32.cquickfix.cscreen.csearch.cspell.cstructs.hsyntax.ctag.cterm.cterminal.cui.cundo.cuserfunc.cversion.cvim.hwindow.c
224
src/buffer.c
224
src/buffer.c
|
@ -63,9 +63,7 @@ static void insert_sign(buf_T *buf, signlist_T *prev, signlist_T *next, int id,
|
|||
static char *msg_loclist = N_("[Location List]");
|
||||
static char *msg_qflist = N_("[Quickfix List]");
|
||||
#endif
|
||||
#ifdef FEAT_AUTOCMD
|
||||
static char *e_auabort = N_("E855: Autocommands caused command to abort");
|
||||
#endif
|
||||
|
||||
/* Number of times free_buffer() was called. */
|
||||
static int buf_free_count = 0;
|
||||
|
@ -116,17 +114,15 @@ read_buffer(
|
|||
else if (retval == OK)
|
||||
unchanged(curbuf, FALSE);
|
||||
|
||||
#ifdef FEAT_AUTOCMD
|
||||
if (retval == OK)
|
||||
{
|
||||
# ifdef FEAT_EVAL
|
||||
#ifdef FEAT_EVAL
|
||||
apply_autocmds_retval(EVENT_STDINREADPOST, NULL, NULL, FALSE,
|
||||
curbuf, &retval);
|
||||
# else
|
||||
curbuf, &retval);
|
||||
#else
|
||||
apply_autocmds(EVENT_STDINREADPOST, NULL, NULL, FALSE, curbuf);
|
||||
# endif
|
||||
}
|
||||
#endif
|
||||
}
|
||||
}
|
||||
return retval;
|
||||
}
|
||||
|
@ -143,9 +139,7 @@ open_buffer(
|
|||
int flags) /* extra flags for readfile() */
|
||||
{
|
||||
int retval = OK;
|
||||
#ifdef FEAT_AUTOCMD
|
||||
bufref_T old_curbuf;
|
||||
#endif
|
||||
#ifdef FEAT_SYN_HL
|
||||
long old_tw = curbuf->b_p_tw;
|
||||
#endif
|
||||
|
@ -188,12 +182,10 @@ open_buffer(
|
|||
return FAIL;
|
||||
}
|
||||
|
||||
#ifdef FEAT_AUTOCMD
|
||||
/* The autocommands in readfile() may change the buffer, but only AFTER
|
||||
* reading the file. */
|
||||
set_bufref(&old_curbuf, curbuf);
|
||||
modified_was_set = FALSE;
|
||||
#endif
|
||||
|
||||
/* mark cursor position as being invalid */
|
||||
curwin->w_valid = 0;
|
||||
|
@ -289,11 +281,9 @@ open_buffer(
|
|||
* the changed flag. Unless in readonly mode: "ls | gview -".
|
||||
* When interrupted and 'cpoptions' contains 'i' set changed flag. */
|
||||
if ((got_int && vim_strchr(p_cpo, CPO_INTMOD) != NULL)
|
||||
#ifdef FEAT_AUTOCMD
|
||||
|| modified_was_set /* ":set modified" used in autocmd */
|
||||
# ifdef FEAT_EVAL
|
||||
#ifdef FEAT_EVAL
|
||||
|| (aborting() && vim_strchr(p_cpo, CPO_INTMOD) != NULL)
|
||||
# endif
|
||||
#endif
|
||||
)
|
||||
changed();
|
||||
|
@ -315,25 +305,22 @@ open_buffer(
|
|||
foldUpdateAll(curwin);
|
||||
#endif
|
||||
|
||||
#ifdef FEAT_AUTOCMD
|
||||
/* need to set w_topline, unless some autocommand already did that. */
|
||||
if (!(curwin->w_valid & VALID_TOPLINE))
|
||||
{
|
||||
curwin->w_topline = 1;
|
||||
# ifdef FEAT_DIFF
|
||||
#ifdef FEAT_DIFF
|
||||
curwin->w_topfill = 0;
|
||||
# endif
|
||||
#endif
|
||||
}
|
||||
# ifdef FEAT_EVAL
|
||||
#ifdef FEAT_EVAL
|
||||
apply_autocmds_retval(EVENT_BUFENTER, NULL, NULL, FALSE, curbuf, &retval);
|
||||
# else
|
||||
#else
|
||||
apply_autocmds(EVENT_BUFENTER, NULL, NULL, FALSE, curbuf);
|
||||
# endif
|
||||
#endif
|
||||
|
||||
if (retval == OK)
|
||||
{
|
||||
#ifdef FEAT_AUTOCMD
|
||||
/*
|
||||
* The autocommands may have changed the current buffer. Apply the
|
||||
* modelines to the correct buffer, if it still exists and is loaded.
|
||||
|
@ -344,22 +331,19 @@ open_buffer(
|
|||
|
||||
/* Go to the buffer that was opened. */
|
||||
aucmd_prepbuf(&aco, old_curbuf.br_buf);
|
||||
#endif
|
||||
do_modelines(0);
|
||||
curbuf->b_flags &= ~(BF_CHECK_RO | BF_NEVERLOADED);
|
||||
|
||||
#ifdef FEAT_AUTOCMD
|
||||
# ifdef FEAT_EVAL
|
||||
#ifdef FEAT_EVAL
|
||||
apply_autocmds_retval(EVENT_BUFWINENTER, NULL, NULL, FALSE, curbuf,
|
||||
&retval);
|
||||
# else
|
||||
&retval);
|
||||
#else
|
||||
apply_autocmds(EVENT_BUFWINENTER, NULL, NULL, FALSE, curbuf);
|
||||
# endif
|
||||
#endif
|
||||
|
||||
/* restore curwin/curbuf and a few other things */
|
||||
aucmd_restbuf(&aco);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
return retval;
|
||||
|
@ -454,14 +438,12 @@ close_buffer(
|
|||
int action,
|
||||
int abort_if_last UNUSED)
|
||||
{
|
||||
#ifdef FEAT_AUTOCMD
|
||||
int is_curbuf;
|
||||
int nwindows;
|
||||
bufref_T bufref;
|
||||
int is_curwin = (curwin != NULL && curwin->w_buffer == buf);
|
||||
win_T *the_curwin = curwin;
|
||||
tabpage_T *the_curtab = curtab;
|
||||
#endif
|
||||
int unload_buf = (action != 0);
|
||||
int del_buf = (action == DOBUF_DEL || action == DOBUF_WIPE);
|
||||
int wipe_buf = (action == DOBUF_WIPE);
|
||||
|
@ -510,7 +492,6 @@ close_buffer(
|
|||
}
|
||||
#endif
|
||||
|
||||
#ifdef FEAT_AUTOCMD
|
||||
/* Disallow deleting the buffer when it is locked (already being closed or
|
||||
* halfway a command that relies on it). Unloading is allowed. */
|
||||
if (buf->b_locked > 0 && (del_buf || wipe_buf))
|
||||
|
@ -518,7 +499,6 @@ close_buffer(
|
|||
EMSG(_("E937: Attempt to delete a buffer that is in use"));
|
||||
return;
|
||||
}
|
||||
#endif
|
||||
|
||||
/* check no autocommands closed the window */
|
||||
if (win != NULL && win_valid_any_tab(win))
|
||||
|
@ -534,7 +514,6 @@ close_buffer(
|
|||
win->w_cursor.col, TRUE);
|
||||
}
|
||||
|
||||
#ifdef FEAT_AUTOCMD
|
||||
set_bufref(&bufref, buf);
|
||||
|
||||
/* When the buffer is no longer in a window, trigger BufWinLeave */
|
||||
|
@ -570,10 +549,10 @@ aucmd_abort:
|
|||
/* Autocommands made this the only window. */
|
||||
goto aucmd_abort;
|
||||
}
|
||||
# ifdef FEAT_EVAL
|
||||
#ifdef FEAT_EVAL
|
||||
if (aborting()) /* autocmds may abort script processing */
|
||||
return;
|
||||
# endif
|
||||
#endif
|
||||
}
|
||||
|
||||
/* If the buffer was in curwin and the window has changed, go back to that
|
||||
|
@ -587,7 +566,6 @@ aucmd_abort:
|
|||
}
|
||||
|
||||
nwindows = buf->b_nwindows;
|
||||
#endif
|
||||
|
||||
/* decrease the link count from windows (unless not in any window) */
|
||||
if (buf->b_nwindows > 0)
|
||||
|
@ -620,23 +598,20 @@ aucmd_abort:
|
|||
* Free all things allocated for this buffer.
|
||||
* Also calls the "BufDelete" autocommands when del_buf is TRUE.
|
||||
*/
|
||||
#ifdef FEAT_AUTOCMD
|
||||
/* Remember if we are closing the current buffer. Restore the number of
|
||||
* windows, so that autocommands in buf_freeall() don't get confused. */
|
||||
is_curbuf = (buf == curbuf);
|
||||
buf->b_nwindows = nwindows;
|
||||
#endif
|
||||
|
||||
buf_freeall(buf, (del_buf ? BFA_DEL : 0) + (wipe_buf ? BFA_WIPE : 0));
|
||||
|
||||
#ifdef FEAT_AUTOCMD
|
||||
/* Autocommands may have deleted the buffer. */
|
||||
if (!bufref_valid(&bufref))
|
||||
return;
|
||||
# ifdef FEAT_EVAL
|
||||
#ifdef FEAT_EVAL
|
||||
if (aborting()) /* autocmds may abort script processing */
|
||||
return;
|
||||
# endif
|
||||
#endif
|
||||
|
||||
/*
|
||||
* It's possible that autocommands change curbuf to the one being deleted.
|
||||
|
@ -655,7 +630,6 @@ aucmd_abort:
|
|||
* Decrement the count for the close we do here. */
|
||||
if (buf->b_nwindows > 0)
|
||||
--buf->b_nwindows;
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Remove the buffer from the list.
|
||||
|
@ -732,7 +706,6 @@ buf_clear_file(buf_T *buf)
|
|||
void
|
||||
buf_freeall(buf_T *buf, int flags)
|
||||
{
|
||||
#ifdef FEAT_AUTOCMD
|
||||
int is_curbuf = (buf == curbuf);
|
||||
bufref_T bufref;
|
||||
int is_curwin = (curwin != NULL && curwin->w_buffer == buf);
|
||||
|
@ -778,10 +751,10 @@ buf_freeall(buf_T *buf, int flags)
|
|||
unblock_autocmds();
|
||||
}
|
||||
|
||||
# ifdef FEAT_EVAL
|
||||
#ifdef FEAT_EVAL
|
||||
if (aborting()) /* autocmds may abort script processing */
|
||||
return;
|
||||
# endif
|
||||
#endif
|
||||
|
||||
/*
|
||||
* It's possible that autocommands change curbuf to the one being deleted.
|
||||
|
@ -791,7 +764,6 @@ buf_freeall(buf_T *buf, int flags)
|
|||
*/
|
||||
if (buf == curbuf && !is_curbuf)
|
||||
return;
|
||||
#endif
|
||||
#ifdef FEAT_DIFF
|
||||
diff_buf_delete(buf); /* Can't use 'diff' for unloaded buffer. */
|
||||
#endif
|
||||
|
@ -870,7 +842,6 @@ free_buffer(buf_T *buf)
|
|||
|
||||
buf_hashtab_remove(buf);
|
||||
|
||||
#ifdef FEAT_AUTOCMD
|
||||
aubuflocal_remove(buf);
|
||||
|
||||
if (autocmd_busy)
|
||||
|
@ -881,7 +852,6 @@ free_buffer(buf_T *buf)
|
|||
au_pending_free_buf = buf;
|
||||
}
|
||||
else
|
||||
#endif
|
||||
vim_free(buf);
|
||||
}
|
||||
|
||||
|
@ -994,7 +964,7 @@ goto_buffer(
|
|||
# if defined(HAS_SWAP_EXISTS_ACTION)
|
||||
if (swap_exists_action == SEA_QUIT && *eap->cmd == 's')
|
||||
{
|
||||
# if defined(FEAT_AUTOCMD) && defined(FEAT_EVAL)
|
||||
# if defined(FEAT_EVAL)
|
||||
cleanup_T cs;
|
||||
|
||||
/* Reset the error/interrupt/exception state here so that
|
||||
|
@ -1007,7 +977,7 @@ goto_buffer(
|
|||
swap_exists_action = SEA_NONE;
|
||||
swap_exists_did_quit = TRUE;
|
||||
|
||||
# if defined(FEAT_AUTOCMD) && defined(FEAT_EVAL)
|
||||
# if defined(FEAT_EVAL)
|
||||
/* Restore the error/interrupt/exception state if not discarded by a
|
||||
* new aborting error, interrupt, or uncaught exception. */
|
||||
leave_cleanup(&cs);
|
||||
|
@ -1027,17 +997,17 @@ goto_buffer(
|
|||
void
|
||||
handle_swap_exists(bufref_T *old_curbuf)
|
||||
{
|
||||
# if defined(FEAT_AUTOCMD) && defined(FEAT_EVAL)
|
||||
# if defined(FEAT_EVAL)
|
||||
cleanup_T cs;
|
||||
# endif
|
||||
#ifdef FEAT_SYN_HL
|
||||
# ifdef FEAT_SYN_HL
|
||||
long old_tw = curbuf->b_p_tw;
|
||||
#endif
|
||||
# endif
|
||||
buf_T *buf;
|
||||
|
||||
if (swap_exists_action == SEA_QUIT)
|
||||
{
|
||||
# if defined(FEAT_AUTOCMD) && defined(FEAT_EVAL)
|
||||
# if defined(FEAT_EVAL)
|
||||
/* Reset the error/interrupt/exception state here so that
|
||||
* aborting() returns FALSE when closing a buffer. */
|
||||
enter_cleanup(&cs);
|
||||
|
@ -1057,14 +1027,14 @@ handle_swap_exists(bufref_T *old_curbuf)
|
|||
if (buf != NULL)
|
||||
{
|
||||
enter_buffer(buf);
|
||||
#ifdef FEAT_SYN_HL
|
||||
# ifdef FEAT_SYN_HL
|
||||
if (old_tw != curbuf->b_p_tw)
|
||||
check_colorcolumn(curwin);
|
||||
#endif
|
||||
# endif
|
||||
}
|
||||
/* If "old_curbuf" is NULL we are in big trouble here... */
|
||||
|
||||
# if defined(FEAT_AUTOCMD) && defined(FEAT_EVAL)
|
||||
# if defined(FEAT_EVAL)
|
||||
/* Restore the error/interrupt/exception state if not discarded by a
|
||||
* new aborting error, interrupt, or uncaught exception. */
|
||||
leave_cleanup(&cs);
|
||||
|
@ -1072,7 +1042,7 @@ handle_swap_exists(bufref_T *old_curbuf)
|
|||
}
|
||||
else if (swap_exists_action == SEA_RECOVER)
|
||||
{
|
||||
# if defined(FEAT_AUTOCMD) && defined(FEAT_EVAL)
|
||||
# if defined(FEAT_EVAL)
|
||||
/* Reset the error/interrupt/exception state here so that
|
||||
* aborting() returns FALSE when closing a buffer. */
|
||||
enter_cleanup(&cs);
|
||||
|
@ -1085,7 +1055,7 @@ handle_swap_exists(bufref_T *old_curbuf)
|
|||
cmdline_row = msg_row;
|
||||
do_modelines(0);
|
||||
|
||||
# if defined(FEAT_AUTOCMD) && defined(FEAT_EVAL)
|
||||
# if defined(FEAT_EVAL)
|
||||
/* Restore the error/interrupt/exception state if not discarded by a
|
||||
* new aborting error, interrupt, or uncaught exception. */
|
||||
leave_cleanup(&cs);
|
||||
|
@ -1400,23 +1370,21 @@ do_buffer(
|
|||
|
||||
if (!forceit && bufIsChanged(buf))
|
||||
{
|
||||
#if defined(FEAT_GUI_DIALOG) || defined(FEAT_CON_DIALOG)
|
||||
# if defined(FEAT_GUI_DIALOG) || defined(FEAT_CON_DIALOG)
|
||||
if ((p_confirm || cmdmod.confirm) && p_write)
|
||||
{
|
||||
dialog_changed(buf, FALSE);
|
||||
# ifdef FEAT_AUTOCMD
|
||||
if (!bufref_valid(&bufref))
|
||||
/* Autocommand deleted buffer, oops! It's not changed
|
||||
* now. */
|
||||
return FAIL;
|
||||
# endif
|
||||
/* If it's still changed fail silently, the dialog already
|
||||
* mentioned why it fails. */
|
||||
if (bufIsChanged(buf))
|
||||
return FAIL;
|
||||
}
|
||||
else
|
||||
#endif
|
||||
# endif
|
||||
{
|
||||
EMSGN(_("E89: No write since last change for buffer %ld (add ! to override)"),
|
||||
buf->b_fnum);
|
||||
|
@ -1444,9 +1412,7 @@ do_buffer(
|
|||
* a window with this buffer.
|
||||
*/
|
||||
while (buf == curbuf
|
||||
#ifdef FEAT_AUTOCMD
|
||||
&& !(curwin->w_closing || curwin->w_buffer->b_locked > 0)
|
||||
#endif
|
||||
&& (!ONE_WINDOW || first_tabpage->tp_next != NULL))
|
||||
{
|
||||
if (win_close(curwin, FALSE) == FAIL)
|
||||
|
@ -1476,15 +1442,10 @@ do_buffer(
|
|||
*/
|
||||
buf = NULL; /* selected buffer */
|
||||
bp = NULL; /* used when no loaded buffer found */
|
||||
#ifdef FEAT_AUTOCMD
|
||||
if (au_new_curbuf.br_buf != NULL && bufref_valid(&au_new_curbuf))
|
||||
buf = au_new_curbuf.br_buf;
|
||||
# ifdef FEAT_JUMPLIST
|
||||
else
|
||||
# endif
|
||||
#endif
|
||||
#ifdef FEAT_JUMPLIST
|
||||
if (curwin->w_jumplistlen > 0)
|
||||
else if (curwin->w_jumplistlen > 0)
|
||||
{
|
||||
int jumpidx;
|
||||
|
||||
|
@ -1603,17 +1564,13 @@ do_buffer(
|
|||
#if defined(FEAT_GUI_DIALOG) || defined(FEAT_CON_DIALOG)
|
||||
if ((p_confirm || cmdmod.confirm) && p_write)
|
||||
{
|
||||
# ifdef FEAT_AUTOCMD
|
||||
bufref_T bufref;
|
||||
|
||||
set_bufref(&bufref, buf);
|
||||
# endif
|
||||
dialog_changed(curbuf, FALSE);
|
||||
# ifdef FEAT_AUTOCMD
|
||||
if (!bufref_valid(&bufref))
|
||||
/* Autocommand deleted buffer, oops! */
|
||||
return FAIL;
|
||||
# endif
|
||||
}
|
||||
if (bufIsChanged(curbuf))
|
||||
#endif
|
||||
|
@ -1634,7 +1591,7 @@ do_buffer(
|
|||
}
|
||||
#endif
|
||||
|
||||
#if defined(FEAT_AUTOCMD) && defined(FEAT_EVAL)
|
||||
#if defined(FEAT_EVAL)
|
||||
if (aborting()) /* autocmds may abort script processing */
|
||||
return FAIL;
|
||||
#endif
|
||||
|
@ -1678,17 +1635,15 @@ set_curbuf(buf_T *buf, int action)
|
|||
set_bufref(&prevbufref, prevbuf);
|
||||
set_bufref(&newbufref, buf);
|
||||
|
||||
#ifdef FEAT_AUTOCMD
|
||||
/* Autocommands may delete the curren buffer and/or the buffer we wan to go
|
||||
* to. In those cases don't close the buffer. */
|
||||
if (!apply_autocmds(EVENT_BUFLEAVE, NULL, NULL, FALSE, curbuf)
|
||||
|| (bufref_valid(&prevbufref)
|
||||
&& bufref_valid(&newbufref)
|
||||
# ifdef FEAT_EVAL
|
||||
#ifdef FEAT_EVAL
|
||||
&& !aborting()
|
||||
# endif
|
||||
))
|
||||
#endif
|
||||
))
|
||||
{
|
||||
#ifdef FEAT_SYN_HL
|
||||
if (prevbuf == curwin->w_buffer)
|
||||
|
@ -1696,7 +1651,7 @@ set_curbuf(buf_T *buf, int action)
|
|||
#endif
|
||||
if (unload)
|
||||
close_windows(prevbuf, FALSE);
|
||||
#if defined(FEAT_AUTOCMD) && defined(FEAT_EVAL)
|
||||
#if defined(FEAT_EVAL)
|
||||
if (bufref_valid(&prevbufref) && !aborting())
|
||||
#else
|
||||
if (bufref_valid(&prevbufref))
|
||||
|
@ -1714,16 +1669,14 @@ set_curbuf(buf_T *buf, int action)
|
|||
curwin = previouswin;
|
||||
}
|
||||
}
|
||||
#ifdef FEAT_AUTOCMD
|
||||
/* An autocommand may have deleted "buf", already entered it (e.g., when
|
||||
* it did ":bunload") or aborted the script processing.
|
||||
* If curwin->w_buffer is null, enter_buffer() will make it valid again */
|
||||
if ((buf_valid(buf) && buf != curbuf
|
||||
# ifdef FEAT_EVAL
|
||||
#ifdef FEAT_EVAL
|
||||
&& !aborting()
|
||||
# endif
|
||||
) || curwin->w_buffer == NULL)
|
||||
#endif
|
||||
) || curwin->w_buffer == NULL)
|
||||
{
|
||||
enter_buffer(buf);
|
||||
#ifdef FEAT_SYN_HL
|
||||
|
@ -1773,9 +1726,7 @@ enter_buffer(buf_T *buf)
|
|||
curwin->w_cursor.coladd = 0;
|
||||
#endif
|
||||
curwin->w_set_curswant = TRUE;
|
||||
#ifdef FEAT_AUTOCMD
|
||||
curwin->w_topline_was_set = FALSE;
|
||||
#endif
|
||||
|
||||
/* mark cursor position as being invalid */
|
||||
curwin->w_valid = 0;
|
||||
|
@ -1783,13 +1734,11 @@ enter_buffer(buf_T *buf)
|
|||
/* Make sure the buffer is loaded. */
|
||||
if (curbuf->b_ml.ml_mfp == NULL) /* need to load the file */
|
||||
{
|
||||
#ifdef FEAT_AUTOCMD
|
||||
/* If there is no filetype, allow for detecting one. Esp. useful for
|
||||
* ":ball" used in a autocommand. If there already is a filetype we
|
||||
* might prefer to keep it. */
|
||||
if (*curbuf->b_p_ft == NUL)
|
||||
did_filetype = FALSE;
|
||||
#endif
|
||||
|
||||
open_buffer(FALSE, NULL, 0);
|
||||
}
|
||||
|
@ -1798,14 +1747,12 @@ enter_buffer(buf_T *buf)
|
|||
if (!msg_silent)
|
||||
need_fileinfo = TRUE; /* display file info after redraw */
|
||||
(void)buf_check_timestamp(curbuf, FALSE); /* check if file changed */
|
||||
#ifdef FEAT_AUTOCMD
|
||||
curwin->w_topline = 1;
|
||||
# ifdef FEAT_DIFF
|
||||
#ifdef FEAT_DIFF
|
||||
curwin->w_topfill = 0;
|
||||
# endif
|
||||
#endif
|
||||
apply_autocmds(EVENT_BUFENTER, NULL, NULL, FALSE, curbuf);
|
||||
apply_autocmds(EVENT_BUFWINENTER, NULL, NULL, FALSE, curbuf);
|
||||
#endif
|
||||
}
|
||||
|
||||
/* If autocommands did not change the cursor position, restore cursor lnum
|
||||
|
@ -1817,10 +1764,8 @@ enter_buffer(buf_T *buf)
|
|||
#ifdef FEAT_TITLE
|
||||
maketitle();
|
||||
#endif
|
||||
#ifdef FEAT_AUTOCMD
|
||||
/* when autocmds didn't change it */
|
||||
if (curwin->w_topline == 1 && !curwin->w_topline_was_set)
|
||||
#endif
|
||||
scroll_cursor_halfway(FALSE); /* redisplay at correct position */
|
||||
|
||||
#ifdef FEAT_NETBEANS_INTG
|
||||
|
@ -1948,11 +1893,9 @@ buflist_new(
|
|||
|
||||
if ((flags & BLN_LISTED) && !buf->b_p_bl)
|
||||
{
|
||||
#ifdef FEAT_AUTOCMD
|
||||
bufref_T bufref;
|
||||
#endif
|
||||
|
||||
buf->b_p_bl = TRUE;
|
||||
#ifdef FEAT_AUTOCMD
|
||||
set_bufref(&bufref, buf);
|
||||
if (!(flags & BLN_DUMMY))
|
||||
{
|
||||
|
@ -1960,7 +1903,6 @@ buflist_new(
|
|||
&& !bufref_valid(&bufref))
|
||||
return NULL;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
return buf;
|
||||
}
|
||||
|
@ -1981,21 +1923,17 @@ buflist_new(
|
|||
&& (curbuf->b_ml.ml_mfp == NULL || BUFEMPTY()))
|
||||
{
|
||||
buf = curbuf;
|
||||
#ifdef FEAT_AUTOCMD
|
||||
/* It's like this buffer is deleted. Watch out for autocommands that
|
||||
* change curbuf! If that happens, allocate a new buffer anyway. */
|
||||
if (curbuf->b_p_bl)
|
||||
apply_autocmds(EVENT_BUFDELETE, NULL, NULL, FALSE, curbuf);
|
||||
if (buf == curbuf)
|
||||
apply_autocmds(EVENT_BUFWIPEOUT, NULL, NULL, FALSE, curbuf);
|
||||
# ifdef FEAT_EVAL
|
||||
#ifdef FEAT_EVAL
|
||||
if (aborting()) /* autocmds may abort script processing */
|
||||
return NULL;
|
||||
# endif
|
||||
#endif
|
||||
#ifdef FEAT_AUTOCMD
|
||||
if (buf == curbuf)
|
||||
#endif
|
||||
{
|
||||
/* Make sure 'bufhidden' and 'buftype' are empty */
|
||||
clear_string_option(&buf->b_p_bh);
|
||||
|
@ -2049,7 +1987,7 @@ buflist_new(
|
|||
buf_freeall(buf, 0);
|
||||
if (buf != curbuf) /* autocommands deleted the buffer! */
|
||||
return NULL;
|
||||
#if defined(FEAT_AUTOCMD) && defined(FEAT_EVAL)
|
||||
#if defined(FEAT_EVAL)
|
||||
if (aborting()) /* autocmds may abort script processing */
|
||||
return NULL;
|
||||
#endif
|
||||
|
@ -2128,7 +2066,6 @@ buflist_new(
|
|||
clrallmarks(buf); /* clear marks */
|
||||
fmarks_check_names(buf); /* check file marks for this file */
|
||||
buf->b_p_bl = (flags & BLN_LISTED) ? TRUE : FALSE; /* init 'buflisted' */
|
||||
#ifdef FEAT_AUTOCMD
|
||||
if (!(flags & BLN_DUMMY))
|
||||
{
|
||||
bufref_T bufref;
|
||||
|
@ -2146,12 +2083,11 @@ buflist_new(
|
|||
&& !bufref_valid(&bufref))
|
||||
return NULL;
|
||||
}
|
||||
# ifdef FEAT_EVAL
|
||||
#ifdef FEAT_EVAL
|
||||
if (aborting()) /* autocmds may abort script processing */
|
||||
return NULL;
|
||||
# endif
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
return buf;
|
||||
}
|
||||
|
@ -2230,9 +2166,7 @@ free_buf_options(
|
|||
#ifdef FEAT_SEARCHPATH
|
||||
clear_string_option(&buf->b_p_sua);
|
||||
#endif
|
||||
#ifdef FEAT_AUTOCMD
|
||||
clear_string_option(&buf->b_p_ft);
|
||||
#endif
|
||||
#ifdef FEAT_CINDENT
|
||||
clear_string_option(&buf->b_p_cink);
|
||||
clear_string_option(&buf->b_p_cino);
|
||||
|
@ -2315,10 +2249,8 @@ buflist_getfile(
|
|||
text_locked_msg();
|
||||
return FAIL;
|
||||
}
|
||||
#ifdef FEAT_AUTOCMD
|
||||
if (curbuf_locked())
|
||||
return FAIL;
|
||||
#endif
|
||||
|
||||
/* altfpos may be changed by getfile(), get it now */
|
||||
if (lnum == 0)
|
||||
|
@ -4368,7 +4300,6 @@ build_stl_str_hl(
|
|||
: _("[Help]"));
|
||||
break;
|
||||
|
||||
#ifdef FEAT_AUTOCMD
|
||||
case STL_FILETYPE:
|
||||
if (*wp->w_buffer->b_p_ft != NUL
|
||||
&& STRLEN(wp->w_buffer->b_p_ft) < TMPLEN - 3)
|
||||
|
@ -4391,7 +4322,6 @@ build_stl_str_hl(
|
|||
str = tmp;
|
||||
}
|
||||
break;
|
||||
#endif
|
||||
|
||||
#if defined(FEAT_QUICKFIX)
|
||||
case STL_PREVIEWFLAG:
|
||||
|
@ -5013,20 +4943,18 @@ do_arg_all(
|
|||
if (!buf_hide(buf) && buf->b_nwindows <= 1
|
||||
&& bufIsChanged(buf))
|
||||
{
|
||||
#ifdef FEAT_AUTOCMD
|
||||
bufref_T bufref;
|
||||
|
||||
set_bufref(&bufref, buf);
|
||||
#endif
|
||||
|
||||
(void)autowrite(buf, FALSE);
|
||||
#ifdef FEAT_AUTOCMD
|
||||
|
||||
/* check if autocommands removed the window */
|
||||
if (!win_valid(wp) || !bufref_valid(&bufref))
|
||||
{
|
||||
wpnext = firstwin; /* start all over... */
|
||||
continue;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
/* don't close last window */
|
||||
if (ONE_WINDOW
|
||||
|
@ -5035,11 +4963,10 @@ do_arg_all(
|
|||
else
|
||||
{
|
||||
win_close(wp, !buf_hide(buf) && !bufIsChanged(buf));
|
||||
#ifdef FEAT_AUTOCMD
|
||||
|
||||
/* check if autocommands removed the next window */
|
||||
if (!win_valid(wpnext))
|
||||
wpnext = firstwin; /* start all over... */
|
||||
#endif
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -5049,11 +4976,10 @@ do_arg_all(
|
|||
if (had_tab == 0 || tpnext == NULL)
|
||||
break;
|
||||
|
||||
# ifdef FEAT_AUTOCMD
|
||||
/* check if autocommands removed the next tab page */
|
||||
if (!valid_tabpage(tpnext))
|
||||
tpnext = first_tabpage; /* start all over...*/
|
||||
# endif
|
||||
|
||||
goto_tabpage_tp(tpnext, TRUE, TRUE);
|
||||
}
|
||||
|
||||
|
@ -5064,11 +4990,9 @@ do_arg_all(
|
|||
if (count > opened_len || count <= 0)
|
||||
count = opened_len;
|
||||
|
||||
#ifdef FEAT_AUTOCMD
|
||||
/* Don't execute Win/Buf Enter/Leave autocommands here. */
|
||||
++autocmd_no_enter;
|
||||
++autocmd_no_leave;
|
||||
#endif
|
||||
last_curwin = curwin;
|
||||
last_curtab = curtab;
|
||||
win_enter(lastwin, FALSE);
|
||||
|
@ -5114,10 +5038,8 @@ do_arg_all(
|
|||
if (split_ret == FAIL)
|
||||
continue;
|
||||
}
|
||||
#ifdef FEAT_AUTOCMD
|
||||
else /* first window: do autocmd for leaving this buffer */
|
||||
--autocmd_no_leave;
|
||||
#endif
|
||||
|
||||
/*
|
||||
* edit file "i"
|
||||
|
@ -5133,10 +5055,8 @@ do_arg_all(
|
|||
((buf_hide(curwin->w_buffer)
|
||||
|| bufIsChanged(curwin->w_buffer)) ? ECMD_HIDE : 0)
|
||||
+ ECMD_OLDBUF, curwin);
|
||||
#ifdef FEAT_AUTOCMD
|
||||
if (use_firstwin)
|
||||
++autocmd_no_leave;
|
||||
#endif
|
||||
use_firstwin = FALSE;
|
||||
}
|
||||
ui_breakcheck();
|
||||
|
@ -5149,9 +5069,8 @@ do_arg_all(
|
|||
/* Remove the "lock" on the argument list. */
|
||||
alist_unlink(alist);
|
||||
|
||||
#ifdef FEAT_AUTOCMD
|
||||
--autocmd_no_enter;
|
||||
#endif
|
||||
|
||||
/* restore last referenced tabpage's curwin */
|
||||
if (last_curtab != new_curtab)
|
||||
{
|
||||
|
@ -5166,9 +5085,7 @@ do_arg_all(
|
|||
if (win_valid(new_curwin))
|
||||
win_enter(new_curwin, FALSE);
|
||||
|
||||
#ifdef FEAT_AUTOCMD
|
||||
--autocmd_no_leave;
|
||||
#endif
|
||||
vim_free(opened);
|
||||
}
|
||||
|
||||
|
@ -5223,18 +5140,13 @@ ex_buffer_all(exarg_T *eap)
|
|||
- tabline_height()
|
||||
: wp->w_width != Columns)
|
||||
|| (had_tab > 0 && wp != firstwin)) && !ONE_WINDOW
|
||||
#ifdef FEAT_AUTOCMD
|
||||
&& !(wp->w_closing || wp->w_buffer->b_locked > 0)
|
||||
#endif
|
||||
)
|
||||
&& !(wp->w_closing || wp->w_buffer->b_locked > 0))
|
||||
{
|
||||
win_close(wp, FALSE);
|
||||
#ifdef FEAT_AUTOCMD
|
||||
wpnext = firstwin; /* just in case an autocommand does
|
||||
something strange with windows */
|
||||
tpnext = first_tabpage; /* start all over...*/
|
||||
open_wins = 0;
|
||||
#endif
|
||||
}
|
||||
else
|
||||
++open_wins;
|
||||
|
@ -5251,14 +5163,10 @@ ex_buffer_all(exarg_T *eap)
|
|||
* open one. Otherwise move the window to the right position.
|
||||
* Watch out for autocommands that delete buffers or windows!
|
||||
*/
|
||||
#ifdef FEAT_AUTOCMD
|
||||
/* Don't execute Win/Buf Enter/Leave autocommands here. */
|
||||
++autocmd_no_enter;
|
||||
#endif
|
||||
win_enter(lastwin, FALSE);
|
||||
#ifdef FEAT_AUTOCMD
|
||||
++autocmd_no_leave;
|
||||
#endif
|
||||
for (buf = firstbuf; buf != NULL && open_wins < count; buf = buf->b_next)
|
||||
{
|
||||
/* Check if this buffer needs a window */
|
||||
|
@ -5286,11 +5194,10 @@ ex_buffer_all(exarg_T *eap)
|
|||
|
||||
if (wp == NULL && split_ret == OK)
|
||||
{
|
||||
#ifdef FEAT_AUTOCMD
|
||||
bufref_T bufref;
|
||||
|
||||
set_bufref(&bufref, buf);
|
||||
#endif
|
||||
|
||||
/* Split the window and put the buffer in it */
|
||||
p_ea_save = p_ea;
|
||||
p_ea = TRUE; /* use space from all windows */
|
||||
|
@ -5305,20 +5212,18 @@ ex_buffer_all(exarg_T *eap)
|
|||
swap_exists_action = SEA_DIALOG;
|
||||
#endif
|
||||
set_curbuf(buf, DOBUF_GOTO);
|
||||
#ifdef FEAT_AUTOCMD
|
||||
if (!bufref_valid(&bufref))
|
||||
{
|
||||
/* autocommands deleted the buffer!!! */
|
||||
#if defined(HAS_SWAP_EXISTS_ACTION)
|
||||
swap_exists_action = SEA_NONE;
|
||||
# endif
|
||||
#endif
|
||||
break;
|
||||
}
|
||||
#endif
|
||||
#if defined(HAS_SWAP_EXISTS_ACTION)
|
||||
if (swap_exists_action == SEA_QUIT)
|
||||
{
|
||||
# if defined(FEAT_AUTOCMD) && defined(FEAT_EVAL)
|
||||
# if defined(FEAT_EVAL)
|
||||
cleanup_T cs;
|
||||
|
||||
/* Reset the error/interrupt/exception state here so that
|
||||
|
@ -5332,7 +5237,7 @@ ex_buffer_all(exarg_T *eap)
|
|||
swap_exists_action = SEA_NONE;
|
||||
swap_exists_did_quit = TRUE;
|
||||
|
||||
# if defined(FEAT_AUTOCMD) && defined(FEAT_EVAL)
|
||||
# if defined(FEAT_EVAL)
|
||||
/* Restore the error/interrupt/exception state if not
|
||||
* discarded by a new aborting error, interrupt, or uncaught
|
||||
* exception. */
|
||||
|
@ -5359,13 +5264,9 @@ ex_buffer_all(exarg_T *eap)
|
|||
if (had_tab > 0 && tabpage_index(NULL) <= p_tpm)
|
||||
cmdmod.tab = 9999;
|
||||
}
|
||||
#ifdef FEAT_AUTOCMD
|
||||
--autocmd_no_enter;
|
||||
#endif
|
||||
win_enter(firstwin, FALSE); /* back to first window */
|
||||
#ifdef FEAT_AUTOCMD
|
||||
--autocmd_no_leave;
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Close superfluous windows.
|
||||
|
@ -5374,15 +5275,12 @@ ex_buffer_all(exarg_T *eap)
|
|||
{
|
||||
r = (buf_hide(wp->w_buffer) || !bufIsChanged(wp->w_buffer)
|
||||
|| autowrite(wp->w_buffer, FALSE) == OK);
|
||||
#ifdef FEAT_AUTOCMD
|
||||
if (!win_valid(wp))
|
||||
{
|
||||
/* BufWrite Autocommands made the window invalid, start over */
|
||||
wp = lastwin;
|
||||
}
|
||||
else
|
||||
#endif
|
||||
if (r)
|
||||
else if (r)
|
||||
{
|
||||
win_close(wp, !buf_hide(wp->w_buffer));
|
||||
--open_wins;
|
||||
|
@ -6233,12 +6131,10 @@ set_buflisted(int on)
|
|||
if (on != curbuf->b_p_bl)
|
||||
{
|
||||
curbuf->b_p_bl = on;
|
||||
#ifdef FEAT_AUTOCMD
|
||||
if (on)
|
||||
apply_autocmds(EVENT_BUFADD, NULL, NULL, FALSE, curbuf);
|
||||
else
|
||||
apply_autocmds(EVENT_BUFDELETE, NULL, NULL, FALSE, curbuf);
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -6311,13 +6207,11 @@ wipe_buffer(
|
|||
if (buf->b_fnum == top_file_num - 1)
|
||||
--top_file_num;
|
||||
|
||||
#ifdef FEAT_AUTOCMD
|
||||
if (!aucmd) /* Don't trigger BufDelete autocommands here. */
|
||||
block_autocmds();
|
||||
#endif
|
||||
|
||||
close_buffer(NULL, buf, DOBUF_WIPE, FALSE);
|
||||
#ifdef FEAT_AUTOCMD
|
||||
|
||||
if (!aucmd)
|
||||
unblock_autocmds();
|
||||
#endif
|
||||
}
|
||||
|
|
10
src/diff.c
10
src/diff.c
|
@ -872,13 +872,9 @@ diff_file(
|
|||
(diff_flags & DIFF_ICASE) ? "-i " : "",
|
||||
tmp_orig, tmp_new);
|
||||
append_redir(cmd, (int)len, p_srr, tmp_diff);
|
||||
#ifdef FEAT_AUTOCMD
|
||||
block_autocmds(); /* Avoid ShellCmdPost stuff */
|
||||
#endif
|
||||
(void)call_shell(cmd, SHELL_FILTER|SHELL_SILENT|SHELL_DOOUT);
|
||||
#ifdef FEAT_AUTOCMD
|
||||
unblock_autocmds();
|
||||
#endif
|
||||
vim_free(cmd);
|
||||
}
|
||||
}
|
||||
|
@ -984,13 +980,9 @@ ex_diffpatch(exarg_T *eap)
|
|||
* cooked mode to allow the user to respond to prompts. */
|
||||
vim_snprintf((char *)buf, buflen, "patch -o %s %s < %s",
|
||||
tmp_new, tmp_orig, esc_name);
|
||||
#ifdef FEAT_AUTOCMD
|
||||
block_autocmds(); /* Avoid ShellCmdPost stuff */
|
||||
#endif
|
||||
(void)call_shell(buf, SHELL_FILTER | SHELL_COOKED);
|
||||
#ifdef FEAT_AUTOCMD
|
||||
unblock_autocmds();
|
||||
#endif
|
||||
}
|
||||
|
||||
#ifdef UNIX
|
||||
|
@ -1052,11 +1044,9 @@ ex_diffpatch(exarg_T *eap)
|
|||
eap->arg = newname;
|
||||
ex_file(eap);
|
||||
|
||||
#ifdef FEAT_AUTOCMD
|
||||
/* Do filetype detection with the new name. */
|
||||
if (au_has_group((char_u *)"filetypedetect"))
|
||||
do_cmdline_cmd((char_u *)":doau filetypedetect BufRead");
|
||||
#endif
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
91
src/edit.c
91
src/edit.c
|
@ -273,7 +273,7 @@ static int ins_ctrl_ey(int tc);
|
|||
static void ins_try_si(int c);
|
||||
#endif
|
||||
static colnr_T get_nolist_virtcol(void);
|
||||
#ifdef FEAT_AUTOCMD
|
||||
#if defined(FEAT_EVAL)
|
||||
static char_u *do_insert_char_pre(int c);
|
||||
#endif
|
||||
|
||||
|
@ -388,7 +388,6 @@ edit(
|
|||
ins_compl_clear(); /* clear stuff for CTRL-X mode */
|
||||
#endif
|
||||
|
||||
#ifdef FEAT_AUTOCMD
|
||||
/*
|
||||
* Trigger InsertEnter autocommands. Do not do this for "r<CR>" or "grx".
|
||||
*/
|
||||
|
@ -396,7 +395,7 @@ edit(
|
|||
{
|
||||
pos_T save_cursor = curwin->w_cursor;
|
||||
|
||||
# ifdef FEAT_EVAL
|
||||
#ifdef FEAT_EVAL
|
||||
if (cmdchar == 'R')
|
||||
ptr = (char_u *)"r";
|
||||
else if (cmdchar == 'V')
|
||||
|
@ -405,7 +404,7 @@ edit(
|
|||
ptr = (char_u *)"i";
|
||||
set_vim_var_string(VV_INSERTMODE, ptr, 1);
|
||||
set_vim_var_string(VV_CHAR, NULL, -1); /* clear v:char */
|
||||
# endif
|
||||
#endif
|
||||
apply_autocmds(EVENT_INSERTENTER, NULL, NULL, FALSE, curbuf);
|
||||
|
||||
/* Make sure the cursor didn't move. Do call check_cursor_col() in
|
||||
|
@ -415,9 +414,9 @@ edit(
|
|||
* line number is still valid (lines may have been deleted).
|
||||
* Do not restore if v:char was set to a non-empty string. */
|
||||
if (!EQUAL_POS(curwin->w_cursor, save_cursor)
|
||||
# ifdef FEAT_EVAL
|
||||
#ifdef FEAT_EVAL
|
||||
&& *get_vim_var_str(VV_CHAR) == NUL
|
||||
# endif
|
||||
#endif
|
||||
&& save_cursor.lnum <= curbuf->b_ml.ml_line_count)
|
||||
{
|
||||
int save_state = State;
|
||||
|
@ -428,7 +427,6 @@ edit(
|
|||
State = save_state;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef FEAT_CONCEAL
|
||||
/* Check if the cursor line needs redrawing before changing State. If
|
||||
|
@ -521,7 +519,7 @@ edit(
|
|||
*/
|
||||
if (curbuf->b_p_iminsert == B_IMODE_LMAP)
|
||||
State |= LANGMAP;
|
||||
#ifdef FEAT_MBYTE
|
||||
#ifdef HAVE_INPUT_METHOD
|
||||
im_set_active(curbuf->b_p_iminsert == B_IMODE_IM);
|
||||
#endif
|
||||
|
||||
|
@ -805,10 +803,8 @@ edit(
|
|||
c = safe_vgetc();
|
||||
} while (c == K_IGNORE || c == K_NOP);
|
||||
|
||||
#ifdef FEAT_AUTOCMD
|
||||
/* Don't want K_CURSORHOLD for the second key, e.g., after CTRL-V. */
|
||||
did_cursorhold = TRUE;
|
||||
#endif
|
||||
|
||||
#ifdef FEAT_RIGHTLEFT
|
||||
if (p_hkmap && KeyTyped)
|
||||
|
@ -856,7 +852,7 @@ edit(
|
|||
* completion: Add to "compl_leader". */
|
||||
if (ins_compl_accept_char(c))
|
||||
{
|
||||
#ifdef FEAT_AUTOCMD
|
||||
#if defined(FEAT_EVAL)
|
||||
/* Trigger InsertCharPre. */
|
||||
char_u *str = do_insert_char_pre(c);
|
||||
char_u *p;
|
||||
|
@ -1030,12 +1026,10 @@ doESCkey:
|
|||
|
||||
if (ins_esc(&count, cmdchar, nomove))
|
||||
{
|
||||
#ifdef FEAT_AUTOCMD
|
||||
if (cmdchar != 'r' && cmdchar != 'v')
|
||||
apply_autocmds(EVENT_INSERTLEAVE, NULL, NULL,
|
||||
FALSE, curbuf);
|
||||
did_cursorhold = FALSE;
|
||||
#endif
|
||||
return (c == Ctrl_O);
|
||||
}
|
||||
continue;
|
||||
|
@ -1234,12 +1228,10 @@ doESCkey:
|
|||
case K_IGNORE: /* Something mapped to nothing */
|
||||
break;
|
||||
|
||||
#ifdef FEAT_AUTOCMD
|
||||
case K_CURSORHOLD: /* Didn't type something for a while. */
|
||||
apply_autocmds(EVENT_CURSORHOLDI, NULL, NULL, FALSE, curbuf);
|
||||
did_cursorhold = TRUE;
|
||||
break;
|
||||
#endif
|
||||
|
||||
#ifdef FEAT_GUI_W32
|
||||
/* On Win32 ignore <M-F4>, we get it when closing the window was
|
||||
|
@ -1488,7 +1480,7 @@ normalchar:
|
|||
/*
|
||||
* Insert a normal character.
|
||||
*/
|
||||
#ifdef FEAT_AUTOCMD
|
||||
#if defined(FEAT_EVAL)
|
||||
if (!p_paste)
|
||||
{
|
||||
/* Trigger InsertCharPre. */
|
||||
|
@ -1565,16 +1557,14 @@ normalchar:
|
|||
break;
|
||||
} /* end of switch (c) */
|
||||
|
||||
#ifdef FEAT_AUTOCMD
|
||||
/* If typed something may trigger CursorHoldI again. */
|
||||
if (c != K_CURSORHOLD
|
||||
# ifdef FEAT_COMPL_FUNC
|
||||
#ifdef FEAT_COMPL_FUNC
|
||||
/* but not in CTRL-X mode, a script can't restore the state */
|
||||
&& ctrl_x_mode == CTRL_X_NORMAL
|
||||
# endif
|
||||
#endif
|
||||
)
|
||||
did_cursorhold = FALSE;
|
||||
#endif
|
||||
|
||||
/* If the cursor was moved we didn't just insert a space */
|
||||
if (arrow_used)
|
||||
|
@ -1624,25 +1614,17 @@ ins_redraw(
|
|||
if (char_avail())
|
||||
return;
|
||||
|
||||
#if defined(FEAT_AUTOCMD) || defined(FEAT_CONCEAL)
|
||||
#if defined(FEAT_CONCEAL)
|
||||
/* Trigger CursorMoved if the cursor moved. Not when the popup menu is
|
||||
* visible, the command might delete it. */
|
||||
if (ready && (
|
||||
# ifdef FEAT_AUTOCMD
|
||||
has_cursormovedI()
|
||||
# endif
|
||||
# if defined(FEAT_AUTOCMD) && defined(FEAT_CONCEAL)
|
||||
||
|
||||
# endif
|
||||
# ifdef FEAT_CONCEAL
|
||||
curwin->w_p_cole > 0
|
||||
if (ready && (has_cursormovedI()
|
||||
# if defined(FEAT_CONCEAL)
|
||||
|| curwin->w_p_cole > 0
|
||||
# endif
|
||||
)
|
||||
# ifdef FEAT_AUTOCMD
|
||||
&& !EQUAL_POS(last_cursormoved, curwin->w_cursor)
|
||||
# endif
|
||||
&& !EQUAL_POS(last_cursormoved, curwin->w_cursor)
|
||||
# ifdef FEAT_INS_EXPAND
|
||||
&& !pum_visible()
|
||||
&& !pum_visible()
|
||||
# endif
|
||||
)
|
||||
{
|
||||
|
@ -1654,7 +1636,6 @@ ins_redraw(
|
|||
if (syntax_present(curwin) && must_redraw)
|
||||
update_screen(0);
|
||||
# endif
|
||||
# ifdef FEAT_AUTOCMD
|
||||
if (has_cursormovedI())
|
||||
{
|
||||
/* Make sure curswant is correct, an autocommand may call
|
||||
|
@ -1662,37 +1643,31 @@ ins_redraw(
|
|||
update_curswant();
|
||||
apply_autocmds(EVENT_CURSORMOVEDI, NULL, NULL, FALSE, curbuf);
|
||||
}
|
||||
# endif
|
||||
# ifdef FEAT_CONCEAL
|
||||
if (curwin->w_p_cole > 0)
|
||||
{
|
||||
# ifdef FEAT_AUTOCMD
|
||||
conceal_old_cursor_line = last_cursormoved.lnum;
|
||||
# endif
|
||||
conceal_new_cursor_line = curwin->w_cursor.lnum;
|
||||
conceal_update_lines = TRUE;
|
||||
}
|
||||
# endif
|
||||
# ifdef FEAT_AUTOCMD
|
||||
last_cursormoved = curwin->w_cursor;
|
||||
# endif
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef FEAT_AUTOCMD
|
||||
/* Trigger TextChangedI if b_changedtick differs. */
|
||||
if (ready && has_textchangedI()
|
||||
&& curbuf->b_last_changedtick != CHANGEDTICK(curbuf)
|
||||
# ifdef FEAT_INS_EXPAND
|
||||
#ifdef FEAT_INS_EXPAND
|
||||
&& !pum_visible()
|
||||
# endif
|
||||
#endif
|
||||
)
|
||||
{
|
||||
apply_autocmds(EVENT_TEXTCHANGEDI, NULL, NULL, FALSE, curbuf);
|
||||
curbuf->b_last_changedtick = CHANGEDTICK(curbuf);
|
||||
}
|
||||
|
||||
# ifdef FEAT_INS_EXPAND
|
||||
#ifdef FEAT_INS_EXPAND
|
||||
/* Trigger TextChangedP if b_changedtick differs. When the popupmenu closes
|
||||
* TextChangedI will need to trigger for backwards compatibility, thus use
|
||||
* different b_last_changedtick* variables. */
|
||||
|
@ -1703,7 +1678,6 @@ ins_redraw(
|
|||
apply_autocmds(EVENT_TEXTCHANGEDP, NULL, NULL, FALSE, curbuf);
|
||||
curbuf->b_last_changedtick_pum = CHANGEDTICK(curbuf);
|
||||
}
|
||||
# endif
|
||||
#endif
|
||||
|
||||
if (must_redraw)
|
||||
|
@ -4001,19 +3975,15 @@ ins_compl_prep(int c)
|
|||
if (want_cindent && in_cinkeys(KEY_COMPLETE, ' ', inindent(0)))
|
||||
do_c_expr_indent();
|
||||
#endif
|
||||
#ifdef FEAT_AUTOCMD
|
||||
/* Trigger the CompleteDone event to give scripts a chance to act
|
||||
* upon the completion. */
|
||||
apply_autocmds(EVENT_COMPLETEDONE, NULL, NULL, FALSE, curbuf);
|
||||
#endif
|
||||
}
|
||||
}
|
||||
#ifdef FEAT_AUTOCMD
|
||||
else if (ctrl_x_mode == CTRL_X_LOCAL_MSG)
|
||||
/* Trigger the CompleteDone event to give scripts a chance to act
|
||||
* upon the (possibly failed) completion. */
|
||||
apply_autocmds(EVENT_COMPLETEDONE, NULL, NULL, FALSE, curbuf);
|
||||
#endif
|
||||
|
||||
/* reset continue_* if we left expansion-mode, if we stay they'll be
|
||||
* (re)set properly in ins_complete() */
|
||||
|
@ -6224,10 +6194,7 @@ insertchar(
|
|||
#ifdef FEAT_RIGHTLEFT
|
||||
&& !p_ri
|
||||
#endif
|
||||
#ifdef FEAT_AUTOCMD
|
||||
&& !has_insertcharpre()
|
||||
#endif
|
||||
)
|
||||
&& !has_insertcharpre())
|
||||
{
|
||||
#define INPUT_BUFLEN 100
|
||||
char_u buf[INPUT_BUFLEN + 1];
|
||||
|
@ -8404,7 +8371,7 @@ ins_reg(void)
|
|||
++no_u_sync;
|
||||
if (regname == '=')
|
||||
{
|
||||
# ifdef FEAT_MBYTE
|
||||
# ifdef HAVE_INPUT_METHOD
|
||||
int im_on = im_get_status();
|
||||
# endif
|
||||
/* Sync undo when evaluating the expression calls setline() or
|
||||
|
@ -8412,7 +8379,7 @@ ins_reg(void)
|
|||
u_sync_once = 2;
|
||||
|
||||
regname = get_expr_register();
|
||||
# ifdef FEAT_MBYTE
|
||||
# ifdef HAVE_INPUT_METHOD
|
||||
/* Restore the Input Method. */
|
||||
if (im_on)
|
||||
im_set_active(TRUE);
|
||||
|
@ -8541,12 +8508,12 @@ ins_ctrl_hat(void)
|
|||
{
|
||||
curbuf->b_p_iminsert = B_IMODE_LMAP;
|
||||
State |= LANGMAP;
|
||||
#ifdef FEAT_MBYTE
|
||||
#ifdef HAVE_INPUT_METHOD
|
||||
im_set_active(FALSE);
|
||||
#endif
|
||||
}
|
||||
}
|
||||
#ifdef FEAT_MBYTE
|
||||
#ifdef HAVE_INPUT_METHOD
|
||||
else
|
||||
{
|
||||
/* There are no ":lmap" mappings, toggle IM */
|
||||
|
@ -8693,7 +8660,7 @@ ins_esc(
|
|||
}
|
||||
}
|
||||
|
||||
#ifdef FEAT_MBYTE
|
||||
#ifdef HAVE_INPUT_METHOD
|
||||
/* Disable IM to allow typing English directly for Normal mode commands.
|
||||
* When ":lmap" is enabled don't change 'iminsert' (IM can be enabled as
|
||||
* well). */
|
||||
|
@ -8843,7 +8810,6 @@ ins_insert(int replaceState)
|
|||
}
|
||||
#endif
|
||||
|
||||
#ifdef FEAT_AUTOCMD
|
||||
# ifdef FEAT_EVAL
|
||||
set_vim_var_string(VV_INSERTMODE,
|
||||
(char_u *)((State & REPLACE_FLAG) ? "i" :
|
||||
|
@ -8853,7 +8819,6 @@ ins_insert(int replaceState)
|
|||
"r"), 1);
|
||||
# endif
|
||||
apply_autocmds(EVENT_INSERTCHANGE, NULL, NULL, FALSE, curbuf);
|
||||
#endif
|
||||
if (State & REPLACE_FLAG)
|
||||
State = INSERT | (State & LANGMAP);
|
||||
else
|
||||
|
@ -10573,7 +10538,7 @@ get_nolist_virtcol(void)
|
|||
return curwin->w_virtcol;
|
||||
}
|
||||
|
||||
#ifdef FEAT_AUTOCMD
|
||||
#if defined(FEAT_EVAL)
|
||||
/*
|
||||
* Handle the InsertCharPre autocommand.
|
||||
* "c" is the character that was typed.
|
||||
|
@ -10590,11 +10555,11 @@ do_insert_char_pre(int c)
|
|||
if (!has_insertcharpre())
|
||||
return NULL;
|
||||
|
||||
#ifdef FEAT_MBYTE
|
||||
# ifdef FEAT_MBYTE
|
||||
if (has_mbyte)
|
||||
buf[(*mb_char2bytes)(c, buf)] = NUL;
|
||||
else
|
||||
#endif
|
||||
# endif
|
||||
{
|
||||
buf[0] = c;
|
||||
buf[1] = NUL;
|
||||
|
|
|
@ -5125,11 +5125,9 @@ garbage_collect(int testing)
|
|||
FOR_ALL_TAB_WINDOWS(tp, wp)
|
||||
abort = abort || set_ref_in_item(&wp->w_winvar.di_tv, copyID,
|
||||
NULL, NULL);
|
||||
#ifdef FEAT_AUTOCMD
|
||||
if (aucmd_win != NULL)
|
||||
abort = abort || set_ref_in_item(&aucmd_win->w_winvar.di_tv, copyID,
|
||||
NULL, NULL);
|
||||
#endif
|
||||
|
||||
/* tabpage-local variables */
|
||||
FOR_ALL_TABPAGES(tp)
|
||||
|
@ -6560,7 +6558,6 @@ v_throwpoint(char_u *oldval)
|
|||
return NULL;
|
||||
}
|
||||
|
||||
#if defined(FEAT_AUTOCMD) || defined(PROTO)
|
||||
/*
|
||||
* Set v:cmdarg.
|
||||
* If "eap" != NULL, use "eap" to generate the value and return the old value.
|
||||
|
@ -6618,7 +6615,7 @@ set_cmdarg(exarg_T *eap, char_u *oldarg)
|
|||
if (eap->force_ff != 0)
|
||||
sprintf((char *)newval + STRLEN(newval), " ++ff=%s",
|
||||
eap->cmd + eap->force_ff);
|
||||
# ifdef FEAT_MBYTE
|
||||
#ifdef FEAT_MBYTE
|
||||
if (eap->force_enc != 0)
|
||||
sprintf((char *)newval + STRLEN(newval), " ++enc=%s",
|
||||
eap->cmd + eap->force_enc);
|
||||
|
@ -6628,11 +6625,10 @@ set_cmdarg(exarg_T *eap, char_u *oldarg)
|
|||
STRCPY(newval + STRLEN(newval), " ++bad=drop");
|
||||
else if (eap->bad_char != 0)
|
||||
sprintf((char *)newval + STRLEN(newval), " ++bad=%c", eap->bad_char);
|
||||
# endif
|
||||
#endif
|
||||
vimvars[VV_CMDARG].vv_str = newval;
|
||||
return oldval;
|
||||
}
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Get the value of internal variable "name".
|
||||
|
|
|
@ -2668,9 +2668,7 @@ f_delete(typval_T *argvars, typval_T *rettv)
|
|||
static void
|
||||
f_did_filetype(typval_T *argvars UNUSED, typval_T *rettv UNUSED)
|
||||
{
|
||||
#ifdef FEAT_AUTOCMD
|
||||
rettv->vval.v_number = did_filetype;
|
||||
#endif
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -3053,12 +3051,10 @@ f_exists(typval_T *argvars, typval_T *rettv)
|
|||
}
|
||||
else if (*p == '#')
|
||||
{
|
||||
#ifdef FEAT_AUTOCMD
|
||||
if (p[1] == '#')
|
||||
n = autocmd_supported(p + 2);
|
||||
else
|
||||
n = au_exists(p + 1);
|
||||
#endif
|
||||
}
|
||||
else /* internal variable */
|
||||
{
|
||||
|
@ -5797,9 +5793,7 @@ f_has(typval_T *argvars, typval_T *rettv)
|
|||
#ifdef FEAT_ARABIC
|
||||
"arabic",
|
||||
#endif
|
||||
#ifdef FEAT_AUTOCMD
|
||||
"autocmd",
|
||||
#endif
|
||||
#ifdef FEAT_AUTOSERVERNAME
|
||||
"autoservername",
|
||||
#endif
|
||||
|
|
134
src/ex_cmds.c
134
src/ex_cmds.c
|
@ -28,9 +28,7 @@ static int read_viminfo_up_to_marks(vir_T *virp, int forceit, int writing);
|
|||
#endif
|
||||
|
||||
static int check_readonly(int *forceit, buf_T *buf);
|
||||
#ifdef FEAT_AUTOCMD
|
||||
static void delbuf_msg(char_u *name);
|
||||
#endif
|
||||
static int
|
||||
#ifdef __BORLANDC__
|
||||
_RTLENTRYF
|
||||
|
@ -1148,9 +1146,7 @@ do_bang(
|
|||
/* Careful: This may recursively call do_bang() again! (because of
|
||||
* autocommands) */
|
||||
do_filter(line1, line2, eap, newcmd, do_in, do_out);
|
||||
#ifdef FEAT_AUTOCMD
|
||||
apply_autocmds(EVENT_SHELLFILTERPOST, NULL, NULL, FALSE, curbuf);
|
||||
#endif
|
||||
}
|
||||
if (free_newcmd)
|
||||
vim_free(newcmd);
|
||||
|
@ -1186,9 +1182,7 @@ do_filter(
|
|||
linenr_T read_linecount;
|
||||
pos_T cursor_save;
|
||||
char_u *cmd_buf;
|
||||
#ifdef FEAT_AUTOCMD
|
||||
buf_T *old_curbuf = curbuf;
|
||||
#endif
|
||||
int shell_flags = 0;
|
||||
|
||||
if (*cmd == NUL) /* no filter command */
|
||||
|
@ -1259,16 +1253,14 @@ do_filter(
|
|||
{
|
||||
msg_putchar('\n'); /* keep message from buf_write() */
|
||||
--no_wait_return;
|
||||
#if defined(FEAT_AUTOCMD) && defined(FEAT_EVAL)
|
||||
#if defined(FEAT_EVAL)
|
||||
if (!aborting())
|
||||
#endif
|
||||
(void)EMSG2(_(e_notcreate), itmp); /* will call wait_return */
|
||||
goto filterend;
|
||||
}
|
||||
#ifdef FEAT_AUTOCMD
|
||||
if (curbuf != old_curbuf)
|
||||
goto filterend;
|
||||
#endif
|
||||
|
||||
if (!do_out)
|
||||
msg_putchar('\n');
|
||||
|
@ -1334,7 +1326,7 @@ do_filter(
|
|||
if (readfile(otmp, NULL, line2, (linenr_T)0, (linenr_T)MAXLNUM,
|
||||
eap, READ_FILTER) != OK)
|
||||
{
|
||||
#if defined(FEAT_AUTOCMD) && defined(FEAT_EVAL)
|
||||
#if defined(FEAT_EVAL)
|
||||
if (!aborting())
|
||||
#endif
|
||||
{
|
||||
|
@ -1343,10 +1335,8 @@ do_filter(
|
|||
}
|
||||
goto error;
|
||||
}
|
||||
#ifdef FEAT_AUTOCMD
|
||||
if (curbuf != old_curbuf)
|
||||
goto filterend;
|
||||
#endif
|
||||
}
|
||||
|
||||
read_linecount = curbuf->b_ml.ml_line_count - read_linecount;
|
||||
|
@ -1426,13 +1416,11 @@ error:
|
|||
|
||||
filterend:
|
||||
|
||||
#ifdef FEAT_AUTOCMD
|
||||
if (curbuf != old_curbuf)
|
||||
{
|
||||
--no_wait_return;
|
||||
EMSG(_("E135: *Filter* Autocommands must not change current buffer"));
|
||||
}
|
||||
#endif
|
||||
if (itmp != NULL)
|
||||
mch_remove(itmp);
|
||||
if (otmp != NULL)
|
||||
|
@ -1482,9 +1470,7 @@ do_shell(
|
|||
* avoid having to type return below.
|
||||
*/
|
||||
msg_putchar('\r'); /* put cursor at start of line */
|
||||
#ifdef FEAT_AUTOCMD
|
||||
if (!autocmd_busy)
|
||||
#endif
|
||||
{
|
||||
#ifdef MSWIN
|
||||
if (!winstart)
|
||||
|
@ -1497,11 +1483,7 @@ do_shell(
|
|||
msg_putchar('\n'); /* may shift screen one line up */
|
||||
|
||||
/* warning message before calling the shell */
|
||||
if (p_warn
|
||||
#ifdef FEAT_AUTOCMD
|
||||
&& !autocmd_busy
|
||||
#endif
|
||||
&& msg_silent == 0)
|
||||
if (p_warn && !autocmd_busy && msg_silent == 0)
|
||||
FOR_ALL_BUFFERS(buf)
|
||||
if (bufIsChangedNotTerm(buf))
|
||||
{
|
||||
|
@ -1536,14 +1518,12 @@ do_shell(
|
|||
msg_col = 0;
|
||||
}
|
||||
|
||||
#ifdef FEAT_AUTOCMD
|
||||
if (autocmd_busy)
|
||||
{
|
||||
if (msg_silent == 0)
|
||||
redraw_later_clear();
|
||||
}
|
||||
else
|
||||
#endif
|
||||
{
|
||||
/*
|
||||
* For ":sh" there is no need to call wait_return(), just redraw.
|
||||
|
@ -1612,9 +1592,7 @@ do_shell(
|
|||
/* display any error messages now */
|
||||
display_errors();
|
||||
|
||||
#ifdef FEAT_AUTOCMD
|
||||
apply_autocmds(EVENT_SHELLCMDPOST, NULL, NULL, FALSE, curbuf);
|
||||
#endif
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -2979,16 +2957,14 @@ rename_buffer(char_u *new_fname)
|
|||
char_u *fname, *sfname, *xfname;
|
||||
buf_T *buf;
|
||||
|
||||
#ifdef FEAT_AUTOCMD
|
||||
buf = curbuf;
|
||||
apply_autocmds(EVENT_BUFFILEPRE, NULL, NULL, FALSE, curbuf);
|
||||
/* buffer changed, don't change name now */
|
||||
if (buf != curbuf)
|
||||
return FAIL;
|
||||
# ifdef FEAT_EVAL
|
||||
#ifdef FEAT_EVAL
|
||||
if (aborting()) /* autocmds may abort script processing */
|
||||
return FAIL;
|
||||
# endif
|
||||
#endif
|
||||
/*
|
||||
* The name of the current buffer will be changed.
|
||||
|
@ -3017,9 +2993,8 @@ rename_buffer(char_u *new_fname)
|
|||
}
|
||||
vim_free(fname);
|
||||
vim_free(sfname);
|
||||
#ifdef FEAT_AUTOCMD
|
||||
apply_autocmds(EVENT_BUFFILEPOST, NULL, NULL, FALSE, curbuf);
|
||||
#endif
|
||||
|
||||
/* Change directories when the 'acd' option is set. */
|
||||
DO_AUTOCHDIR
|
||||
return OK;
|
||||
|
@ -3198,22 +3173,20 @@ do_write(exarg_T *eap)
|
|||
{
|
||||
if (eap->cmdidx == CMD_saveas && alt_buf != NULL)
|
||||
{
|
||||
#ifdef FEAT_AUTOCMD
|
||||
buf_T *was_curbuf = curbuf;
|
||||
|
||||
apply_autocmds(EVENT_BUFFILEPRE, NULL, NULL, FALSE, curbuf);
|
||||
apply_autocmds(EVENT_BUFFILEPRE, NULL, NULL, FALSE, alt_buf);
|
||||
# ifdef FEAT_EVAL
|
||||
#ifdef FEAT_EVAL
|
||||
if (curbuf != was_curbuf || aborting())
|
||||
# else
|
||||
#else
|
||||
if (curbuf != was_curbuf)
|
||||
# endif
|
||||
#endif
|
||||
{
|
||||
/* buffer changed, don't change name now */
|
||||
retval = FAIL;
|
||||
goto theend;
|
||||
}
|
||||
#endif
|
||||
/* Exchange the file names for the current and the alternate
|
||||
* buffer. This makes it look like we are now editing the buffer
|
||||
* under the new name. Must be done before buf_write(), because
|
||||
|
@ -3229,7 +3202,7 @@ do_write(exarg_T *eap)
|
|||
alt_buf->b_sfname = curbuf->b_sfname;
|
||||
curbuf->b_sfname = fname;
|
||||
buf_name_changed(curbuf);
|
||||
#ifdef FEAT_AUTOCMD
|
||||
|
||||
apply_autocmds(EVENT_BUFFILEPOST, NULL, NULL, FALSE, curbuf);
|
||||
apply_autocmds(EVENT_BUFFILEPOST, NULL, NULL, FALSE, alt_buf);
|
||||
if (!alt_buf->b_p_bl)
|
||||
|
@ -3237,11 +3210,11 @@ do_write(exarg_T *eap)
|
|||
alt_buf->b_p_bl = TRUE;
|
||||
apply_autocmds(EVENT_BUFADD, NULL, NULL, FALSE, alt_buf);
|
||||
}
|
||||
# ifdef FEAT_EVAL
|
||||
#ifdef FEAT_EVAL
|
||||
if (curbuf != was_curbuf || aborting())
|
||||
# else
|
||||
#else
|
||||
if (curbuf != was_curbuf)
|
||||
# endif
|
||||
#endif
|
||||
{
|
||||
/* buffer changed, don't write the file */
|
||||
retval = FAIL;
|
||||
|
@ -3260,7 +3233,6 @@ do_write(exarg_T *eap)
|
|||
/* Autocommands may have changed buffer names, esp. when
|
||||
* 'autochdir' is set. */
|
||||
fname = curbuf->b_sfname;
|
||||
#endif
|
||||
}
|
||||
|
||||
name_was_missing = curbuf->b_ffname == NULL;
|
||||
|
@ -3489,18 +3461,14 @@ do_wqall(exarg_T *eap)
|
|||
}
|
||||
else
|
||||
{
|
||||
#ifdef FEAT_AUTOCMD
|
||||
bufref_T bufref;
|
||||
|
||||
set_bufref(&bufref, buf);
|
||||
#endif
|
||||
if (buf_write_all(buf, eap->forceit) == FAIL)
|
||||
++error;
|
||||
#ifdef FEAT_AUTOCMD
|
||||
/* an autocommand may have deleted the buffer */
|
||||
if (!bufref_valid(&bufref))
|
||||
buf = firstbuf;
|
||||
#endif
|
||||
}
|
||||
eap->forceit = save_forceit; /* check_overwrite() may set it */
|
||||
}
|
||||
|
@ -3604,10 +3572,8 @@ getfile(
|
|||
|
||||
if (text_locked())
|
||||
return GETFILE_ERROR;
|
||||
#ifdef FEAT_AUTOCMD
|
||||
if (curbuf_locked())
|
||||
return GETFILE_ERROR;
|
||||
#endif
|
||||
|
||||
if (fnum == 0)
|
||||
{
|
||||
|
@ -3702,17 +3668,15 @@ do_ecmd(
|
|||
{
|
||||
int other_file; /* TRUE if editing another file */
|
||||
int oldbuf; /* TRUE if using existing buffer */
|
||||
#ifdef FEAT_AUTOCMD
|
||||
int auto_buf = FALSE; /* TRUE if autocommands brought us
|
||||
into the buffer unexpectedly */
|
||||
char_u *new_name = NULL;
|
||||
#if defined(FEAT_EVAL)
|
||||
int did_set_swapcommand = FALSE;
|
||||
#endif
|
||||
buf_T *buf;
|
||||
bufref_T bufref;
|
||||
#if defined(FEAT_AUTOCMD) || defined(FEAT_GUI_DIALOG) || defined(FEAT_CON_DIALOG)
|
||||
bufref_T old_curbuf;
|
||||
#endif
|
||||
char_u *free_fname = NULL;
|
||||
#ifdef FEAT_BROWSE
|
||||
char_u *browse_file = NULL;
|
||||
|
@ -3736,9 +3700,7 @@ do_ecmd(
|
|||
|
||||
if (eap != NULL)
|
||||
command = eap->do_ecmd_cmd;
|
||||
#if defined(FEAT_AUTOCMD) || defined(FEAT_GUI_DIALOG) || defined(FEAT_CON_DIALOG)
|
||||
set_bufref(&old_curbuf, curbuf);
|
||||
#endif
|
||||
|
||||
if (fnum != 0)
|
||||
{
|
||||
|
@ -3751,11 +3713,10 @@ do_ecmd(
|
|||
#ifdef FEAT_BROWSE
|
||||
if (cmdmod.browse)
|
||||
{
|
||||
# ifdef FEAT_AUTOCMD
|
||||
if (
|
||||
# ifdef FEAT_GUI
|
||||
# ifdef FEAT_GUI
|
||||
!gui.in_use &&
|
||||
# endif
|
||||
# endif
|
||||
au_has_group((char_u *)"FileExplorer"))
|
||||
{
|
||||
/* No browsing supported but we do have the file explorer:
|
||||
|
@ -3764,7 +3725,6 @@ do_ecmd(
|
|||
ffname = (char_u *)".";
|
||||
}
|
||||
else
|
||||
# endif
|
||||
{
|
||||
browse_file = do_browse(0, (char_u *)_("Edit File"), ffname,
|
||||
NULL, NULL, NULL, curbuf);
|
||||
|
@ -3838,7 +3798,7 @@ do_ecmd(
|
|||
*/
|
||||
reset_VIsual();
|
||||
|
||||
#ifdef FEAT_AUTOCMD
|
||||
#if defined(FEAT_EVAL)
|
||||
if ((command != NULL || newlnum > (linenr_T)0)
|
||||
&& *get_vim_var_str(VV_SWAPCOMMAND) == NUL)
|
||||
{
|
||||
|
@ -3901,12 +3861,11 @@ do_ecmd(
|
|||
#endif
|
||||
buf = buflist_new(ffname, sfname, 0L,
|
||||
BLN_CURBUF | ((flags & ECMD_SET_HELP) ? 0 : BLN_LISTED));
|
||||
#ifdef FEAT_AUTOCMD
|
||||
|
||||
/* autocommands may change curwin and curbuf */
|
||||
if (oldwin != NULL)
|
||||
oldwin = curwin;
|
||||
set_bufref(&old_curbuf, curbuf);
|
||||
#endif
|
||||
}
|
||||
if (buf == NULL)
|
||||
goto theend;
|
||||
|
@ -3921,11 +3880,7 @@ do_ecmd(
|
|||
(void)buf_check_timestamp(buf, FALSE);
|
||||
/* Check if autocommands made the buffer invalid or changed the
|
||||
* current buffer. */
|
||||
if (!bufref_valid(&bufref)
|
||||
#ifdef FEAT_AUTOCMD
|
||||
|| curbuf != old_curbuf.br_buf
|
||||
#endif
|
||||
)
|
||||
if (!bufref_valid(&bufref) || curbuf != old_curbuf.br_buf)
|
||||
goto theend;
|
||||
#ifdef FEAT_EVAL
|
||||
if (aborting()) /* autocmds may abort script processing */
|
||||
|
@ -3950,7 +3905,6 @@ do_ecmd(
|
|||
*/
|
||||
if (buf != curbuf)
|
||||
{
|
||||
#ifdef FEAT_AUTOCMD
|
||||
/*
|
||||
* Be careful: The autocommands may delete any buffer and change
|
||||
* the current buffer.
|
||||
|
@ -3971,13 +3925,13 @@ do_ecmd(
|
|||
delbuf_msg(new_name); /* frees new_name */
|
||||
goto theend;
|
||||
}
|
||||
# ifdef FEAT_EVAL
|
||||
#ifdef FEAT_EVAL
|
||||
if (aborting()) /* autocmds may abort script processing */
|
||||
{
|
||||
vim_free(new_name);
|
||||
goto theend;
|
||||
}
|
||||
# endif
|
||||
#endif
|
||||
if (buf == curbuf) /* already in new buffer */
|
||||
auto_buf = TRUE;
|
||||
else
|
||||
|
@ -3990,7 +3944,6 @@ do_ecmd(
|
|||
++buf->b_locked;
|
||||
|
||||
if (curbuf == old_curbuf.br_buf)
|
||||
#endif
|
||||
buf_copy_options(buf, BCO_ENTER);
|
||||
|
||||
/* Close the link to the current buffer. This will set
|
||||
|
@ -3999,18 +3952,17 @@ do_ecmd(
|
|||
close_buffer(oldwin, curbuf,
|
||||
(flags & ECMD_HIDE) ? 0 : DOBUF_UNLOAD, FALSE);
|
||||
|
||||
#ifdef FEAT_AUTOCMD
|
||||
the_curwin->w_closing = FALSE;
|
||||
--buf->b_locked;
|
||||
|
||||
# ifdef FEAT_EVAL
|
||||
#ifdef FEAT_EVAL
|
||||
/* autocmds may abort script processing */
|
||||
if (aborting() && curwin->w_buffer != NULL)
|
||||
{
|
||||
vim_free(new_name);
|
||||
goto theend;
|
||||
}
|
||||
# endif
|
||||
#endif
|
||||
/* Be careful again, like above. */
|
||||
if (!bufref_valid(&au_new_curbuf))
|
||||
{
|
||||
|
@ -4021,7 +3973,6 @@ do_ecmd(
|
|||
if (buf == curbuf) /* already in new buffer */
|
||||
auto_buf = TRUE;
|
||||
else
|
||||
#endif
|
||||
{
|
||||
#ifdef FEAT_SYN_HL
|
||||
/*
|
||||
|
@ -4054,13 +4005,10 @@ do_ecmd(
|
|||
#ifdef FEAT_SPELL
|
||||
did_get_winopts = TRUE;
|
||||
#endif
|
||||
|
||||
#ifdef FEAT_AUTOCMD
|
||||
}
|
||||
vim_free(new_name);
|
||||
au_new_curbuf.br_buf = NULL;
|
||||
au_new_curbuf.br_buf_free_count = 0;
|
||||
#endif
|
||||
}
|
||||
|
||||
curwin->w_pcmark.lnum = 1;
|
||||
|
@ -4083,9 +4031,7 @@ do_ecmd(
|
|||
++RedrawingDisabled;
|
||||
did_inc_redrawing_disabled = TRUE;
|
||||
|
||||
#ifdef FEAT_AUTOCMD
|
||||
buf = curbuf;
|
||||
#endif
|
||||
if ((flags & ECMD_SET_HELP) || keep_help_flag)
|
||||
{
|
||||
prepare_help_buffer();
|
||||
|
@ -4098,21 +4044,19 @@ do_ecmd(
|
|||
set_buflisted(TRUE);
|
||||
}
|
||||
|
||||
#ifdef FEAT_AUTOCMD
|
||||
/* If autocommands change buffers under our fingers, forget about
|
||||
* editing the file. */
|
||||
if (buf != curbuf)
|
||||
goto theend;
|
||||
# ifdef FEAT_EVAL
|
||||
#ifdef FEAT_EVAL
|
||||
if (aborting()) /* autocmds may abort script processing */
|
||||
goto theend;
|
||||
# endif
|
||||
#endif
|
||||
|
||||
/* Since we are starting to edit a file, consider the filetype to be
|
||||
* unset. Helps for when an autocommand changes files and expects syntax
|
||||
* highlighting to work in the other file. */
|
||||
did_filetype = FALSE;
|
||||
#endif
|
||||
|
||||
/*
|
||||
* other_file oldbuf
|
||||
|
@ -4129,14 +4073,13 @@ do_ecmd(
|
|||
newlnum = curwin->w_cursor.lnum;
|
||||
solcol = curwin->w_cursor.col;
|
||||
}
|
||||
#ifdef FEAT_AUTOCMD
|
||||
buf = curbuf;
|
||||
if (buf->b_fname != NULL)
|
||||
new_name = vim_strsave(buf->b_fname);
|
||||
else
|
||||
new_name = NULL;
|
||||
set_bufref(&bufref, buf);
|
||||
#endif
|
||||
|
||||
if (p_ur < 0 || curbuf->b_ml.ml_line_count <= p_ur)
|
||||
{
|
||||
/* Save all the text, so that the reload can be undone.
|
||||
|
@ -4145,9 +4088,7 @@ do_ecmd(
|
|||
if (u_savecommon(0, curbuf->b_ml.ml_line_count + 1, 0, TRUE)
|
||||
== FAIL)
|
||||
{
|
||||
#ifdef FEAT_AUTOCMD
|
||||
vim_free(new_name);
|
||||
#endif
|
||||
goto theend;
|
||||
}
|
||||
u_unchanged(curbuf);
|
||||
|
@ -4158,7 +4099,7 @@ do_ecmd(
|
|||
}
|
||||
else
|
||||
buf_freeall(curbuf, 0); /* free all things for buffer */
|
||||
#ifdef FEAT_AUTOCMD
|
||||
|
||||
/* If autocommands deleted the buffer we were going to re-edit, give
|
||||
* up and jump to the end. */
|
||||
if (!bufref_valid(&bufref))
|
||||
|
@ -4173,10 +4114,9 @@ do_ecmd(
|
|||
* the autocommands changed the buffer... */
|
||||
if (buf != curbuf)
|
||||
goto theend;
|
||||
# ifdef FEAT_EVAL
|
||||
#ifdef FEAT_EVAL
|
||||
if (aborting()) /* autocmds may abort script processing */
|
||||
goto theend;
|
||||
# endif
|
||||
#endif
|
||||
buf_clear_file(curbuf);
|
||||
curbuf->b_op_start.lnum = 0; /* clear '[ and '] marks */
|
||||
|
@ -4194,9 +4134,7 @@ do_ecmd(
|
|||
*/
|
||||
check_arg_idx(curwin);
|
||||
|
||||
#ifdef FEAT_AUTOCMD
|
||||
if (!auto_buf)
|
||||
#endif
|
||||
{
|
||||
/*
|
||||
* Set cursor and init window before reading the file and executing
|
||||
|
@ -4237,7 +4175,7 @@ do_ecmd(
|
|||
/*
|
||||
* Open the buffer and read the file.
|
||||
*/
|
||||
#if defined(FEAT_AUTOCMD) && defined(FEAT_EVAL)
|
||||
#if defined(FEAT_EVAL)
|
||||
if (should_abort(open_buffer(FALSE, eap, readfile_flags)))
|
||||
retval = FAIL;
|
||||
#else
|
||||
|
@ -4250,7 +4188,6 @@ do_ecmd(
|
|||
handle_swap_exists(&old_curbuf);
|
||||
#endif
|
||||
}
|
||||
#ifdef FEAT_AUTOCMD
|
||||
else
|
||||
{
|
||||
/* Read the modelines, but only to set window-local options. Any
|
||||
|
@ -4264,7 +4201,6 @@ do_ecmd(
|
|||
&retval);
|
||||
}
|
||||
check_arg_idx(curwin);
|
||||
#endif
|
||||
|
||||
/* If autocommands change the cursor position or topline, we should
|
||||
* keep it. Also when it moves within a line. */
|
||||
|
@ -4342,11 +4278,7 @@ do_ecmd(
|
|||
* Did not read the file, need to show some info about the file.
|
||||
* Do this after setting the cursor.
|
||||
*/
|
||||
if (oldbuf
|
||||
#ifdef FEAT_AUTOCMD
|
||||
&& !auto_buf
|
||||
#endif
|
||||
)
|
||||
if (oldbuf && !auto_buf)
|
||||
{
|
||||
int msg_scroll_save = msg_scroll;
|
||||
|
||||
|
@ -4430,7 +4362,7 @@ do_ecmd(
|
|||
theend:
|
||||
if (did_inc_redrawing_disabled)
|
||||
--RedrawingDisabled;
|
||||
#ifdef FEAT_AUTOCMD
|
||||
#if defined(FEAT_EVAL)
|
||||
if (did_set_swapcommand)
|
||||
set_vim_var_string(VV_SWAPCOMMAND, NULL, -1);
|
||||
#endif
|
||||
|
@ -4441,7 +4373,6 @@ theend:
|
|||
return retval;
|
||||
}
|
||||
|
||||
#ifdef FEAT_AUTOCMD
|
||||
static void
|
||||
delbuf_msg(char_u *name)
|
||||
{
|
||||
|
@ -4451,7 +4382,6 @@ delbuf_msg(char_u *name)
|
|||
au_new_curbuf.br_buf = NULL;
|
||||
au_new_curbuf.br_buf_free_count = 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
static int append_indent = 0; /* autoindent for first line */
|
||||
|
||||
|
@ -5156,7 +5086,7 @@ do_sub(exarg_T *eap)
|
|||
*/
|
||||
line2 = eap->line2;
|
||||
for (lnum = eap->line1; lnum <= line2 && !(got_quit
|
||||
#if defined(FEAT_EVAL) && defined(FEAT_AUTOCMD)
|
||||
#if defined(FEAT_EVAL)
|
||||
|| aborting()
|
||||
#endif
|
||||
); ++lnum)
|
||||
|
@ -6870,7 +6800,6 @@ fix_help_buffer(void)
|
|||
char_u *rt;
|
||||
int mustfree;
|
||||
|
||||
#ifdef FEAT_AUTOCMD
|
||||
/* Set filetype to "help" if still needed. */
|
||||
if (STRCMP(curbuf->b_p_ft, "help") != 0)
|
||||
{
|
||||
|
@ -6878,7 +6807,6 @@ fix_help_buffer(void)
|
|||
set_option_value((char_u *)"ft", 0L, (char_u *)"help", OPT_LOCAL);
|
||||
--curbuf_lock;
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef FEAT_SYN_HL
|
||||
if (!syntax_present(curwin))
|
||||
|
|
|
@ -2045,17 +2045,15 @@ autowrite_all(void)
|
|||
FOR_ALL_BUFFERS(buf)
|
||||
if (bufIsChanged(buf) && !buf->b_p_ro)
|
||||
{
|
||||
#ifdef FEAT_AUTOCMD
|
||||
bufref_T bufref;
|
||||
|
||||
set_bufref(&bufref, buf);
|
||||
#endif
|
||||
|
||||
(void)buf_write_all(buf, FALSE);
|
||||
#ifdef FEAT_AUTOCMD
|
||||
|
||||
/* an autocommand may have deleted the buffer */
|
||||
if (!bufref_valid(&bufref))
|
||||
buf = firstbuf;
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -2067,11 +2065,9 @@ autowrite_all(void)
|
|||
check_changed(buf_T *buf, int flags)
|
||||
{
|
||||
int forceit = (flags & CCGD_FORCEIT);
|
||||
#ifdef FEAT_AUTOCMD
|
||||
bufref_T bufref;
|
||||
|
||||
set_bufref(&bufref, buf);
|
||||
#endif
|
||||
|
||||
if ( !forceit
|
||||
&& bufIsChanged(buf)
|
||||
|
@ -2093,17 +2089,15 @@ check_changed(buf_T *buf, int flags)
|
|||
# endif
|
||||
))
|
||||
++count;
|
||||
# ifdef FEAT_AUTOCMD
|
||||
if (!bufref_valid(&bufref))
|
||||
/* Autocommand deleted buffer, oops! It's not changed now. */
|
||||
return FALSE;
|
||||
# endif
|
||||
|
||||
dialog_changed(buf, count > 1);
|
||||
# ifdef FEAT_AUTOCMD
|
||||
|
||||
if (!bufref_valid(&bufref))
|
||||
/* Autocommand deleted buffer, oops! It's not changed now. */
|
||||
return FALSE;
|
||||
# endif
|
||||
return bufIsChanged(buf);
|
||||
}
|
||||
#endif
|
||||
|
@ -2197,11 +2191,9 @@ dialog_changed(
|
|||
)
|
||||
&& !buf2->b_p_ro)
|
||||
{
|
||||
#ifdef FEAT_AUTOCMD
|
||||
bufref_T bufref;
|
||||
|
||||
set_bufref(&bufref, buf2);
|
||||
#endif
|
||||
#ifdef FEAT_BROWSE
|
||||
/* May get file name, when there is none */
|
||||
browse_save_fname(buf2);
|
||||
|
@ -2210,11 +2202,10 @@ dialog_changed(
|
|||
buf2->b_fname, buf2->b_ffname, FALSE) == OK)
|
||||
/* didn't hit Cancel */
|
||||
(void)buf_write_all(buf2, FALSE);
|
||||
#ifdef FEAT_AUTOCMD
|
||||
|
||||
/* an autocommand may have deleted the buffer */
|
||||
if (!bufref_valid(&bufref))
|
||||
buf2 = firstbuf;
|
||||
#endif
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -2370,19 +2361,15 @@ check_changed_any(
|
|||
FOR_ALL_TAB_WINDOWS(tp, wp)
|
||||
if (wp->w_buffer == buf)
|
||||
{
|
||||
#ifdef FEAT_AUTOCMD
|
||||
bufref_T bufref;
|
||||
|
||||
set_bufref(&bufref, buf);
|
||||
#endif
|
||||
|
||||
goto_tabpage_win(tp, wp);
|
||||
#ifdef FEAT_AUTOCMD
|
||||
|
||||
/* Paranoia: did autocms wipe out the buffer with changes? */
|
||||
if (!bufref_valid(&bufref))
|
||||
{
|
||||
goto theend;
|
||||
}
|
||||
#endif
|
||||
goto buf_found;
|
||||
}
|
||||
buf_found:
|
||||
|
@ -2420,20 +2407,16 @@ check_fname(void)
|
|||
buf_write_all(buf_T *buf, int forceit)
|
||||
{
|
||||
int retval;
|
||||
#ifdef FEAT_AUTOCMD
|
||||
buf_T *old_curbuf = curbuf;
|
||||
#endif
|
||||
|
||||
retval = (buf_write(buf, buf->b_ffname, buf->b_fname,
|
||||
(linenr_T)1, buf->b_ml.ml_line_count, NULL,
|
||||
FALSE, forceit, TRUE, FALSE));
|
||||
#ifdef FEAT_AUTOCMD
|
||||
if (curbuf != old_curbuf)
|
||||
{
|
||||
msg_source(HL_ATTR(HLF_W));
|
||||
MSG(_("Warning: Entered other buffer unexpectedly (check autocommands)"));
|
||||
}
|
||||
#endif
|
||||
return retval;
|
||||
}
|
||||
|
||||
|
@ -3053,7 +3036,7 @@ ex_listdo(exarg_T *eap)
|
|||
tabpage_T *tp;
|
||||
buf_T *buf = curbuf;
|
||||
int next_fnum = 0;
|
||||
#if defined(FEAT_AUTOCMD) && defined(FEAT_SYN_HL)
|
||||
#if defined(FEAT_SYN_HL)
|
||||
char_u *save_ei = NULL;
|
||||
#endif
|
||||
char_u *p_shm_save;
|
||||
|
@ -3071,7 +3054,7 @@ ex_listdo(exarg_T *eap)
|
|||
}
|
||||
#endif
|
||||
|
||||
#if defined(FEAT_AUTOCMD) && defined(FEAT_SYN_HL)
|
||||
#if defined(FEAT_SYN_HL)
|
||||
if (eap->cmdidx != CMD_windo && eap->cmdidx != CMD_tabdo)
|
||||
/* Don't do syntax HL autocommands. Skipping the syntax file is a
|
||||
* great speed improvement. */
|
||||
|
@ -3265,7 +3248,7 @@ ex_listdo(exarg_T *eap)
|
|||
listcmd_busy = FALSE;
|
||||
}
|
||||
|
||||
#if defined(FEAT_AUTOCMD) && defined(FEAT_SYN_HL)
|
||||
#if defined(FEAT_SYN_HL)
|
||||
if (save_ei != NULL)
|
||||
{
|
||||
au_event_restore(save_ei);
|
||||
|
@ -3660,6 +3643,8 @@ source_in_path(char_u *path, char_u *name, int flags)
|
|||
}
|
||||
|
||||
|
||||
#if defined(FEAT_EVAL) || defined(PROTO)
|
||||
|
||||
/*
|
||||
* Expand wildcards in "pat" and invoke do_source() for each match.
|
||||
*/
|
||||
|
@ -3800,7 +3785,6 @@ load_pack_plugin(char_u *fname)
|
|||
vim_snprintf((char *)pat, len, plugpat, ffname);
|
||||
source_all_matches(pat);
|
||||
|
||||
#ifdef FEAT_AUTOCMD
|
||||
{
|
||||
char_u *cmd = vim_strsave((char_u *)"g:did_load_filetypes");
|
||||
|
||||
|
@ -3815,7 +3799,6 @@ load_pack_plugin(char_u *fname)
|
|||
}
|
||||
vim_free(cmd);
|
||||
}
|
||||
#endif
|
||||
vim_free(pat);
|
||||
retval = OK;
|
||||
|
||||
|
@ -3911,8 +3894,9 @@ ex_packadd(exarg_T *eap)
|
|||
vim_free(pat);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
#if defined(FEAT_EVAL) && defined(FEAT_AUTOCMD)
|
||||
#if defined(FEAT_EVAL) || defined(PROTO)
|
||||
/*
|
||||
* ":options"
|
||||
*/
|
||||
|
@ -4308,23 +4292,21 @@ do_source(
|
|||
goto theend;
|
||||
}
|
||||
|
||||
#ifdef FEAT_AUTOCMD
|
||||
/* Apply SourceCmd autocommands, they should get the file and source it. */
|
||||
if (has_autocmd(EVENT_SOURCECMD, fname_exp, NULL)
|
||||
&& apply_autocmds(EVENT_SOURCECMD, fname_exp, fname_exp,
|
||||
FALSE, curbuf))
|
||||
{
|
||||
# ifdef FEAT_EVAL
|
||||
#ifdef FEAT_EVAL
|
||||
retval = aborting() ? FAIL : OK;
|
||||
# else
|
||||
#else
|
||||
retval = OK;
|
||||
# endif
|
||||
#endif
|
||||
goto theend;
|
||||
}
|
||||
|
||||
/* Apply SourcePre autocommands, they may get the file. */
|
||||
apply_autocmds(EVENT_SOURCEPRE, fname_exp, fname_exp, FALSE, curbuf);
|
||||
#endif
|
||||
|
||||
#ifdef USE_FOPEN_NOINH
|
||||
cookie.fp = fopen_noinh_readbin((char *)fname_exp);
|
||||
|
|
110
src/ex_docmd.c
110
src/ex_docmd.c
|
@ -81,14 +81,8 @@ static void ex_abclear(exarg_T *eap);
|
|||
# define ex_menu ex_ni
|
||||
# define ex_menutranslate ex_ni
|
||||
#endif
|
||||
#ifdef FEAT_AUTOCMD
|
||||
static void ex_autocmd(exarg_T *eap);
|
||||
static void ex_doautocmd(exarg_T *eap);
|
||||
#else
|
||||
# define ex_autocmd ex_ni
|
||||
# define ex_doautocmd ex_ni
|
||||
# define ex_doautoall ex_ni
|
||||
#endif
|
||||
#ifdef FEAT_LISTCMDS
|
||||
static void ex_bunload(exarg_T *eap);
|
||||
static void ex_buffer(exarg_T *eap);
|
||||
|
@ -234,6 +228,10 @@ static void ex_popup(exarg_T *eap);
|
|||
# define ex_syntax ex_ni
|
||||
# define ex_ownsyntax ex_ni
|
||||
#endif
|
||||
#ifndef FEAT_EVAL
|
||||
# define ex_packadd ex_ni
|
||||
# define ex_packloadall ex_ni
|
||||
#endif
|
||||
#if !defined(FEAT_SYN_HL) || !defined(FEAT_PROFILE)
|
||||
# define ex_syntime ex_ni
|
||||
#endif
|
||||
|
@ -390,13 +388,8 @@ static void ex_viminfo(exarg_T *eap);
|
|||
# define ex_viminfo ex_ni
|
||||
#endif
|
||||
static void ex_behave(exarg_T *eap);
|
||||
#ifdef FEAT_AUTOCMD
|
||||
static void ex_filetype(exarg_T *eap);
|
||||
static void ex_setfiletype(exarg_T *eap);
|
||||
#else
|
||||
# define ex_filetype ex_ni
|
||||
# define ex_setfiletype ex_ni
|
||||
#endif
|
||||
#ifndef FEAT_DIFF
|
||||
# define ex_diffoff ex_ni
|
||||
# define ex_diffpatch ex_ni
|
||||
|
@ -407,7 +400,7 @@ static void ex_setfiletype(exarg_T *eap);
|
|||
#endif
|
||||
static void ex_digraphs(exarg_T *eap);
|
||||
static void ex_set(exarg_T *eap);
|
||||
#if !defined(FEAT_EVAL) || !defined(FEAT_AUTOCMD)
|
||||
#if !defined(FEAT_EVAL)
|
||||
# define ex_options ex_ni
|
||||
#endif
|
||||
#ifdef FEAT_SEARCH_EXTRA
|
||||
|
@ -1761,11 +1754,8 @@ do_one_cmd(
|
|||
/* avoid that a function call in 'statusline' does this */
|
||||
&& !getline_equal(fgetline, cookie, get_func_line)
|
||||
#endif
|
||||
#ifdef FEAT_AUTOCMD
|
||||
/* avoid that an autocommand, e.g. QuitPre, does this */
|
||||
&& !getline_equal(fgetline, cookie, getnextac)
|
||||
#endif
|
||||
)
|
||||
&& !getline_equal(fgetline, cookie, getnextac))
|
||||
--quitmore;
|
||||
|
||||
/*
|
||||
|
@ -1912,7 +1902,6 @@ do_one_cmd(
|
|||
|
||||
case 'n': if (checkforcmd(&ea.cmd, "noautocmd", 3))
|
||||
{
|
||||
#ifdef FEAT_AUTOCMD
|
||||
if (cmdmod.save_ei == NULL)
|
||||
{
|
||||
/* Set 'eventignore' to "all". Restore the
|
||||
|
@ -1921,7 +1910,6 @@ do_one_cmd(
|
|||
set_string_option_direct((char_u *)"ei", -1,
|
||||
(char_u *)"all", OPT_FREE, SID_NONE);
|
||||
}
|
||||
#endif
|
||||
continue;
|
||||
}
|
||||
if (!checkforcmd(&ea.cmd, "noswapfile", 3))
|
||||
|
@ -2302,7 +2290,6 @@ do_one_cmd(
|
|||
goto doend;
|
||||
}
|
||||
|
||||
#ifdef FEAT_AUTOCMD
|
||||
/* If this looks like an undefined user command and there are CmdUndefined
|
||||
* autocommands defined, trigger the matching autocommands. */
|
||||
if (p != NULL && ea.cmdidx == CMD_SIZE && !ea.skip
|
||||
|
@ -2319,9 +2306,12 @@ do_one_cmd(
|
|||
vim_free(p);
|
||||
/* If the autocommands did something and didn't cause an error, try
|
||||
* finding the command again. */
|
||||
p = (ret && !aborting()) ? find_command(&ea, NULL) : ea.cmd;
|
||||
}
|
||||
p = (ret
|
||||
#ifdef FEAT_EVAL
|
||||
&& !aborting()
|
||||
#endif
|
||||
) ? find_command(&ea, NULL) : ea.cmd;
|
||||
}
|
||||
|
||||
#ifdef FEAT_USR_CMDS
|
||||
if (p == NULL)
|
||||
|
@ -2421,7 +2411,6 @@ do_one_cmd(
|
|||
errormsg = (char_u *)_(get_text_locked_msg());
|
||||
goto doend;
|
||||
}
|
||||
#ifdef FEAT_AUTOCMD
|
||||
/* Disallow editing another buffer when "curbuf_lock" is set.
|
||||
* Do allow ":edit" (check for argument later).
|
||||
* Do allow ":checktime" (it's postponed). */
|
||||
|
@ -2431,7 +2420,6 @@ do_one_cmd(
|
|||
&& !IS_USER_CMDIDX(ea.cmdidx)
|
||||
&& curbuf_locked())
|
||||
goto doend;
|
||||
#endif
|
||||
|
||||
if (!ni && !(ea.argt & RANGE) && ea.addr_count > 0)
|
||||
{
|
||||
|
@ -2971,7 +2959,7 @@ doend:
|
|||
|
||||
if (verbose_save >= 0)
|
||||
p_verbose = verbose_save;
|
||||
#ifdef FEAT_AUTOCMD
|
||||
|
||||
if (cmdmod.save_ei != NULL)
|
||||
{
|
||||
/* Restore 'eventignore' to the value before ":noautocmd". */
|
||||
|
@ -2979,7 +2967,7 @@ doend:
|
|||
OPT_FREE, SID_NONE);
|
||||
free_string_option(cmdmod.save_ei);
|
||||
}
|
||||
#endif
|
||||
|
||||
if (cmdmod.filter_regmatch.regprog != NULL)
|
||||
vim_regfree(cmdmod.filter_regmatch.regprog);
|
||||
|
||||
|
@ -4025,14 +4013,12 @@ set_one_cmd_context(
|
|||
}
|
||||
}
|
||||
break;
|
||||
#ifdef FEAT_AUTOCMD
|
||||
|
||||
case CMD_autocmd:
|
||||
return set_context_in_autocmd(xp, arg, FALSE);
|
||||
|
||||
case CMD_doautocmd:
|
||||
case CMD_doautoall:
|
||||
return set_context_in_autocmd(xp, arg, TRUE);
|
||||
#endif
|
||||
case CMD_set:
|
||||
set_context_in_set_cmd(xp, arg, 0);
|
||||
break;
|
||||
|
@ -5500,7 +5486,6 @@ ex_abclear(exarg_T *eap)
|
|||
map_clear(eap->cmd, eap->arg, TRUE, TRUE);
|
||||
}
|
||||
|
||||
#if defined(FEAT_AUTOCMD) || defined(PROTO)
|
||||
static void
|
||||
ex_autocmd(exarg_T *eap)
|
||||
{
|
||||
|
@ -5534,7 +5519,6 @@ ex_doautocmd(exarg_T *eap)
|
|||
if (call_do_modelines && did_aucmd)
|
||||
do_modelines(0);
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef FEAT_LISTCMDS
|
||||
/*
|
||||
|
@ -7234,7 +7218,6 @@ ex_quit(exarg_T *eap)
|
|||
else
|
||||
wp = curwin;
|
||||
|
||||
#ifdef FEAT_AUTOCMD
|
||||
/* Refuse to quit when locked. */
|
||||
if (curbuf_locked())
|
||||
return;
|
||||
|
@ -7245,7 +7228,6 @@ ex_quit(exarg_T *eap)
|
|||
if (!win_valid(wp)
|
||||
|| (wp->w_buffer->b_nwindows == 1 && wp->w_buffer->b_locked > 0))
|
||||
return;
|
||||
#endif
|
||||
|
||||
#ifdef FEAT_NETBEANS_INTG
|
||||
netbeansForcedQuit = eap->forceit;
|
||||
|
@ -7318,13 +7300,11 @@ ex_quit_all(exarg_T *eap)
|
|||
text_locked_msg();
|
||||
return;
|
||||
}
|
||||
#ifdef FEAT_AUTOCMD
|
||||
apply_autocmds(EVENT_QUITPRE, NULL, NULL, FALSE, curbuf);
|
||||
/* Refuse to quit when locked or when the buffer in the last window is
|
||||
* being closed (can only happen in autocommands). */
|
||||
if (curbuf_locked() || (curbuf->b_nwindows == 1 && curbuf->b_locked > 0))
|
||||
return;
|
||||
#endif
|
||||
|
||||
exiting = TRUE;
|
||||
if (eap->forceit || !check_changed_any(FALSE, FALSE))
|
||||
|
@ -7345,11 +7325,7 @@ ex_close(exarg_T *eap)
|
|||
cmdwin_result = Ctrl_C;
|
||||
else
|
||||
#endif
|
||||
if (!text_locked()
|
||||
#ifdef FEAT_AUTOCMD
|
||||
&& !curbuf_locked()
|
||||
#endif
|
||||
)
|
||||
if (!text_locked() && !curbuf_locked())
|
||||
{
|
||||
if (eap->addr_count == 0)
|
||||
ex_win_close(eap->forceit, curwin, NULL);
|
||||
|
@ -7565,11 +7541,7 @@ ex_tabclose(exarg_T *eap)
|
|||
tabpage_close_other(tp, eap->forceit);
|
||||
return;
|
||||
}
|
||||
else if (!text_locked()
|
||||
#ifdef FEAT_AUTOCMD
|
||||
&& !curbuf_locked()
|
||||
#endif
|
||||
)
|
||||
else if (!text_locked() && !curbuf_locked())
|
||||
tabpage_close(eap->forceit);
|
||||
}
|
||||
}
|
||||
|
@ -7662,9 +7634,7 @@ tabpage_close_other(tabpage_T *tp, int forceit)
|
|||
break;
|
||||
}
|
||||
|
||||
#ifdef FEAT_AUTOCMD
|
||||
apply_autocmds(EVENT_TABCLOSED, NULL, NULL, FALSE, curbuf);
|
||||
#endif
|
||||
|
||||
redraw_tabline = TRUE;
|
||||
if (h != tabline_height())
|
||||
|
@ -7790,13 +7760,11 @@ ex_exit(exarg_T *eap)
|
|||
text_locked_msg();
|
||||
return;
|
||||
}
|
||||
#ifdef FEAT_AUTOCMD
|
||||
apply_autocmds(EVENT_QUITPRE, NULL, NULL, FALSE, curbuf);
|
||||
/* Refuse to quit when locked or when the buffer in the last window is
|
||||
* being closed (can only happen in autocommands). */
|
||||
if (curbuf_locked() || (curbuf->b_nwindows == 1 && curbuf->b_locked > 0))
|
||||
return;
|
||||
#endif
|
||||
|
||||
/*
|
||||
* if more files or windows we won't exit
|
||||
|
@ -7901,10 +7869,9 @@ handle_drop(
|
|||
/* Postpone this while editing the command line. */
|
||||
if (text_locked())
|
||||
return;
|
||||
#ifdef FEAT_AUTOCMD
|
||||
if (curbuf_locked())
|
||||
return;
|
||||
#endif
|
||||
|
||||
/* When the screen is being updated we should not change buffers and
|
||||
* windows structures, it may cause freed memory to be used. */
|
||||
if (updating_screen)
|
||||
|
@ -8072,9 +8039,7 @@ alist_set(
|
|||
|
||||
if (recursive)
|
||||
{
|
||||
#ifdef FEAT_AUTOCMD
|
||||
EMSG(_(e_au_recursive));
|
||||
#endif
|
||||
return;
|
||||
}
|
||||
++recursive;
|
||||
|
@ -8251,11 +8216,10 @@ ex_splitview(exarg_T *eap)
|
|||
&& eap->cmdidx != CMD_vnew
|
||||
&& eap->cmdidx != CMD_new)
|
||||
{
|
||||
# ifdef FEAT_AUTOCMD
|
||||
if (
|
||||
# ifdef FEAT_GUI
|
||||
# ifdef FEAT_GUI
|
||||
!gui.in_use &&
|
||||
# endif
|
||||
# endif
|
||||
au_has_group((char_u *)"FileExplorer"))
|
||||
{
|
||||
/* No browsing supported but we do have the file explorer:
|
||||
|
@ -8264,7 +8228,6 @@ ex_splitview(exarg_T *eap)
|
|||
eap->arg = (char_u *)".";
|
||||
}
|
||||
else
|
||||
# endif
|
||||
{
|
||||
fname = do_browse(0, (char_u *)_("Edit File in new window"),
|
||||
eap->arg, NULL, NULL, NULL, curbuf);
|
||||
|
@ -8668,12 +8631,11 @@ do_exedit(
|
|||
#endif
|
||||
)
|
||||
{
|
||||
#ifdef FEAT_AUTOCMD
|
||||
/* Can't edit another file when "curbuf_lock" is set. Only ":edit"
|
||||
* can bring us here, others are stopped earlier. */
|
||||
if (*eap->arg != NUL && curbuf_locked())
|
||||
return;
|
||||
#endif
|
||||
|
||||
n = readonlymode;
|
||||
if (eap->cmdidx == CMD_view || eap->cmdidx == CMD_sview)
|
||||
readonlymode = TRUE;
|
||||
|
@ -8702,7 +8664,7 @@ do_exedit(
|
|||
need_hide = (curbufIsChanged() && curbuf->b_nwindows <= 1);
|
||||
if (!need_hide || buf_hide(curbuf))
|
||||
{
|
||||
#if defined(FEAT_AUTOCMD) && defined(FEAT_EVAL)
|
||||
#if defined(FEAT_EVAL)
|
||||
cleanup_T cs;
|
||||
|
||||
/* Reset the error/interrupt/exception state here so that
|
||||
|
@ -8714,7 +8676,7 @@ do_exedit(
|
|||
#endif
|
||||
win_close(curwin, !need_hide && !buf_hide(curbuf));
|
||||
|
||||
#if defined(FEAT_AUTOCMD) && defined(FEAT_EVAL)
|
||||
#if defined(FEAT_EVAL)
|
||||
/* Restore the error/interrupt/exception state if not
|
||||
* discarded by a new aborting error, interrupt, or
|
||||
* uncaught exception. */
|
||||
|
@ -8927,7 +8889,7 @@ ex_read(exarg_T *eap)
|
|||
}
|
||||
if (i != OK)
|
||||
{
|
||||
#if defined(FEAT_AUTOCMD) && defined(FEAT_EVAL)
|
||||
#if defined(FEAT_EVAL)
|
||||
if (!aborting())
|
||||
#endif
|
||||
EMSG2(_(e_notopen), eap->arg);
|
||||
|
@ -9013,10 +8975,8 @@ ex_cd(exarg_T *eap)
|
|||
else
|
||||
#endif
|
||||
{
|
||||
#ifdef FEAT_AUTOCMD
|
||||
if (allbuf_locked())
|
||||
return;
|
||||
#endif
|
||||
if (vim_strchr(p_cpo, CPO_CHDIR) != NULL && curbufIsChanged()
|
||||
&& !eap->forceit)
|
||||
{
|
||||
|
@ -9073,11 +9033,9 @@ ex_cd(exarg_T *eap)
|
|||
/* Echo the new current directory if the command was typed. */
|
||||
if (KeyTyped || p_verbose >= 5)
|
||||
ex_pwd(eap);
|
||||
#ifdef FEAT_AUTOCMD
|
||||
apply_autocmds(EVENT_DIRCHANGED,
|
||||
is_local_chdir ? (char_u *)"window" : (char_u *)"global",
|
||||
new_dir, FALSE, curbuf);
|
||||
#endif
|
||||
}
|
||||
vim_free(tofree);
|
||||
}
|
||||
|
@ -10588,21 +10546,15 @@ find_cmdline_var(char_u *src, int *usedlen)
|
|||
#define SPEC_SFILE (SPEC_CFILE + 1)
|
||||
"<slnum>", /* ":so" file line number */
|
||||
#define SPEC_SLNUM (SPEC_SFILE + 1)
|
||||
#ifdef FEAT_AUTOCMD
|
||||
"<afile>", /* autocommand file name */
|
||||
# define SPEC_AFILE (SPEC_SLNUM + 1)
|
||||
#define SPEC_AFILE (SPEC_SLNUM + 1)
|
||||
"<abuf>", /* autocommand buffer number */
|
||||
# define SPEC_ABUF (SPEC_AFILE + 1)
|
||||
#define SPEC_ABUF (SPEC_AFILE + 1)
|
||||
"<amatch>", /* autocommand match name */
|
||||
# define SPEC_AMATCH (SPEC_ABUF + 1)
|
||||
#endif
|
||||
#define SPEC_AMATCH (SPEC_ABUF + 1)
|
||||
#ifdef FEAT_CLIENTSERVER
|
||||
"<client>"
|
||||
# ifdef FEAT_AUTOCMD
|
||||
# define SPEC_CLIENT (SPEC_AMATCH + 1)
|
||||
# else
|
||||
# define SPEC_CLIENT (SPEC_SLNUM + 1)
|
||||
# endif
|
||||
# define SPEC_CLIENT (SPEC_AMATCH + 1)
|
||||
#endif
|
||||
};
|
||||
|
||||
|
@ -10801,7 +10753,6 @@ eval_vars(
|
|||
break;
|
||||
#endif
|
||||
|
||||
#ifdef FEAT_AUTOCMD
|
||||
case SPEC_AFILE: /* file name for autocommand */
|
||||
result = autocmd_fname;
|
||||
if (result != NULL && !autocmd_fname_full)
|
||||
|
@ -10840,7 +10791,6 @@ eval_vars(
|
|||
}
|
||||
break;
|
||||
|
||||
#endif
|
||||
case SPEC_SFILE: /* file name for ":so" command */
|
||||
result = sourcing_name;
|
||||
if (result == NULL)
|
||||
|
@ -10976,7 +10926,6 @@ arg_all(void)
|
|||
return retval;
|
||||
}
|
||||
|
||||
#if defined(FEAT_AUTOCMD) || defined(PROTO)
|
||||
/*
|
||||
* Expand the <sfile> string in "arg".
|
||||
*
|
||||
|
@ -11038,7 +10987,6 @@ expand_sfile(char_u *arg)
|
|||
|
||||
return result;
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef FEAT_SESSION
|
||||
static int ses_winsizes(FILE *fd, int restore_size,
|
||||
|
@ -12070,7 +12018,6 @@ get_mapclear_arg(expand_T *xp UNUSED, int idx)
|
|||
return NULL;
|
||||
}
|
||||
|
||||
#ifdef FEAT_AUTOCMD
|
||||
static int filetype_detect = FALSE;
|
||||
static int filetype_plugin = FALSE;
|
||||
static int filetype_indent = FALSE;
|
||||
|
@ -12184,7 +12131,6 @@ ex_setfiletype(exarg_T *eap)
|
|||
did_filetype = FALSE;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
static void
|
||||
ex_digraphs(exarg_T *eap UNUSED)
|
||||
|
@ -12208,7 +12154,7 @@ ex_set(exarg_T *eap)
|
|||
flags = OPT_LOCAL;
|
||||
else if (eap->cmdidx == CMD_setglobal)
|
||||
flags = OPT_GLOBAL;
|
||||
#if defined(FEAT_EVAL) && defined(FEAT_AUTOCMD) && defined(FEAT_BROWSE)
|
||||
#if defined(FEAT_EVAL) && defined(FEAT_BROWSE)
|
||||
if (cmdmod.browse && flags == 0)
|
||||
ex_options(eap);
|
||||
else
|
||||
|
|
|
@ -146,7 +146,6 @@ static void set_search_match(pos_T *t);
|
|||
#endif
|
||||
|
||||
|
||||
#ifdef FEAT_AUTOCMD
|
||||
static void
|
||||
trigger_cmd_autocmd(int typechar, int evt)
|
||||
{
|
||||
|
@ -156,7 +155,6 @@ trigger_cmd_autocmd(int typechar, int evt)
|
|||
typestr[1] = NUL;
|
||||
apply_autocmds(evt, typestr, typestr, FALSE, curbuf);
|
||||
}
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Abandon the command line.
|
||||
|
@ -266,9 +264,7 @@ getcmdline(
|
|||
* custom status line may invoke ":normal". */
|
||||
struct cmdline_info save_ccline;
|
||||
#endif
|
||||
#ifdef FEAT_AUTOCMD
|
||||
int cmdline_type;
|
||||
#endif
|
||||
|
||||
#ifdef FEAT_EVAL
|
||||
if (firstc == -1)
|
||||
|
@ -376,11 +372,11 @@ getcmdline(
|
|||
b_im_ptr = &curbuf->b_p_imsearch;
|
||||
if (*b_im_ptr == B_IMODE_LMAP)
|
||||
State |= LANGMAP;
|
||||
#ifdef FEAT_MBYTE
|
||||
#ifdef HAVE_INPUT_METHOD
|
||||
im_set_active(*b_im_ptr == B_IMODE_IM);
|
||||
#endif
|
||||
}
|
||||
#ifdef FEAT_MBYTE
|
||||
#ifdef HAVE_INPUT_METHOD
|
||||
else if (p_imcmdline)
|
||||
im_set_active(TRUE);
|
||||
#endif
|
||||
|
@ -396,11 +392,9 @@ getcmdline(
|
|||
* terminal mode set to cooked. Need to set raw mode here then. */
|
||||
settmode(TMODE_RAW);
|
||||
|
||||
#ifdef FEAT_AUTOCMD
|
||||
/* Trigger CmdlineEnter autocommands. */
|
||||
cmdline_type = firstc == NUL ? '-' : firstc;
|
||||
trigger_cmd_autocmd(cmdline_type, EVENT_CMDLINEENTER);
|
||||
#endif
|
||||
|
||||
#ifdef FEAT_CMDHIST
|
||||
init_history();
|
||||
|
@ -1132,7 +1126,7 @@ getcmdline(
|
|||
{
|
||||
/* ":lmap" mappings exists, toggle use of mappings. */
|
||||
State ^= LANGMAP;
|
||||
#ifdef FEAT_MBYTE
|
||||
#ifdef HAVE_INPUT_METHOD
|
||||
im_set_active(FALSE); /* Disable input method */
|
||||
#endif
|
||||
if (b_im_ptr != NULL)
|
||||
|
@ -1143,7 +1137,7 @@ getcmdline(
|
|||
*b_im_ptr = B_IMODE_NONE;
|
||||
}
|
||||
}
|
||||
#ifdef FEAT_MBYTE
|
||||
#ifdef HAVE_INPUT_METHOD
|
||||
else
|
||||
{
|
||||
/* There are no ":lmap" mappings, toggle IM. When
|
||||
|
@ -1946,10 +1940,8 @@ cmdline_not_changed:
|
|||
#endif
|
||||
|
||||
cmdline_changed:
|
||||
#ifdef FEAT_AUTOCMD
|
||||
/* Trigger CmdlineChanged autocommands. */
|
||||
trigger_cmd_autocmd(cmdline_type, EVENT_CMDLINECHANGED);
|
||||
#endif
|
||||
|
||||
#ifdef FEAT_SEARCH_EXTRA
|
||||
/*
|
||||
|
@ -2160,13 +2152,11 @@ returncmd:
|
|||
if (some_key_typed)
|
||||
need_wait_return = FALSE;
|
||||
|
||||
#ifdef FEAT_AUTOCMD
|
||||
/* Trigger CmdlineLeave autocommands. */
|
||||
trigger_cmd_autocmd(cmdline_type, EVENT_CMDLINELEAVE);
|
||||
#endif
|
||||
|
||||
State = save_State;
|
||||
#ifdef FEAT_MBYTE
|
||||
#ifdef HAVE_INPUT_METHOD
|
||||
if (b_im_ptr != NULL && *b_im_ptr != B_IMODE_LMAP)
|
||||
im_save_status(b_im_ptr);
|
||||
im_set_active(FALSE);
|
||||
|
@ -2266,7 +2256,6 @@ get_text_locked_msg(void)
|
|||
return e_secure;
|
||||
}
|
||||
|
||||
#if defined(FEAT_AUTOCMD) || defined(PROTO)
|
||||
/*
|
||||
* Check if "curbuf_lock" or "allbuf_lock" is set and return TRUE when it is
|
||||
* and give an error message.
|
||||
|
@ -2296,7 +2285,6 @@ allbuf_locked(void)
|
|||
}
|
||||
return FALSE;
|
||||
}
|
||||
#endif
|
||||
|
||||
static int
|
||||
cmdline_charsize(int idx)
|
||||
|
@ -4983,10 +4971,8 @@ ExpandFromContext(
|
|||
{EXPAND_SYNTIME, get_syntime_arg, TRUE, TRUE},
|
||||
#endif
|
||||
{EXPAND_HIGHLIGHT, get_highlight_name, TRUE, TRUE},
|
||||
#ifdef FEAT_AUTOCMD
|
||||
{EXPAND_EVENTS, get_event_name, TRUE, TRUE},
|
||||
{EXPAND_AUGROUP, get_augroup_name, TRUE, TRUE},
|
||||
#endif
|
||||
#ifdef FEAT_CSCOPE
|
||||
{EXPAND_CSCOPE, get_cscope_name, TRUE, TRUE},
|
||||
#endif
|
||||
|
@ -6930,10 +6916,9 @@ open_cmdwin(void)
|
|||
/* Save current window sizes. */
|
||||
win_size_save(&winsizes);
|
||||
|
||||
# ifdef FEAT_AUTOCMD
|
||||
/* Don't execute autocommands while creating the window. */
|
||||
block_autocmds();
|
||||
# endif
|
||||
|
||||
/* don't use a new tab page */
|
||||
cmdmod.tab = 0;
|
||||
cmdmod.noswapfile = 1;
|
||||
|
@ -6942,9 +6927,7 @@ open_cmdwin(void)
|
|||
if (win_split((int)p_cwh, WSP_BOT) == FAIL)
|
||||
{
|
||||
beep_flush();
|
||||
# ifdef FEAT_AUTOCMD
|
||||
unblock_autocmds();
|
||||
# endif
|
||||
return K_IGNORE;
|
||||
}
|
||||
cmdwin_type = get_cmdline_type();
|
||||
|
@ -6963,12 +6946,10 @@ open_cmdwin(void)
|
|||
# endif
|
||||
RESET_BINDING(curwin);
|
||||
|
||||
# ifdef FEAT_AUTOCMD
|
||||
/* Do execute autocommands for setting the filetype (load syntax). */
|
||||
unblock_autocmds();
|
||||
/* But don't allow switching to another buffer. */
|
||||
++curbuf_lock;
|
||||
# endif
|
||||
|
||||
/* Showing the prompt may have set need_wait_return, reset it. */
|
||||
need_wait_return = FALSE;
|
||||
|
@ -6983,9 +6964,7 @@ open_cmdwin(void)
|
|||
}
|
||||
set_option_value((char_u *)"ft", 0L, (char_u *)"vim", OPT_LOCAL);
|
||||
}
|
||||
# ifdef FEAT_AUTOCMD
|
||||
--curbuf_lock;
|
||||
# endif
|
||||
|
||||
/* Reset 'textwidth' after setting 'filetype' (the Vim filetype plugin
|
||||
* sets 'textwidth' to 78). */
|
||||
|
@ -7031,12 +7010,10 @@ open_cmdwin(void)
|
|||
setmouse();
|
||||
# endif
|
||||
|
||||
# ifdef FEAT_AUTOCMD
|
||||
/* Trigger CmdwinEnter autocommands. */
|
||||
trigger_cmd_autocmd(cmdwin_type, EVENT_CMDWINENTER);
|
||||
if (restart_edit != 0) /* autocmd with ":startinsert" */
|
||||
stuffcharReadbuff(K_NOP);
|
||||
# endif
|
||||
|
||||
i = RedrawingDisabled;
|
||||
RedrawingDisabled = 0;
|
||||
|
@ -7049,20 +7026,16 @@ open_cmdwin(void)
|
|||
|
||||
RedrawingDisabled = i;
|
||||
|
||||
# ifdef FEAT_AUTOCMD
|
||||
|
||||
# ifdef FEAT_FOLDING
|
||||
# ifdef FEAT_FOLDING
|
||||
save_KeyTyped = KeyTyped;
|
||||
# endif
|
||||
# endif
|
||||
|
||||
/* Trigger CmdwinLeave autocommands. */
|
||||
trigger_cmd_autocmd(cmdwin_type, EVENT_CMDWINLEAVE);
|
||||
|
||||
# ifdef FEAT_FOLDING
|
||||
# ifdef FEAT_FOLDING
|
||||
/* Restore KeyTyped in case it is modified by autocommands */
|
||||
KeyTyped = save_KeyTyped;
|
||||
# endif
|
||||
|
||||
# endif
|
||||
|
||||
/* Restore the command line info. */
|
||||
|
@ -7080,7 +7053,7 @@ open_cmdwin(void)
|
|||
}
|
||||
else
|
||||
{
|
||||
# if defined(FEAT_AUTOCMD) && defined(FEAT_EVAL)
|
||||
# if defined(FEAT_EVAL)
|
||||
/* autocmds may abort script processing */
|
||||
if (aborting() && cmdwin_result != K_IGNORE)
|
||||
cmdwin_result = Ctrl_C;
|
||||
|
@ -7141,10 +7114,8 @@ open_cmdwin(void)
|
|||
}
|
||||
}
|
||||
|
||||
# ifdef FEAT_AUTOCMD
|
||||
/* Don't execute autocommands while deleting the window. */
|
||||
block_autocmds();
|
||||
# endif
|
||||
# ifdef FEAT_CONCEAL
|
||||
/* Avoid command-line window first character being concealed. */
|
||||
curwin->w_p_cole = 0;
|
||||
|
@ -7162,9 +7133,7 @@ open_cmdwin(void)
|
|||
/* Restore window sizes. */
|
||||
win_size_restore(&winsizes);
|
||||
|
||||
# ifdef FEAT_AUTOCMD
|
||||
unblock_autocmds();
|
||||
# endif
|
||||
}
|
||||
|
||||
ga_clear(&winsizes);
|
||||
|
|
|
@ -439,18 +439,11 @@
|
|||
# define FEAT_MODIFY_FNAME
|
||||
#endif
|
||||
|
||||
/*
|
||||
* +autocmd ":autocmd" command
|
||||
*/
|
||||
#ifdef FEAT_NORMAL
|
||||
# define FEAT_AUTOCMD
|
||||
#endif
|
||||
|
||||
/*
|
||||
* +diff Displaying diffs in a nice way.
|
||||
* Requires +windows and +autocmd.
|
||||
*/
|
||||
#if defined(FEAT_NORMAL) && defined(FEAT_AUTOCMD)
|
||||
#if defined(FEAT_NORMAL)
|
||||
# define FEAT_DIFF
|
||||
#endif
|
||||
|
||||
|
|
143
src/fileio.c
143
src/fileio.c
|
@ -47,14 +47,12 @@ static int msg_add_fileformat(int eol_type);
|
|||
static void msg_add_eol(void);
|
||||
static int check_mtime(buf_T *buf, stat_T *s);
|
||||
static int time_differs(long t1, long t2);
|
||||
#ifdef FEAT_AUTOCMD
|
||||
static int apply_autocmds_exarg(event_T event, char_u *fname, char_u *fname_io, int force, buf_T *buf, exarg_T *eap);
|
||||
static int au_find_group(char_u *name);
|
||||
|
||||
# define AUGROUP_DEFAULT -1 /* default autocmd group */
|
||||
# define AUGROUP_ERROR -2 /* erroneous autocmd group */
|
||||
# define AUGROUP_ALL -3 /* all autocmd groups */
|
||||
#endif
|
||||
|
||||
#if defined(FEAT_CRYPT) || defined(FEAT_MBYTE)
|
||||
# define HAS_BW_FLAGS
|
||||
|
@ -135,11 +133,8 @@ static int move_lines(buf_T *frombuf, buf_T *tobuf);
|
|||
#ifdef TEMPDIRNAMES
|
||||
static void vim_settempdir(char_u *tempdir);
|
||||
#endif
|
||||
#ifdef FEAT_AUTOCMD
|
||||
static char *e_auchangedbuf = N_("E812: Autocommands changed buffer or buffer name");
|
||||
#endif
|
||||
|
||||
#ifdef FEAT_AUTOCMD
|
||||
/*
|
||||
* Set by the apply_autocmds_group function if the given event is equal to
|
||||
* EVENT_FILETYPE. Used by the readfile function in order to determine if
|
||||
|
@ -149,7 +144,6 @@ static char *e_auchangedbuf = N_("E812: Autocommands changed buffer or buffer na
|
|||
* apply_autocmds_group.
|
||||
*/
|
||||
static int au_did_filetype INIT(= FALSE);
|
||||
#endif
|
||||
|
||||
void
|
||||
filemess(
|
||||
|
@ -307,17 +301,13 @@ readfile(
|
|||
char_u conv_rest[CONV_RESTLEN];
|
||||
int conv_restlen = 0; /* nr of bytes in conv_rest[] */
|
||||
#endif
|
||||
#ifdef FEAT_AUTOCMD
|
||||
buf_T *old_curbuf;
|
||||
char_u *old_b_ffname;
|
||||
char_u *old_b_fname;
|
||||
int using_b_ffname;
|
||||
int using_b_fname;
|
||||
#endif
|
||||
|
||||
#ifdef FEAT_AUTOCMD
|
||||
au_did_filetype = FALSE; /* reset before triggering any autocommands */
|
||||
#endif
|
||||
|
||||
curbuf->b_no_eol_lnum = 0; /* in case it was set by the previous read */
|
||||
|
||||
|
@ -337,7 +327,6 @@ readfile(
|
|||
return FAIL;
|
||||
}
|
||||
|
||||
#ifdef FEAT_AUTOCMD
|
||||
/* Remember the initial values of curbuf, curbuf->b_ffname and
|
||||
* curbuf->b_fname to detect whether they are altered as a result of
|
||||
* executing nasty autocommands. Also check if "fname" and "sfname"
|
||||
|
@ -348,7 +337,6 @@ readfile(
|
|||
using_b_ffname = (fname == curbuf->b_ffname)
|
||||
|| (sfname == curbuf->b_ffname);
|
||||
using_b_fname = (fname == curbuf->b_fname) || (sfname == curbuf->b_fname);
|
||||
#endif
|
||||
|
||||
/* After reading a file the cursor line changes but we don't want to
|
||||
* display the line. */
|
||||
|
@ -369,7 +357,6 @@ readfile(
|
|||
fname = sfname;
|
||||
#endif
|
||||
|
||||
#ifdef FEAT_AUTOCMD
|
||||
/*
|
||||
* The BufReadCmd and FileReadCmd events intercept the reading process by
|
||||
* executing the associated commands instead.
|
||||
|
@ -404,7 +391,6 @@ readfile(
|
|||
|
||||
curbuf->b_op_start = pos;
|
||||
}
|
||||
#endif
|
||||
|
||||
if ((shortmess(SHM_OVER) || curbuf->b_help) && p_verbose == 0)
|
||||
msg_scroll = FALSE; /* overwrite previous file message */
|
||||
|
@ -613,7 +599,6 @@ readfile(
|
|||
#endif
|
||||
{
|
||||
check_need_swap(newfile);
|
||||
#ifdef FEAT_AUTOCMD
|
||||
/* SwapExists autocommand may mess things up */
|
||||
if (curbuf != old_curbuf
|
||||
|| (using_b_ffname
|
||||
|
@ -624,7 +609,6 @@ readfile(
|
|||
EMSG(_(e_auchangedbuf));
|
||||
return FAIL;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
if (dir_of_file_exists(fname))
|
||||
filemess(curbuf, sfname, (char_u *)_("[New File]"), 0);
|
||||
|
@ -641,14 +625,12 @@ readfile(
|
|||
if (eap != NULL)
|
||||
set_forced_fenc(eap);
|
||||
#endif
|
||||
#ifdef FEAT_AUTOCMD
|
||||
apply_autocmds_exarg(EVENT_BUFNEWFILE, sfname, sfname,
|
||||
FALSE, curbuf, eap);
|
||||
#endif
|
||||
/* remember the current fileformat */
|
||||
save_file_ff(curbuf);
|
||||
|
||||
#if defined(FEAT_AUTOCMD) && defined(FEAT_EVAL)
|
||||
#if defined(FEAT_EVAL)
|
||||
if (aborting()) /* autocmds may abort script processing */
|
||||
return FAIL;
|
||||
#endif
|
||||
|
@ -701,7 +683,6 @@ readfile(
|
|||
#endif
|
||||
{
|
||||
check_need_swap(newfile);
|
||||
#ifdef FEAT_AUTOCMD
|
||||
if (!read_stdin && (curbuf != old_curbuf
|
||||
|| (using_b_ffname && (old_b_ffname != curbuf->b_ffname))
|
||||
|| (using_b_fname && (old_b_fname != curbuf->b_fname))))
|
||||
|
@ -711,7 +692,6 @@ readfile(
|
|||
close(fd);
|
||||
return FAIL;
|
||||
}
|
||||
#endif
|
||||
#ifdef UNIX
|
||||
/* Set swap file protection bits after creating it. */
|
||||
if (swap_mode > 0 && curbuf->b_ml.ml_mfp != NULL
|
||||
|
@ -764,7 +744,6 @@ readfile(
|
|||
try_dos = (vim_strchr(p_ffs, 'd') != NULL);
|
||||
try_unix = (vim_strchr(p_ffs, 'x') != NULL);
|
||||
|
||||
#ifdef FEAT_AUTOCMD
|
||||
if (!read_buffer)
|
||||
{
|
||||
int m = msg_scroll;
|
||||
|
@ -834,7 +813,6 @@ readfile(
|
|||
return FAIL;
|
||||
}
|
||||
}
|
||||
#endif /* FEAT_AUTOCMD */
|
||||
|
||||
/* Autocommands may add lines to the file, need to check if it is empty */
|
||||
wasempty = (curbuf->b_ml.ml_flags & ML_EMPTY);
|
||||
|
@ -2704,7 +2682,6 @@ failed:
|
|||
}
|
||||
#endif
|
||||
|
||||
#ifdef FEAT_AUTOCMD
|
||||
if (!read_stdin && !read_fifo && (!read_buffer || sfname != NULL))
|
||||
{
|
||||
int m = msg_scroll;
|
||||
|
@ -2746,7 +2723,6 @@ failed:
|
|||
return FAIL;
|
||||
# endif
|
||||
}
|
||||
#endif
|
||||
|
||||
if (recoverymode && error)
|
||||
return FAIL;
|
||||
|
@ -3197,9 +3173,7 @@ buf_write(
|
|||
#endif
|
||||
/* writing everything */
|
||||
int whole = (start == 1 && end == buf->b_ml.ml_line_count);
|
||||
#ifdef FEAT_AUTOCMD
|
||||
linenr_T old_line_count = buf->b_ml.ml_line_count;
|
||||
#endif
|
||||
int attr;
|
||||
int fileformat;
|
||||
int write_bin;
|
||||
|
@ -3319,7 +3293,6 @@ buf_write(
|
|||
buf->b_op_end.lnum = end;
|
||||
buf->b_op_end.col = 0;
|
||||
|
||||
#ifdef FEAT_AUTOCMD
|
||||
{
|
||||
aco_save_T aco;
|
||||
int buf_ffname = FALSE;
|
||||
|
@ -3509,7 +3482,6 @@ buf_write(
|
|||
if (buf_fname_s)
|
||||
fname = buf->b_sfname;
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef FEAT_NETBEANS_INTG
|
||||
if (netbeans_active() && isNetbeansBuffer(buf))
|
||||
|
@ -5020,12 +4992,10 @@ restore_backup:
|
|||
)
|
||||
{
|
||||
unchanged(buf, TRUE);
|
||||
#ifdef FEAT_AUTOCMD
|
||||
/* b:changedtick is always incremented in unchanged() but that
|
||||
* should not trigger a TextChanged event. */
|
||||
if (buf->b_last_changedtick + 1 == CHANGEDTICK(buf))
|
||||
buf->b_last_changedtick = CHANGEDTICK(buf);
|
||||
#endif
|
||||
u_unchanged(buf);
|
||||
u_update_save_nr(buf);
|
||||
}
|
||||
|
@ -5194,7 +5164,6 @@ nofail:
|
|||
}
|
||||
#endif
|
||||
|
||||
#ifdef FEAT_AUTOCMD
|
||||
#ifdef FEAT_EVAL
|
||||
if (!should_abort(retval))
|
||||
#else
|
||||
|
@ -5232,7 +5201,6 @@ nofail:
|
|||
retval = FALSE;
|
||||
#endif
|
||||
}
|
||||
#endif
|
||||
|
||||
got_int |= prev_got_int;
|
||||
|
||||
|
@ -5246,37 +5214,34 @@ nofail:
|
|||
static int
|
||||
set_rw_fname(char_u *fname, char_u *sfname)
|
||||
{
|
||||
#ifdef FEAT_AUTOCMD
|
||||
buf_T *buf = curbuf;
|
||||
|
||||
/* It's like the unnamed buffer is deleted.... */
|
||||
if (curbuf->b_p_bl)
|
||||
apply_autocmds(EVENT_BUFDELETE, NULL, NULL, FALSE, curbuf);
|
||||
apply_autocmds(EVENT_BUFWIPEOUT, NULL, NULL, FALSE, curbuf);
|
||||
# ifdef FEAT_EVAL
|
||||
#ifdef FEAT_EVAL
|
||||
if (aborting()) /* autocmds may abort script processing */
|
||||
return FAIL;
|
||||
# endif
|
||||
#endif
|
||||
if (curbuf != buf)
|
||||
{
|
||||
/* We are in another buffer now, don't do the renaming. */
|
||||
EMSG(_(e_auchangedbuf));
|
||||
return FAIL;
|
||||
}
|
||||
#endif
|
||||
|
||||
if (setfname(curbuf, fname, sfname, FALSE) == OK)
|
||||
curbuf->b_flags |= BF_NOTEDITED;
|
||||
|
||||
#ifdef FEAT_AUTOCMD
|
||||
/* ....and a new named one is created */
|
||||
apply_autocmds(EVENT_BUFNEW, NULL, NULL, FALSE, curbuf);
|
||||
if (curbuf->b_p_bl)
|
||||
apply_autocmds(EVENT_BUFADD, NULL, NULL, FALSE, curbuf);
|
||||
# ifdef FEAT_EVAL
|
||||
#ifdef FEAT_EVAL
|
||||
if (aborting()) /* autocmds may abort script processing */
|
||||
return FAIL;
|
||||
# endif
|
||||
#endif
|
||||
|
||||
/* Do filetype detection now if 'filetype' is empty. */
|
||||
if (*curbuf->b_p_ft == NUL)
|
||||
|
@ -5285,7 +5250,6 @@ set_rw_fname(char_u *fname, char_u *sfname)
|
|||
(void)do_doautocmd((char_u *)"filetypedetect BufRead", FALSE, NULL);
|
||||
do_modelines(0);
|
||||
}
|
||||
#endif
|
||||
|
||||
return OK;
|
||||
}
|
||||
|
@ -6105,8 +6069,6 @@ make_bom(char_u *buf, char_u *name)
|
|||
}
|
||||
#endif
|
||||
|
||||
#if defined(FEAT_VIMINFO) || defined(FEAT_BROWSE) || \
|
||||
defined(FEAT_QUICKFIX) || defined(FEAT_AUTOCMD) || defined(PROTO)
|
||||
/*
|
||||
* Try to find a shortname by comparing the fullname with the current
|
||||
* directory.
|
||||
|
@ -6130,7 +6092,6 @@ shorten_fname1(char_u *full_path)
|
|||
vim_free(dirname);
|
||||
return p;
|
||||
}
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Try to find a shortname by comparing the fullname with the current
|
||||
|
@ -6781,10 +6742,7 @@ check_timestamps(
|
|||
}
|
||||
|
||||
if (!stuff_empty() || global_busy || !typebuf_typed()
|
||||
#ifdef FEAT_AUTOCMD
|
||||
|| autocmd_busy || curbuf_lock > 0 || allbuf_lock > 0
|
||||
#endif
|
||||
)
|
||||
|| autocmd_busy || curbuf_lock > 0 || allbuf_lock > 0)
|
||||
need_check_timestamps = TRUE; /* check later */
|
||||
else
|
||||
{
|
||||
|
@ -6898,14 +6856,14 @@ buf_check_timestamp(
|
|||
#ifdef FEAT_GUI
|
||||
int save_mouse_correct = need_mouse_correct;
|
||||
#endif
|
||||
#ifdef FEAT_AUTOCMD
|
||||
static int busy = FALSE;
|
||||
int n;
|
||||
#ifdef FEAT_EVAL
|
||||
char_u *s;
|
||||
#endif
|
||||
bufref_T bufref;
|
||||
|
||||
set_bufref(&bufref, buf);
|
||||
#endif
|
||||
|
||||
/* If there is no file name, the buffer is not loaded, 'buftype' is
|
||||
* set, we are in the middle of a save or being called recursively: ignore
|
||||
|
@ -6914,9 +6872,7 @@ buf_check_timestamp(
|
|||
|| buf->b_ml.ml_mfp == NULL
|
||||
|| *buf->b_p_bt != NUL
|
||||
|| buf->b_saving
|
||||
#ifdef FEAT_AUTOCMD
|
||||
|| busy
|
||||
#endif
|
||||
#ifdef FEAT_NETBEANS_INTG
|
||||
|| isNetbeansBuffer(buf)
|
||||
#endif
|
||||
|
@ -6977,17 +6933,16 @@ buf_check_timestamp(
|
|||
else
|
||||
reason = "time";
|
||||
|
||||
#ifdef FEAT_AUTOCMD
|
||||
/*
|
||||
* Only give the warning if there are no FileChangedShell
|
||||
* autocommands.
|
||||
* Avoid being called recursively by setting "busy".
|
||||
*/
|
||||
busy = TRUE;
|
||||
# ifdef FEAT_EVAL
|
||||
#ifdef FEAT_EVAL
|
||||
set_vim_var_string(VV_FCS_REASON, (char_u *)reason, -1);
|
||||
set_vim_var_string(VV_FCS_CHOICE, (char_u *)"", -1);
|
||||
# endif
|
||||
#endif
|
||||
++allbuf_lock;
|
||||
n = apply_autocmds(EVENT_FILECHANGEDSHELL,
|
||||
buf->b_fname, buf->b_fname, FALSE, buf);
|
||||
|
@ -6997,18 +6952,17 @@ buf_check_timestamp(
|
|||
{
|
||||
if (!bufref_valid(&bufref))
|
||||
EMSG(_("E246: FileChangedShell autocommand deleted buffer"));
|
||||
# ifdef FEAT_EVAL
|
||||
#ifdef FEAT_EVAL
|
||||
s = get_vim_var_str(VV_FCS_CHOICE);
|
||||
if (STRCMP(s, "reload") == 0 && *reason != 'd')
|
||||
reload = TRUE;
|
||||
else if (STRCMP(s, "ask") == 0)
|
||||
n = FALSE;
|
||||
else
|
||||
# endif
|
||||
#endif
|
||||
return 2;
|
||||
}
|
||||
if (!n)
|
||||
#endif
|
||||
{
|
||||
if (*reason == 'd')
|
||||
mesg = _("E211: File \"%s\" no longer available");
|
||||
|
@ -7100,9 +7054,7 @@ buf_check_timestamp(
|
|||
}
|
||||
else
|
||||
{
|
||||
# ifdef FEAT_AUTOCMD
|
||||
if (!autocmd_busy)
|
||||
# endif
|
||||
{
|
||||
msg_start();
|
||||
msg_puts_attr(tbuf, HL_ATTR(HLF_E) + MSG_HIST);
|
||||
|
@ -7114,9 +7066,9 @@ buf_check_timestamp(
|
|||
if (emsg_silent == 0)
|
||||
{
|
||||
out_flush();
|
||||
# ifdef FEAT_GUI
|
||||
#ifdef FEAT_GUI
|
||||
if (!focus)
|
||||
# endif
|
||||
#endif
|
||||
/* give the user some time to think about it */
|
||||
ui_delay(1000L, TRUE);
|
||||
|
||||
|
@ -7151,12 +7103,10 @@ buf_check_timestamp(
|
|||
#endif
|
||||
}
|
||||
|
||||
#ifdef FEAT_AUTOCMD
|
||||
/* Trigger FileChangedShell when the file was changed in any way. */
|
||||
if (bufref_valid(&bufref) && retval != 0)
|
||||
(void)apply_autocmds(EVENT_FILECHANGEDSHELLPOST,
|
||||
buf->b_fname, buf->b_fname, FALSE, buf);
|
||||
#endif
|
||||
#ifdef FEAT_GUI
|
||||
/* restore this in case an autocommand has set it; it would break
|
||||
* 'mousefocus' */
|
||||
|
@ -7240,14 +7190,12 @@ buf_reload(buf_T *buf, int orig_mode)
|
|||
if (saved == OK)
|
||||
{
|
||||
curbuf->b_flags |= BF_CHECK_RO; /* check for RO again */
|
||||
#ifdef FEAT_AUTOCMD
|
||||
keep_filetype = TRUE; /* don't detect 'filetype' */
|
||||
#endif
|
||||
if (readfile(buf->b_ffname, buf->b_fname, (linenr_T)0,
|
||||
(linenr_T)0,
|
||||
(linenr_T)MAXLNUM, &ea, flags) != OK)
|
||||
{
|
||||
#if defined(FEAT_AUTOCMD) && defined(FEAT_EVAL)
|
||||
#if defined(FEAT_EVAL)
|
||||
if (!aborting())
|
||||
#endif
|
||||
EMSG2(_("E321: Could not reload \"%s\""), buf->b_fname);
|
||||
|
@ -7296,9 +7244,7 @@ buf_reload(buf_T *buf, int orig_mode)
|
|||
curwin->w_cursor = old_cursor;
|
||||
check_cursor();
|
||||
update_topline();
|
||||
#ifdef FEAT_AUTOCMD
|
||||
keep_filetype = FALSE;
|
||||
#endif
|
||||
#ifdef FEAT_FOLDING
|
||||
{
|
||||
win_T *wp;
|
||||
|
@ -7672,12 +7618,8 @@ forward_slash(char_u *fname)
|
|||
|
||||
/*
|
||||
* Code for automatic commands.
|
||||
*
|
||||
* Only included when "FEAT_AUTOCMD" has been defined.
|
||||
*/
|
||||
|
||||
#if defined(FEAT_AUTOCMD) || defined(PROTO)
|
||||
|
||||
/*
|
||||
* The autocommands are stored in a list for each event.
|
||||
* Autocommands for the same pattern, that are consecutive, are joined
|
||||
|
@ -7914,9 +7856,7 @@ static int au_get_grouparg(char_u **argp);
|
|||
static int do_autocmd_event(event_T event, char_u *pat, int nested, char_u *cmd, int forceit, int group);
|
||||
static int apply_autocmds_group(event_T event, char_u *fname, char_u *fname_io, int force, int group, buf_T *buf, exarg_T *eap);
|
||||
static void auto_next_pat(AutoPatCmd *apc, int stop_at_last);
|
||||
#if defined(FEAT_AUTOCMD) || defined(FEAT_WILDIGN)
|
||||
static int match_file_pat(char_u *pattern, regprog_T **prog, char_u *fname, char_u *sfname, char_u *tail, int allow_dirs);
|
||||
#endif
|
||||
|
||||
|
||||
static event_T last_event;
|
||||
|
@ -9014,7 +8954,6 @@ check_nomodeline(char_u **argp)
|
|||
* Search for a visible window containing the current buffer. If there isn't
|
||||
* one then use "aucmd_win".
|
||||
* Set "curbuf" and "curwin" to match "buf".
|
||||
* When FEAT_AUTOCMD is not defined another version is used, see below.
|
||||
*/
|
||||
void
|
||||
aucmd_prepbuf(
|
||||
|
@ -9067,7 +9006,9 @@ aucmd_prepbuf(
|
|||
aco->use_aucmd_win = TRUE;
|
||||
aucmd_win_used = TRUE;
|
||||
aucmd_win->w_buffer = buf;
|
||||
#if defined(FEAT_SYN_HL) || defined(FEAT_SPELL)
|
||||
aucmd_win->w_s = &buf->b_s;
|
||||
#endif
|
||||
++buf->b_nwindows;
|
||||
win_init_empty(aucmd_win); /* set cursor and topline to safe values */
|
||||
|
||||
|
@ -9108,7 +9049,6 @@ aucmd_prepbuf(
|
|||
/*
|
||||
* Cleanup after executing autocommands for a (hidden) buffer.
|
||||
* Restore the window as it was (if possible).
|
||||
* When FEAT_AUTOCMD is not defined another version is used, see below.
|
||||
*/
|
||||
void
|
||||
aucmd_restbuf(
|
||||
|
@ -9406,13 +9346,13 @@ has_textyankpost(void)
|
|||
static int
|
||||
apply_autocmds_group(
|
||||
event_T event,
|
||||
char_u *fname, /* NULL or empty means use actual file name */
|
||||
char_u *fname_io, /* fname to use for <afile> on cmdline, NULL means
|
||||
char_u *fname, /* NULL or empty means use actual file name */
|
||||
char_u *fname_io, /* fname to use for <afile> on cmdline, NULL means
|
||||
use fname */
|
||||
int force, /* when TRUE, ignore autocmd_busy */
|
||||
int group, /* group ID, or AUGROUP_ALL */
|
||||
buf_T *buf, /* buffer for <abuf> */
|
||||
exarg_T *eap) /* command arguments */
|
||||
int force, /* when TRUE, ignore autocmd_busy */
|
||||
int group, /* group ID, or AUGROUP_ALL */
|
||||
buf_T *buf, /* buffer for <abuf> */
|
||||
exarg_T *eap UNUSED) /* command arguments */
|
||||
{
|
||||
char_u *sfname = NULL; /* short file name */
|
||||
char_u *tail;
|
||||
|
@ -10210,43 +10150,7 @@ theend:
|
|||
return retval;
|
||||
}
|
||||
|
||||
#else /* FEAT_AUTOCMD */
|
||||
|
||||
/*
|
||||
* Prepare for executing commands for (hidden) buffer "buf".
|
||||
* This is the non-autocommand version, it simply saves "curbuf" and sets
|
||||
* "curbuf" and "curwin" to match "buf".
|
||||
*/
|
||||
void
|
||||
aucmd_prepbuf(
|
||||
aco_save_T *aco, /* structure to save values in */
|
||||
buf_T *buf) /* new curbuf */
|
||||
{
|
||||
aco->save_curbuf = curbuf;
|
||||
--curbuf->b_nwindows;
|
||||
curbuf = buf;
|
||||
curwin->w_buffer = buf;
|
||||
++curbuf->b_nwindows;
|
||||
}
|
||||
|
||||
/*
|
||||
* Restore after executing commands for a (hidden) buffer.
|
||||
* This is the non-autocommand version.
|
||||
*/
|
||||
void
|
||||
aucmd_restbuf(
|
||||
aco_save_T *aco) /* structure holding saved values */
|
||||
{
|
||||
--curbuf->b_nwindows;
|
||||
curbuf = aco->save_curbuf;
|
||||
curwin->w_buffer = curbuf;
|
||||
++curbuf->b_nwindows;
|
||||
}
|
||||
|
||||
#endif /* FEAT_AUTOCMD */
|
||||
|
||||
|
||||
#if defined(FEAT_AUTOCMD) || defined(FEAT_WILDIGN) || defined(PROTO)
|
||||
/*
|
||||
* Try matching a filename with a "pattern" ("prog" is NULL), or use the
|
||||
* precompiled regprog "prog" ("pattern" is NULL). That avoids calling
|
||||
|
@ -10292,7 +10196,6 @@ match_file_pat(
|
|||
vim_regfree(regmatch.regprog);
|
||||
return result;
|
||||
}
|
||||
#endif
|
||||
|
||||
#if defined(FEAT_WILDIGN) || defined(PROTO)
|
||||
/*
|
||||
|
|
|
@ -516,7 +516,6 @@ CancelRedo(void)
|
|||
}
|
||||
}
|
||||
|
||||
#if defined(FEAT_AUTOCMD) || defined(FEAT_EVAL) || defined(PROTO)
|
||||
/*
|
||||
* Save redobuff and old_redobuff to save_redobuff and save_old_redobuff.
|
||||
* Used before executing autocommands and user functions.
|
||||
|
@ -552,7 +551,6 @@ restoreRedobuff(save_redo_T *save_redo)
|
|||
free_buff(&old_redobuff);
|
||||
old_redobuff = save_redo->sr_old_redobuff;
|
||||
}
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Append "s" to the redo buffer.
|
||||
|
@ -2891,7 +2889,7 @@ vgetorpeek(int advance)
|
|||
+ typebuf.tb_len] != NUL)
|
||||
typebuf.tb_noremap[typebuf.tb_off
|
||||
+ typebuf.tb_len++] = RM_YES;
|
||||
#ifdef FEAT_MBYTE
|
||||
#ifdef HAVE_INPUT_METHOD
|
||||
/* Get IM status right after getting keys, not after the
|
||||
* timeout for a mapping (focus may be lost by then). */
|
||||
vgetc_im_active = im_get_status();
|
||||
|
@ -3122,10 +3120,8 @@ fix_input_buffer(char_u *buf, int len)
|
|||
else
|
||||
#endif
|
||||
if (p[0] == NUL || (p[0] == K_SPECIAL
|
||||
#ifdef FEAT_AUTOCMD
|
||||
/* timeout may generate K_CURSORHOLD */
|
||||
&& (i < 2 || p[1] != KS_EXTRA || p[2] != (int)KE_CURSORHOLD)
|
||||
#endif
|
||||
#if defined(WIN3264) && !defined(FEAT_GUI)
|
||||
/* Win32 console passes modifiers */
|
||||
&& (i < 2 || p[1] != KS_MODIFIER)
|
||||
|
|
|
@ -385,7 +385,6 @@ EXTERN guicolor_T cterm_normal_bg_gui_color INIT(= INVALCOLOR);
|
|||
EXTERN int is_mac_terminal INIT(= FALSE); /* recognized Terminal.app */
|
||||
#endif
|
||||
|
||||
#ifdef FEAT_AUTOCMD
|
||||
EXTERN int autocmd_busy INIT(= FALSE); /* Is apply_autocmds() busy? */
|
||||
EXTERN int autocmd_no_enter INIT(= FALSE); /* *Enter autocmds disabled */
|
||||
EXTERN int autocmd_no_leave INIT(= FALSE); /* *Leave autocmds disabled */
|
||||
|
@ -405,7 +404,6 @@ EXTERN bufref_T au_new_curbuf INIT(= {NULL COMMA 0 COMMA 0});
|
|||
* Free the buffer/window when autocmd_busy is being set to FALSE. */
|
||||
EXTERN buf_T *au_pending_free_buf INIT(= NULL);
|
||||
EXTERN win_T *au_pending_free_win INIT(= NULL);
|
||||
#endif
|
||||
|
||||
#ifdef FEAT_MOUSE
|
||||
/*
|
||||
|
@ -572,10 +570,8 @@ EXTERN win_T *prevwin INIT(= NULL); /* previous window */
|
|||
|
||||
EXTERN win_T *curwin; /* currently active window */
|
||||
|
||||
#ifdef FEAT_AUTOCMD
|
||||
EXTERN win_T *aucmd_win; /* window used in aucmd_prepbuf() */
|
||||
EXTERN int aucmd_win_used INIT(= FALSE); /* aucmd_win is being used */
|
||||
#endif
|
||||
|
||||
/*
|
||||
* The window layout is kept in a tree of frames. topframe points to the top
|
||||
|
@ -639,6 +635,7 @@ EXTERN int exiting INIT(= FALSE);
|
|||
EXTERN int really_exiting INIT(= FALSE);
|
||||
/* TRUE when we are sure to exit, e.g., after
|
||||
* a deadly signal */
|
||||
EXTERN int v_dying INIT(= 0); /* internal value of v:dying */
|
||||
EXTERN int stdout_isatty INIT(= TRUE); /* is stdout a terminal? */
|
||||
|
||||
#if defined(FEAT_AUTOCHDIR)
|
||||
|
@ -664,7 +661,6 @@ EXTERN int textlock INIT(= 0);
|
|||
/* non-zero when changing text and jumping to
|
||||
* another window or buffer is not allowed */
|
||||
|
||||
#ifdef FEAT_AUTOCMD
|
||||
EXTERN int curbuf_lock INIT(= 0);
|
||||
/* non-zero when the current buffer can't be
|
||||
* changed. Used for FileChangedRO. */
|
||||
|
@ -673,7 +669,6 @@ EXTERN int allbuf_lock INIT(= 0);
|
|||
* changed, no buffer can be deleted and
|
||||
* current directory can't be changed.
|
||||
* Used for SwapExists et al. */
|
||||
#endif
|
||||
#ifdef FEAT_EVAL
|
||||
# define HAVE_SANDBOX
|
||||
EXTERN int sandbox INIT(= 0);
|
||||
|
@ -986,15 +981,12 @@ EXTERN int emsg_silent INIT(= 0); /* don't print error messages */
|
|||
EXTERN int emsg_noredir INIT(= 0); /* don't redirect error messages */
|
||||
EXTERN int cmd_silent INIT(= FALSE); /* don't echo the command line */
|
||||
|
||||
#if defined(FEAT_GUI_DIALOG) || defined(FEAT_CON_DIALOG) \
|
||||
|| defined(FEAT_AUTOCMD)
|
||||
# define HAS_SWAP_EXISTS_ACTION
|
||||
EXTERN int swap_exists_action INIT(= SEA_NONE);
|
||||
/* For dialog when swap file already
|
||||
* exists. */
|
||||
EXTERN int swap_exists_did_quit INIT(= FALSE);
|
||||
/* Selected "quit" at the dialog. */
|
||||
#endif
|
||||
|
||||
EXTERN char_u *IObuff; /* sprintf's are done in this buffer,
|
||||
size is IOSIZE */
|
||||
|
@ -1022,7 +1014,7 @@ EXTERN int stop_insert_mode; /* for ":stopinsert" and 'insertmode' */
|
|||
|
||||
EXTERN int KeyTyped; /* TRUE if user typed current char */
|
||||
EXTERN int KeyStuffed; /* TRUE if current char from stuffbuf */
|
||||
#ifdef FEAT_MBYTE
|
||||
#ifdef HAVE_INPUT_METHOD
|
||||
EXTERN int vgetc_im_active; /* Input Method was active for last
|
||||
character obtained from vgetc() */
|
||||
#endif
|
||||
|
@ -1075,7 +1067,6 @@ EXTERN char_u *repeat_cmdline INIT(= NULL); /* command line for "." */
|
|||
#ifdef FEAT_CMDHIST
|
||||
EXTERN char_u *new_last_cmdline INIT(= NULL); /* new value for last_cmdline */
|
||||
#endif
|
||||
#ifdef FEAT_AUTOCMD
|
||||
EXTERN char_u *autocmd_fname INIT(= NULL); /* fname for <afile> on cmdline */
|
||||
EXTERN int autocmd_fname_full; /* autocmd_fname is full path */
|
||||
EXTERN int autocmd_bufnr INIT(= 0); /* fnum for <abuf> on cmdline */
|
||||
|
@ -1086,7 +1077,6 @@ EXTERN pos_T last_cursormoved /* for CursorMoved event */
|
|||
= INIT_POS_T(0, 0, 0)
|
||||
# endif
|
||||
;
|
||||
#endif
|
||||
|
||||
EXTERN int postponed_split INIT(= 0); /* for CTRL-W CTRL-] command */
|
||||
EXTERN int postponed_split_flags INIT(= 0); /* args for win_split() */
|
||||
|
@ -1595,9 +1585,7 @@ EXTERN char_u e_notset[] INIT(= N_("E764: Option '%s' is not set"));
|
|||
EXTERN char_u e_invalidreg[] INIT(= N_("E850: Invalid register name"));
|
||||
#endif
|
||||
EXTERN char_u e_dirnotf[] INIT(= N_("E919: Directory not found in '%s': \"%s\""));
|
||||
#ifdef FEAT_AUTOCMD
|
||||
EXTERN char_u e_au_recursive[] INIT(= N_("E952: Autocommand caused recursive behavior"));
|
||||
#endif
|
||||
|
||||
#ifdef FEAT_GUI_MAC
|
||||
EXTERN short disallow_gui INIT(= FALSE);
|
||||
|
|
35
src/gui.c
35
src/gui.c
|
@ -132,13 +132,11 @@ gui_start(void)
|
|||
|
||||
vim_free(old_term);
|
||||
|
||||
#ifdef FEAT_AUTOCMD
|
||||
/* If the GUI started successfully, trigger the GUIEnter event, otherwise
|
||||
* the GUIFailed event. */
|
||||
gui_mch_update();
|
||||
apply_autocmds(gui.in_use ? EVENT_GUIENTER : EVENT_GUIFAILED,
|
||||
NULL, NULL, FALSE, curbuf);
|
||||
#endif
|
||||
--recursive;
|
||||
}
|
||||
|
||||
|
@ -2954,7 +2952,7 @@ gui_wait_for_chars_or_timer(long wtime)
|
|||
gui_wait_for_chars(long wtime, int tb_change_cnt)
|
||||
{
|
||||
int retval;
|
||||
#if defined(ELAPSED_FUNC) && defined(FEAT_AUTOCMD)
|
||||
#if defined(ELAPSED_FUNC)
|
||||
ELAPSED_TYPE start_tv;
|
||||
#endif
|
||||
|
||||
|
@ -2986,7 +2984,7 @@ gui_wait_for_chars(long wtime, int tb_change_cnt)
|
|||
return retval;
|
||||
}
|
||||
|
||||
#if defined(ELAPSED_FUNC) && defined(FEAT_AUTOCMD)
|
||||
#if defined(ELAPSED_FUNC)
|
||||
ELAPSED_INIT(start_tv);
|
||||
#endif
|
||||
|
||||
|
@ -3003,11 +3001,10 @@ gui_wait_for_chars(long wtime, int tb_change_cnt)
|
|||
*/
|
||||
if (gui_wait_for_chars_or_timer(p_ut) == OK)
|
||||
retval = OK;
|
||||
#ifdef FEAT_AUTOCMD
|
||||
else if (trigger_cursorhold()
|
||||
# ifdef ELAPSED_FUNC
|
||||
#ifdef ELAPSED_FUNC
|
||||
&& ELAPSED_FUNC(start_tv) >= p_ut
|
||||
# endif
|
||||
#endif
|
||||
&& typebuf.tb_change_cnt == tb_change_cnt)
|
||||
{
|
||||
char_u buf[3];
|
||||
|
@ -3020,7 +3017,6 @@ gui_wait_for_chars(long wtime, int tb_change_cnt)
|
|||
|
||||
retval = OK;
|
||||
}
|
||||
#endif
|
||||
|
||||
if (retval == FAIL && typebuf.tb_change_cnt == tb_change_cnt)
|
||||
{
|
||||
|
@ -5131,34 +5127,24 @@ no_console_input(void)
|
|||
void
|
||||
gui_update_screen(void)
|
||||
{
|
||||
#ifdef FEAT_CONCEAL
|
||||
# ifdef FEAT_CONCEAL
|
||||
linenr_T conceal_old_cursor_line = 0;
|
||||
linenr_T conceal_new_cursor_line = 0;
|
||||
int conceal_update_lines = FALSE;
|
||||
#endif
|
||||
# endif
|
||||
|
||||
update_topline();
|
||||
validate_cursor();
|
||||
|
||||
#if defined(FEAT_AUTOCMD) || defined(FEAT_CONCEAL)
|
||||
/* Trigger CursorMoved if the cursor moved. */
|
||||
if (!finish_op && (
|
||||
# ifdef FEAT_AUTOCMD
|
||||
has_cursormoved()
|
||||
# endif
|
||||
# if defined(FEAT_AUTOCMD) && defined(FEAT_CONCEAL)
|
||||
||
|
||||
# endif
|
||||
if (!finish_op && (has_cursormoved()
|
||||
# ifdef FEAT_CONCEAL
|
||||
curwin->w_p_cole > 0
|
||||
|| curwin->w_p_cole > 0
|
||||
# endif
|
||||
)
|
||||
&& !EQUAL_POS(last_cursormoved, curwin->w_cursor))
|
||||
) && !EQUAL_POS(last_cursormoved, curwin->w_cursor))
|
||||
{
|
||||
# ifdef FEAT_AUTOCMD
|
||||
if (has_cursormoved())
|
||||
apply_autocmds(EVENT_CURSORMOVED, NULL, NULL, FALSE, curbuf);
|
||||
# endif
|
||||
# ifdef FEAT_CONCEAL
|
||||
if (curwin->w_p_cole > 0)
|
||||
{
|
||||
|
@ -5169,11 +5155,10 @@ gui_update_screen(void)
|
|||
# endif
|
||||
last_cursormoved = curwin->w_cursor;
|
||||
}
|
||||
#endif
|
||||
|
||||
update_screen(0); /* may need to update the screen */
|
||||
setcursor();
|
||||
# if defined(FEAT_CONCEAL)
|
||||
# ifdef FEAT_CONCEAL
|
||||
if (conceal_update_lines
|
||||
&& (conceal_old_cursor_line != conceal_new_cursor_line
|
||||
|| conceal_cursor_line(curwin)
|
||||
|
|
|
@ -6232,7 +6232,7 @@ char_u *FullPathFromFSSpec_save(FSSpec file)
|
|||
#endif
|
||||
}
|
||||
|
||||
#if (defined(FEAT_MBYTE) || defined(PROTO)) && defined(USE_CARBONKEYHANDLER)
|
||||
#if (defined(FEAT_MBYTE) && defined(USE_CARBONKEYHANDLER)) || defined(PROTO)
|
||||
/*
|
||||
* Input Method Control functions.
|
||||
*/
|
||||
|
|
|
@ -1147,17 +1147,15 @@ cs_find_common(
|
|||
return FALSE;
|
||||
}
|
||||
|
||||
# ifdef FEAT_AUTOCMD
|
||||
if (*qfpos != '0'
|
||||
&& apply_autocmds(EVENT_QUICKFIXCMDPRE, (char_u *)"cscope",
|
||||
curbuf->b_fname, TRUE, curbuf))
|
||||
{
|
||||
# ifdef FEAT_EVAL
|
||||
# ifdef FEAT_EVAL
|
||||
if (aborting())
|
||||
return FALSE;
|
||||
# endif
|
||||
}
|
||||
# endif
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
|
@ -1251,10 +1249,8 @@ cs_find_common(
|
|||
postponed_split = 0;
|
||||
}
|
||||
|
||||
# ifdef FEAT_AUTOCMD
|
||||
apply_autocmds(EVENT_QUICKFIXCMDPOST, (char_u *)"cscope",
|
||||
curbuf->b_fname, TRUE, curbuf);
|
||||
# endif
|
||||
if (use_ll)
|
||||
/*
|
||||
* In the location list window, use the displayed location
|
||||
|
|
|
@ -1480,14 +1480,12 @@ server_parse_message(
|
|||
ga_concat(&(r->strings), str);
|
||||
ga_append(&(r->strings), NUL);
|
||||
}
|
||||
#ifdef FEAT_AUTOCMD
|
||||
{
|
||||
char_u winstr[30];
|
||||
|
||||
sprintf((char *)winstr, "0x%x", (unsigned int)win);
|
||||
apply_autocmds(EVENT_REMOTEREPLY, winstr, str, TRUE, curbuf);
|
||||
}
|
||||
#endif
|
||||
vim_free(tofree);
|
||||
}
|
||||
else
|
||||
|
|
69
src/main.c
69
src/main.c
|
@ -748,10 +748,8 @@ vim_main2(void)
|
|||
if (exmode_active)
|
||||
curwin->w_cursor.lnum = curbuf->b_ml.ml_line_count;
|
||||
|
||||
#ifdef FEAT_AUTOCMD
|
||||
apply_autocmds(EVENT_BUFENTER, NULL, NULL, FALSE, curbuf);
|
||||
TIME_MSG("BufEnter autocommands");
|
||||
#endif
|
||||
setpcmark();
|
||||
|
||||
#ifdef FEAT_QUICKFIX
|
||||
|
@ -843,10 +841,8 @@ vim_main2(void)
|
|||
#ifdef FEAT_EVAL
|
||||
set_vim_var_nr(VV_VIM_DID_ENTER, 1L);
|
||||
#endif
|
||||
#ifdef FEAT_AUTOCMD
|
||||
apply_autocmds(EVENT_VIMENTER, NULL, NULL, FALSE, curbuf);
|
||||
TIME_MSG("VimEnter autocommands");
|
||||
#endif
|
||||
|
||||
#if defined(FEAT_EVAL) && defined(FEAT_CLIPBOARD)
|
||||
/* Adjust default register name for "unnamed" in 'clipboard'. Can only be
|
||||
|
@ -1162,50 +1158,33 @@ main_loop(
|
|||
skip_redraw = FALSE;
|
||||
else if (do_redraw || stuff_empty())
|
||||
{
|
||||
# ifdef FEAT_GUI
|
||||
#ifdef FEAT_GUI
|
||||
/* If ui_breakcheck() was used a resize may have been postponed. */
|
||||
gui_may_resize_shell();
|
||||
# endif
|
||||
#if defined(FEAT_AUTOCMD) || defined(FEAT_CONCEAL)
|
||||
#endif
|
||||
/* Trigger CursorMoved if the cursor moved. */
|
||||
if (!finish_op && (
|
||||
# ifdef FEAT_AUTOCMD
|
||||
has_cursormoved()
|
||||
# endif
|
||||
# if defined(FEAT_AUTOCMD) && defined(FEAT_CONCEAL)
|
||||
||
|
||||
# endif
|
||||
# ifdef FEAT_CONCEAL
|
||||
curwin->w_p_cole > 0
|
||||
# endif
|
||||
#ifdef FEAT_CONCEAL
|
||||
|| curwin->w_p_cole > 0
|
||||
#endif
|
||||
)
|
||||
# ifdef FEAT_AUTOCMD
|
||||
&& !EQUAL_POS(last_cursormoved, curwin->w_cursor)
|
||||
# endif
|
||||
)
|
||||
&& !EQUAL_POS(last_cursormoved, curwin->w_cursor))
|
||||
{
|
||||
# ifdef FEAT_AUTOCMD
|
||||
if (has_cursormoved())
|
||||
apply_autocmds(EVENT_CURSORMOVED, NULL, NULL,
|
||||
FALSE, curbuf);
|
||||
# endif
|
||||
# ifdef FEAT_CONCEAL
|
||||
if (curwin->w_p_cole > 0)
|
||||
{
|
||||
# ifdef FEAT_AUTOCMD
|
||||
conceal_old_cursor_line = last_cursormoved.lnum;
|
||||
# endif
|
||||
conceal_new_cursor_line = curwin->w_cursor.lnum;
|
||||
conceal_update_lines = TRUE;
|
||||
}
|
||||
# endif
|
||||
# ifdef FEAT_AUTOCMD
|
||||
last_cursormoved = curwin->w_cursor;
|
||||
# endif
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef FEAT_AUTOCMD
|
||||
/* Trigger TextChanged if b:changedtick differs. */
|
||||
if (!finish_op && has_textchanged()
|
||||
&& curbuf->b_last_changedtick != CHANGEDTICK(curbuf))
|
||||
|
@ -1213,7 +1192,6 @@ main_loop(
|
|||
apply_autocmds(EVENT_TEXTCHANGED, NULL, NULL, FALSE, curbuf);
|
||||
curbuf->b_last_changedtick = CHANGEDTICK(curbuf);
|
||||
}
|
||||
#endif
|
||||
|
||||
#if defined(FEAT_DIFF) && defined(FEAT_SCROLLBIND)
|
||||
/* Scroll-binding for diff mode may have been postponed until
|
||||
|
@ -1292,7 +1270,7 @@ main_loop(
|
|||
may_clear_sb_text(); /* clear scroll-back text on next msg */
|
||||
showruler(FALSE);
|
||||
|
||||
# if defined(FEAT_CONCEAL)
|
||||
#if defined(FEAT_CONCEAL)
|
||||
if (conceal_update_lines
|
||||
&& (conceal_old_cursor_line != conceal_new_cursor_line
|
||||
|| conceal_cursor_line(curwin)
|
||||
|
@ -1307,7 +1285,7 @@ main_loop(
|
|||
mch_enable_flush();
|
||||
curwin->w_valid &= ~VALID_CROW;
|
||||
}
|
||||
# endif
|
||||
#endif
|
||||
setcursor();
|
||||
cursor_on();
|
||||
|
||||
|
@ -1405,11 +1383,10 @@ getout_preserve_modified(int exitval)
|
|||
void
|
||||
getout(int exitval)
|
||||
{
|
||||
#ifdef FEAT_AUTOCMD
|
||||
tabpage_T *tp;
|
||||
tabpage_T *next_tp;
|
||||
buf_T *buf;
|
||||
win_T *wp;
|
||||
tabpage_T *tp, *next_tp;
|
||||
#endif
|
||||
|
||||
exiting = TRUE;
|
||||
|
||||
|
@ -1434,8 +1411,7 @@ getout(int exitval)
|
|||
msg_didany = FALSE;
|
||||
#endif
|
||||
|
||||
#ifdef FEAT_AUTOCMD
|
||||
if (get_vim_var_nr(VV_DYING) <= 1)
|
||||
if (v_dying <= 1)
|
||||
{
|
||||
/* Trigger BufWinLeave for all windows, but only once per buffer. */
|
||||
for (tp = first_tabpage; tp != NULL; tp = next_tp)
|
||||
|
@ -1479,7 +1455,6 @@ getout(int exitval)
|
|||
}
|
||||
apply_autocmds(EVENT_VIMLEAVEPRE, NULL, NULL, FALSE, curbuf);
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef FEAT_VIMINFO
|
||||
if (*p_viminfo != NUL)
|
||||
|
@ -1487,10 +1462,8 @@ getout(int exitval)
|
|||
write_viminfo(NULL, FALSE);
|
||||
#endif
|
||||
|
||||
#ifdef FEAT_AUTOCMD
|
||||
if (get_vim_var_nr(VV_DYING) <= 1)
|
||||
if (v_dying <= 1)
|
||||
apply_autocmds(EVENT_VIMLEAVE, NULL, NULL, FALSE, curbuf);
|
||||
#endif
|
||||
|
||||
#ifdef FEAT_PROFILE
|
||||
profile_dump();
|
||||
|
@ -1507,13 +1480,11 @@ getout(int exitval)
|
|||
wait_return(FALSE);
|
||||
}
|
||||
|
||||
#ifdef FEAT_AUTOCMD
|
||||
/* Position the cursor again, the autocommands may have moved it */
|
||||
# ifdef FEAT_GUI
|
||||
#ifdef FEAT_GUI
|
||||
if (!gui.in_use)
|
||||
# endif
|
||||
windgoto((int)Rows - 1, 0);
|
||||
#endif
|
||||
windgoto((int)Rows - 1, 0);
|
||||
|
||||
#ifdef FEAT_JOB_CHANNEL
|
||||
job_stop_on_exit();
|
||||
|
@ -2701,13 +2672,11 @@ create_windows(mparm_T *parmp UNUSED)
|
|||
* Commands in the .vimrc might have loaded a file or split the window.
|
||||
* Watch out for autocommands that delete a window.
|
||||
*/
|
||||
#ifdef FEAT_AUTOCMD
|
||||
/*
|
||||
* Don't execute Win/Buf Enter/Leave autocommands here
|
||||
*/
|
||||
++autocmd_no_enter;
|
||||
++autocmd_no_leave;
|
||||
#endif
|
||||
dorewind = TRUE;
|
||||
while (done++ < 1000)
|
||||
{
|
||||
|
@ -2767,9 +2736,7 @@ create_windows(mparm_T *parmp UNUSED)
|
|||
else
|
||||
handle_swap_exists(NULL);
|
||||
#endif
|
||||
#ifdef FEAT_AUTOCMD
|
||||
dorewind = TRUE; /* start again */
|
||||
#endif
|
||||
}
|
||||
ui_breakcheck();
|
||||
if (got_int)
|
||||
|
@ -2783,10 +2750,8 @@ create_windows(mparm_T *parmp UNUSED)
|
|||
else
|
||||
curwin = firstwin;
|
||||
curbuf = curwin->w_buffer;
|
||||
#ifdef FEAT_AUTOCMD
|
||||
--autocmd_no_enter;
|
||||
--autocmd_no_leave;
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -2804,13 +2769,11 @@ edit_buffers(
|
|||
int advance = TRUE;
|
||||
win_T *win;
|
||||
|
||||
# ifdef FEAT_AUTOCMD
|
||||
/*
|
||||
* Don't execute Win/Buf Enter/Leave autocommands here
|
||||
*/
|
||||
++autocmd_no_enter;
|
||||
++autocmd_no_leave;
|
||||
# endif
|
||||
|
||||
/* When w_arg_idx is -1 remove the window (see create_windows()). */
|
||||
if (curwin->w_arg_idx == -1)
|
||||
|
@ -2891,9 +2854,7 @@ edit_buffers(
|
|||
|
||||
if (parmp->window_layout == WIN_TABS)
|
||||
goto_tabpage(1);
|
||||
# ifdef FEAT_AUTOCMD
|
||||
--autocmd_no_enter;
|
||||
# endif
|
||||
|
||||
/* make the first window the current window */
|
||||
win = firstwin;
|
||||
|
@ -2911,9 +2872,7 @@ edit_buffers(
|
|||
#endif
|
||||
win_enter(win, FALSE);
|
||||
|
||||
#ifdef FEAT_AUTOCMD
|
||||
--autocmd_no_leave;
|
||||
#endif
|
||||
TIME_MSG("editing files in windows");
|
||||
if (parmp->window_count > 1 && parmp->window_layout != WIN_TABS)
|
||||
win_equal(curwin, FALSE, 'b'); /* adjust heights */
|
||||
|
|
19
src/mbyte.c
19
src/mbyte.c
|
@ -799,11 +799,9 @@ codepage_invalid:
|
|||
fix_arg_enc();
|
||||
#endif
|
||||
|
||||
#ifdef FEAT_AUTOCMD
|
||||
/* Fire an autocommand to let people do custom font setup. This must be
|
||||
* after Vim has been setup for the new encoding. */
|
||||
apply_autocmds(EVENT_ENCODINGCHANGED, NULL, (char_u *)"", FALSE, curbuf);
|
||||
#endif
|
||||
|
||||
#ifdef FEAT_SPELL
|
||||
/* Need to reload spell dictionaries */
|
||||
|
@ -4792,7 +4790,8 @@ iconv_end(void)
|
|||
# define USE_IMSTATUSFUNC (*p_imsf != NUL)
|
||||
#endif
|
||||
|
||||
#if defined(FEAT_EVAL) && defined(FEAT_MBYTE)
|
||||
#if defined(FEAT_EVAL) && defined(FEAT_MBYTE) \
|
||||
&& (defined(FEAT_XIM) || defined(IME_WITHOUT_XIM))
|
||||
static void
|
||||
call_imactivatefunc(int active)
|
||||
{
|
||||
|
@ -4811,11 +4810,7 @@ call_imstatusfunc(void)
|
|||
int is_active;
|
||||
|
||||
/* FIXME: Don't execute user function in unsafe situation. */
|
||||
if (exiting
|
||||
# ifdef FEAT_AUTOCMD
|
||||
|| is_autocmd_blocked()
|
||||
# endif
|
||||
)
|
||||
if (exiting || is_autocmd_blocked())
|
||||
return FALSE;
|
||||
/* FIXME: :py print 'xxx' is shown duplicate result.
|
||||
* Use silent to avoid it. */
|
||||
|
@ -5698,11 +5693,11 @@ im_synthesize_keypress(unsigned int keyval, unsigned int state)
|
|||
void
|
||||
xim_reset(void)
|
||||
{
|
||||
#ifdef FEAT_EVAL
|
||||
# ifdef FEAT_EVAL
|
||||
if (USE_IMACTIVATEFUNC)
|
||||
call_imactivatefunc(im_is_active);
|
||||
else
|
||||
#endif
|
||||
# endif
|
||||
if (xic != NULL)
|
||||
{
|
||||
gtk_im_context_reset(xic);
|
||||
|
@ -6482,11 +6477,11 @@ xim_get_status_area_height(void)
|
|||
|
||||
#else /* !defined(FEAT_XIM) */
|
||||
|
||||
# if !defined(FEAT_GUI_W32) || !(defined(FEAT_MBYTE_IME) || defined(GLOBAL_IME))
|
||||
# ifdef IME_WITHOUT_XIM
|
||||
static int im_was_set_active = FALSE;
|
||||
|
||||
int
|
||||
im_get_status()
|
||||
im_get_status(void)
|
||||
{
|
||||
# if defined(FEAT_MBYTE) && defined(FEAT_EVAL)
|
||||
if (USE_IMSTATUSFUNC)
|
||||
|
|
|
@ -1732,13 +1732,11 @@ theend:
|
|||
}
|
||||
if (serious_error && called_from_main)
|
||||
ml_close(curbuf, TRUE);
|
||||
#ifdef FEAT_AUTOCMD
|
||||
else
|
||||
{
|
||||
apply_autocmds(EVENT_BUFREADPOST, NULL, curbuf->b_fname, FALSE, curbuf);
|
||||
apply_autocmds(EVENT_BUFWINENTER, NULL, curbuf->b_fname, FALSE, curbuf);
|
||||
}
|
||||
#endif
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -4071,7 +4069,7 @@ attention_message(
|
|||
--no_wait_return;
|
||||
}
|
||||
|
||||
#ifdef FEAT_AUTOCMD
|
||||
#if defined(FEAT_EVAL)
|
||||
static int do_swapexists(buf_T *buf, char_u *fname);
|
||||
|
||||
/*
|
||||
|
@ -4450,7 +4448,7 @@ findswapname(
|
|||
#if (defined(UNIX) || defined(VMS)) && (defined(FEAT_GUI_DIALOG) || defined(FEAT_CON_DIALOG))
|
||||
process_still_running = FALSE;
|
||||
#endif
|
||||
#ifdef FEAT_AUTOCMD
|
||||
#if defined(FEAT_EVAL)
|
||||
/*
|
||||
* If there is an SwapExists autocommand and we can handle
|
||||
* the response, trigger it. It may return 0 to ask the
|
||||
|
|
|
@ -1907,7 +1907,6 @@ show_popupmenu(void)
|
|||
return;
|
||||
mode = menu_mode_chars[mode];
|
||||
|
||||
# ifdef FEAT_AUTOCMD
|
||||
{
|
||||
char_u ename[2];
|
||||
|
||||
|
@ -1915,7 +1914,6 @@ show_popupmenu(void)
|
|||
ename[1] = NUL;
|
||||
apply_autocmds(EVENT_MENUPOPUP, ename, NULL, FALSE, curbuf);
|
||||
}
|
||||
# endif
|
||||
|
||||
for (menu = root_menu; menu != NULL; menu = menu->next)
|
||||
if (STRNCMP("PopUp", menu->name, 5) == 0 && menu->name[5] == mode)
|
||||
|
|
|
@ -3183,12 +3183,10 @@ changed_common(
|
|||
if (must_redraw < VALID)
|
||||
must_redraw = VALID;
|
||||
|
||||
#ifdef FEAT_AUTOCMD
|
||||
/* when the cursor line is changed always trigger CursorMoved */
|
||||
if (lnum <= curwin->w_cursor.lnum
|
||||
&& lnume + (xtra < 0 ? -xtra : xtra) > curwin->w_cursor.lnum)
|
||||
last_cursormoved.lnum = 0;
|
||||
#endif
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -3252,18 +3250,14 @@ change_warning(
|
|||
|
||||
if (curbuf->b_did_warn == FALSE
|
||||
&& curbufIsChanged() == 0
|
||||
#ifdef FEAT_AUTOCMD
|
||||
&& !autocmd_busy
|
||||
#endif
|
||||
&& curbuf->b_p_ro)
|
||||
{
|
||||
#ifdef FEAT_AUTOCMD
|
||||
++curbuf_lock;
|
||||
apply_autocmds(EVENT_FILECHANGEDRO, NULL, NULL, FALSE, curbuf);
|
||||
--curbuf_lock;
|
||||
if (!curbuf->b_p_ro)
|
||||
return;
|
||||
#endif
|
||||
/*
|
||||
* Do what msg() does, but with a column offset if the warning should
|
||||
* be after the mode message.
|
||||
|
|
|
@ -1099,10 +1099,8 @@ free_all_mem(void)
|
|||
return;
|
||||
entered_free_all_mem = TRUE;
|
||||
|
||||
# ifdef FEAT_AUTOCMD
|
||||
/* Don't want to trigger autocommands from here on. */
|
||||
block_autocmds();
|
||||
# endif
|
||||
|
||||
/* Close all tabs and windows. Reset 'equalalways' to avoid redraws. */
|
||||
p_ea = FALSE;
|
||||
|
@ -1157,9 +1155,7 @@ free_all_mem(void)
|
|||
# endif
|
||||
|
||||
/* Obviously named calls. */
|
||||
# if defined(FEAT_AUTOCMD)
|
||||
free_all_autocmds();
|
||||
# endif
|
||||
clear_termcodes();
|
||||
free_all_marks();
|
||||
alist_clear(&global_alist);
|
||||
|
@ -3403,11 +3399,9 @@ vim_chdirfile(char_u *fname, char *trigger_autocmd UNUSED)
|
|||
vim_strncpy(dir, fname, MAXPATHL - 1);
|
||||
*gettail_sep(dir) = NUL;
|
||||
res = mch_chdir((char *)dir) == 0 ? OK : FAIL;
|
||||
#ifdef FEAT_AUTOCMD
|
||||
if (res == OK && trigger_autocmd != NULL)
|
||||
apply_autocmds(EVENT_DIRCHANGED, (char_u *)trigger_autocmd,
|
||||
dir, FALSE, curbuf);
|
||||
#endif
|
||||
return res;
|
||||
}
|
||||
#endif
|
||||
|
|
|
@ -538,9 +538,7 @@ set_topline(win_T *wp, linenr_T lnum)
|
|||
/* Approximate the value of w_botline */
|
||||
wp->w_botline += lnum - wp->w_topline;
|
||||
wp->w_topline = lnum;
|
||||
#ifdef FEAT_AUTOCMD
|
||||
wp->w_topline_was_set = TRUE;
|
||||
#endif
|
||||
#ifdef FEAT_DIFF
|
||||
wp->w_topfill = 0;
|
||||
#endif
|
||||
|
|
|
@ -1581,9 +1581,7 @@ nb_do_cmd(
|
|||
do_update = 1;
|
||||
buf->initDone = TRUE;
|
||||
nb_set_curbuf(buf->bufp);
|
||||
#if defined(FEAT_AUTOCMD)
|
||||
apply_autocmds(EVENT_BUFREADPOST, 0, 0, FALSE, buf->bufp);
|
||||
#endif
|
||||
|
||||
/* handle any postponed key commands */
|
||||
handle_key_queue();
|
||||
|
@ -2160,17 +2158,13 @@ nb_do_cmd(
|
|||
#endif
|
||||
)
|
||||
{
|
||||
#ifdef FEAT_AUTOCMD
|
||||
bufref_T bufref;
|
||||
|
||||
set_bufref(&bufref, buf->bufp);
|
||||
#endif
|
||||
buf_write_all(buf->bufp, FALSE);
|
||||
#ifdef FEAT_AUTOCMD
|
||||
/* an autocommand may have deleted the buffer */
|
||||
if (!bufref_valid(&bufref))
|
||||
buf->bufp = NULL;
|
||||
#endif
|
||||
}
|
||||
}
|
||||
else
|
||||
|
|
32
src/normal.c
32
src/normal.c
|
@ -169,9 +169,7 @@ static void nv_nbcmd(cmdarg_T *cap);
|
|||
#ifdef FEAT_DND
|
||||
static void nv_drop(cmdarg_T *cap);
|
||||
#endif
|
||||
#ifdef FEAT_AUTOCMD
|
||||
static void nv_cursorhold(cmdarg_T *cap);
|
||||
#endif
|
||||
static void get_op_vcol(oparg_T *oap, colnr_T col, int initial);
|
||||
|
||||
static char *e_noident = N_("E349: No identifier under cursor");
|
||||
|
@ -424,9 +422,7 @@ static const struct nv_cmd
|
|||
#ifdef FEAT_DND
|
||||
{K_DROP, nv_drop, NV_STS, 0},
|
||||
#endif
|
||||
#ifdef FEAT_AUTOCMD
|
||||
{K_CURSORHOLD, nv_cursorhold, NV_KEEPREG, 0},
|
||||
#endif
|
||||
{K_PS, nv_edit, 0, 0},
|
||||
};
|
||||
|
||||
|
@ -595,7 +591,6 @@ normal_cmd(
|
|||
#endif
|
||||
}
|
||||
|
||||
#ifdef FEAT_AUTOCMD
|
||||
/* Restore counts from before receiving K_CURSORHOLD. This means after
|
||||
* typing "3", handling K_CURSORHOLD and then typing "2" we get "32", not
|
||||
* "3 * 2". */
|
||||
|
@ -606,7 +601,6 @@ normal_cmd(
|
|||
oap->prev_opcount = 0;
|
||||
oap->prev_count0 = 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
mapped_len = typebuf_maplen();
|
||||
|
||||
|
@ -737,7 +731,6 @@ getcount:
|
|||
}
|
||||
}
|
||||
|
||||
#ifdef FEAT_AUTOCMD
|
||||
if (c == K_CURSORHOLD)
|
||||
{
|
||||
/* Save the count values so that ca.opcount and ca.count0 are exactly
|
||||
|
@ -745,9 +738,7 @@ getcount:
|
|||
oap->prev_opcount = ca.opcount;
|
||||
oap->prev_count0 = ca.count0;
|
||||
}
|
||||
else
|
||||
#endif
|
||||
if (ca.opcount != 0)
|
||||
else if (ca.opcount != 0)
|
||||
{
|
||||
/*
|
||||
* If we're in the middle of an operator (including after entering a
|
||||
|
@ -808,10 +799,8 @@ getcount:
|
|||
text_locked_msg();
|
||||
goto normal_end;
|
||||
}
|
||||
#ifdef FEAT_AUTOCMD
|
||||
if ((nv_cmds[idx].cmd_flags & NV_NCW) && curbuf_locked())
|
||||
goto normal_end;
|
||||
#endif
|
||||
|
||||
/*
|
||||
* In Visual/Select mode, a few keys are handled in a special way.
|
||||
|
@ -892,17 +881,15 @@ getcount:
|
|||
int lit = FALSE; /* get extra character literally */
|
||||
int langmap_active = FALSE; /* using :lmap mappings */
|
||||
int lang; /* getting a text character */
|
||||
#ifdef FEAT_MBYTE
|
||||
#ifdef HAVE_INPUT_METHOD
|
||||
int save_smd; /* saved value of p_smd */
|
||||
#endif
|
||||
|
||||
++no_mapping;
|
||||
++allow_keys; /* no mapping for nchar, but allow key codes */
|
||||
#ifdef FEAT_AUTOCMD
|
||||
/* Don't generate a CursorHold event here, most commands can't handle
|
||||
* it, e.g., nv_replace(), nv_csearch(). */
|
||||
did_cursorhold = TRUE;
|
||||
#endif
|
||||
if (ca.cmdchar == 'g')
|
||||
{
|
||||
/*
|
||||
|
@ -957,7 +944,7 @@ getcount:
|
|||
State = LANGMAP;
|
||||
langmap_active = TRUE;
|
||||
}
|
||||
#ifdef FEAT_MBYTE
|
||||
#ifdef HAVE_INPUT_METHOD
|
||||
save_smd = p_smd;
|
||||
p_smd = FALSE; /* Don't let the IM code show the mode here */
|
||||
if (lang && curbuf->b_p_iminsert == B_IMODE_IM)
|
||||
|
@ -973,7 +960,7 @@ getcount:
|
|||
++allow_keys;
|
||||
State = NORMAL_BUSY;
|
||||
}
|
||||
#ifdef FEAT_MBYTE
|
||||
#ifdef HAVE_INPUT_METHOD
|
||||
if (lang)
|
||||
{
|
||||
if (curbuf->b_p_iminsert != B_IMODE_LMAP)
|
||||
|
@ -1102,10 +1089,8 @@ getcount:
|
|||
if (need_flushbuf)
|
||||
out_flush();
|
||||
#endif
|
||||
#ifdef FEAT_AUTOCMD
|
||||
if (ca.cmdchar != K_IGNORE)
|
||||
did_cursorhold = FALSE;
|
||||
#endif
|
||||
|
||||
State = NORMAL;
|
||||
|
||||
|
@ -1278,10 +1263,7 @@ normal_end:
|
|||
|
||||
#ifdef FEAT_CMDL_INFO
|
||||
if (oap->op_type == OP_NOP && oap->regname == 0
|
||||
# ifdef FEAT_AUTOCMD
|
||||
&& ca.cmdchar != K_CURSORHOLD
|
||||
# endif
|
||||
)
|
||||
&& ca.cmdchar != K_CURSORHOLD)
|
||||
clear_showcmd();
|
||||
#endif
|
||||
|
||||
|
@ -6264,13 +6246,11 @@ nv_gotofile(cmdarg_T *cap)
|
|||
text_locked_msg();
|
||||
return;
|
||||
}
|
||||
#ifdef FEAT_AUTOCMD
|
||||
if (curbuf_locked())
|
||||
{
|
||||
clearop(cap->oap);
|
||||
return;
|
||||
}
|
||||
#endif
|
||||
|
||||
ptr = grab_file_name(cap->count1, &lnum);
|
||||
|
||||
|
@ -9597,7 +9577,6 @@ nv_drop(cmdarg_T *cap UNUSED)
|
|||
}
|
||||
#endif
|
||||
|
||||
#ifdef FEAT_AUTOCMD
|
||||
/*
|
||||
* Trigger CursorHold event.
|
||||
* When waiting for a character for 'updatetime' K_CURSORHOLD is put in the
|
||||
|
@ -9610,7 +9589,6 @@ nv_cursorhold(cmdarg_T *cap)
|
|||
did_cursorhold = TRUE;
|
||||
cap->retval |= CA_COMMAND_BUSY; /* don't call edit() now */
|
||||
}
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Calculate start/end virtual columns for operating in block mode.
|
||||
|
|
|
@ -1651,7 +1651,7 @@ shift_delete_registers()
|
|||
y_regs[1].y_array = NULL; /* set register one to empty */
|
||||
}
|
||||
|
||||
#ifdef FEAT_AUTOCMD
|
||||
#if defined(FEAT_EVAL)
|
||||
static void
|
||||
yank_do_autocmd(oparg_T *oap, yankreg_T *reg)
|
||||
{
|
||||
|
@ -1866,7 +1866,7 @@ op_delete(oparg_T *oap)
|
|||
}
|
||||
}
|
||||
|
||||
#ifdef FEAT_AUTOCMD
|
||||
#if defined(FEAT_EVAL)
|
||||
if (did_yank && has_textyankpost())
|
||||
yank_do_autocmd(oap, y_current);
|
||||
#endif
|
||||
|
@ -3350,7 +3350,7 @@ op_yank(oparg_T *oap, int deleting, int mess)
|
|||
# endif
|
||||
#endif
|
||||
|
||||
#ifdef FEAT_AUTOCMD
|
||||
#if defined(FEAT_EVAL)
|
||||
if (!deleting && has_textyankpost())
|
||||
yank_do_autocmd(oap, y_current);
|
||||
#endif
|
||||
|
@ -3493,11 +3493,9 @@ do_put(
|
|||
return;
|
||||
}
|
||||
|
||||
#ifdef FEAT_AUTOCMD
|
||||
/* Autocommands may be executed when saving lines for undo, which may make
|
||||
* y_array invalid. Start undo now to avoid that. */
|
||||
u_save(curwin->w_cursor.lnum, curwin->w_cursor.lnum + 1);
|
||||
#endif
|
||||
|
||||
if (insert_string != NULL)
|
||||
{
|
||||
|
|
81
src/option.c
81
src/option.c
|
@ -114,9 +114,7 @@
|
|||
#define PV_FF OPT_BUF(BV_FF)
|
||||
#define PV_FLP OPT_BUF(BV_FLP)
|
||||
#define PV_FO OPT_BUF(BV_FO)
|
||||
#ifdef FEAT_AUTOCMD
|
||||
# define PV_FT OPT_BUF(BV_FT)
|
||||
#endif
|
||||
#define PV_FT OPT_BUF(BV_FT)
|
||||
#define PV_IMI OPT_BUF(BV_IMI)
|
||||
#define PV_IMS OPT_BUF(BV_IMS)
|
||||
#if defined(FEAT_CINDENT) && defined(FEAT_EVAL)
|
||||
|
@ -319,9 +317,7 @@ static char_u *p_fenc;
|
|||
static char_u *p_ff;
|
||||
static char_u *p_fo;
|
||||
static char_u *p_flp;
|
||||
#ifdef FEAT_AUTOCMD
|
||||
static char_u *p_ft;
|
||||
#endif
|
||||
static long p_iminsert;
|
||||
static long p_imsearch;
|
||||
#if defined(FEAT_FIND_ID) && defined(FEAT_EVAL)
|
||||
|
@ -1125,11 +1121,7 @@ static struct vimoption options[] =
|
|||
(char_u *)&p_ek, PV_NONE,
|
||||
{(char_u *)FALSE, (char_u *)TRUE} SCRIPTID_INIT},
|
||||
{"eventignore", "ei", P_STRING|P_VI_DEF|P_ONECOMMA|P_NODUP,
|
||||
#ifdef FEAT_AUTOCMD
|
||||
(char_u *)&p_ei, PV_NONE,
|
||||
#else
|
||||
(char_u *)NULL, PV_NONE,
|
||||
#endif
|
||||
{(char_u *)"", (char_u *)0L} SCRIPTID_INIT},
|
||||
{"expandtab", "et", P_BOOL|P_VI_DEF|P_VIM,
|
||||
(char_u *)&p_et, PV_ET,
|
||||
|
@ -1174,13 +1166,8 @@ static struct vimoption options[] =
|
|||
#endif
|
||||
(char_u *)0L} SCRIPTID_INIT},
|
||||
{"filetype", "ft", P_STRING|P_ALLOCED|P_VI_DEF|P_NOGLOB|P_NFNAME,
|
||||
#ifdef FEAT_AUTOCMD
|
||||
(char_u *)&p_ft, PV_FT,
|
||||
{(char_u *)"", (char_u *)0L}
|
||||
#else
|
||||
(char_u *)NULL, PV_NONE,
|
||||
{(char_u *)0L, (char_u *)0L}
|
||||
#endif
|
||||
SCRIPTID_INIT},
|
||||
{"fillchars", "fcs", P_STRING|P_VI_DEF|P_RALL|P_ONECOMMA|P_NODUP,
|
||||
(char_u *)&p_fcs, PV_NONE,
|
||||
|
@ -3248,11 +3235,7 @@ static char *(p_scbopt_values[]) = {"ver", "hor", "jump", NULL};
|
|||
#endif
|
||||
static char *(p_debug_values[]) = {"msg", "throw", "beep", NULL};
|
||||
static char *(p_ead_values[]) = {"both", "ver", "hor", NULL};
|
||||
#ifdef FEAT_AUTOCMD
|
||||
static char *(p_buftype_values[]) = {"nofile", "nowrite", "quickfix", "help", "terminal", "acwrite", NULL};
|
||||
#else
|
||||
static char *(p_buftype_values[]) = {"nofile", "nowrite", "quickfix", "help", "terminal", NULL};
|
||||
#endif
|
||||
static char *(p_bufhidden_values[]) = {"hide", "unload", "delete", "wipe", NULL};
|
||||
static char *(p_bs_values[]) = {"indent", "eol", "start", NULL};
|
||||
#ifdef FEAT_FOLDING
|
||||
|
@ -4339,7 +4322,7 @@ set_title_defaults(void)
|
|||
}
|
||||
#endif
|
||||
|
||||
#if defined(FEAT_AUTOCMD) && defined(FEAT_EVAL)
|
||||
#if defined(FEAT_EVAL)
|
||||
static void
|
||||
trigger_optionsset_string(
|
||||
int opt_idx,
|
||||
|
@ -4830,7 +4813,7 @@ do_set(
|
|||
char_u *oldval = NULL; /* previous value if *varp */
|
||||
char_u *newval;
|
||||
char_u *origval = NULL;
|
||||
#if defined(FEAT_AUTOCMD) && defined(FEAT_EVAL)
|
||||
#if defined(FEAT_EVAL)
|
||||
char_u *saved_origval = NULL;
|
||||
char_u *saved_newval = NULL;
|
||||
#endif
|
||||
|
@ -5184,7 +5167,7 @@ do_set(
|
|||
*/
|
||||
*(char_u **)(varp) = newval;
|
||||
|
||||
#if defined(FEAT_AUTOCMD) && defined(FEAT_EVAL)
|
||||
#if defined(FEAT_EVAL)
|
||||
if (!starting
|
||||
# ifdef FEAT_CRYPT
|
||||
&& options[opt_idx].indir != PV_KEY
|
||||
|
@ -5207,7 +5190,7 @@ do_set(
|
|||
errmsg = did_set_string_option(opt_idx, (char_u **)varp,
|
||||
new_value_alloced, oldval, errbuf, opt_flags);
|
||||
|
||||
#if defined(FEAT_AUTOCMD) && defined(FEAT_EVAL)
|
||||
#if defined(FEAT_EVAL)
|
||||
if (errmsg == NULL)
|
||||
trigger_optionsset_string(opt_idx, opt_flags,
|
||||
saved_origval, saved_newval);
|
||||
|
@ -5726,9 +5709,7 @@ check_buf_options(buf_T *buf)
|
|||
check_string_option(&buf->b_p_cino);
|
||||
parse_cino(buf);
|
||||
#endif
|
||||
#ifdef FEAT_AUTOCMD
|
||||
check_string_option(&buf->b_p_ft);
|
||||
#endif
|
||||
#if defined(FEAT_SMARTINDENT) || defined(FEAT_CINDENT)
|
||||
check_string_option(&buf->b_p_cinw);
|
||||
#endif
|
||||
|
@ -5982,7 +5963,7 @@ set_string_option(
|
|||
char_u *s;
|
||||
char_u **varp;
|
||||
char_u *oldval;
|
||||
#if defined(FEAT_AUTOCMD) && defined(FEAT_EVAL)
|
||||
#if defined(FEAT_EVAL)
|
||||
char_u *saved_oldval = NULL;
|
||||
char_u *saved_newval = NULL;
|
||||
#endif
|
||||
|
@ -6002,7 +5983,7 @@ set_string_option(
|
|||
oldval = *varp;
|
||||
*varp = s;
|
||||
|
||||
#if defined(FEAT_AUTOCMD) && defined(FEAT_EVAL)
|
||||
#if defined(FEAT_EVAL)
|
||||
if (!starting
|
||||
# ifdef FEAT_CRYPT
|
||||
&& options[opt_idx].indir != PV_KEY
|
||||
|
@ -6017,7 +5998,7 @@ set_string_option(
|
|||
opt_flags)) == NULL)
|
||||
did_set_option(opt_idx, opt_flags, TRUE);
|
||||
|
||||
#if defined(FEAT_AUTOCMD) && defined(FEAT_EVAL)
|
||||
#if defined(FEAT_EVAL)
|
||||
/* call autocommand after handling side effects */
|
||||
if (r == NULL)
|
||||
trigger_optionsset_string(opt_idx, opt_flags,
|
||||
|
@ -6029,7 +6010,6 @@ set_string_option(
|
|||
return r;
|
||||
}
|
||||
|
||||
#if defined(FEAT_KEYMAP) || defined(FEAT_AUTOCMD) || defined(FEAT_SYN_HL)
|
||||
/*
|
||||
* Return TRUE if "val" is a valid 'filetype' name.
|
||||
* Also used for 'syntax' and 'keymap'.
|
||||
|
@ -6044,7 +6024,6 @@ valid_filetype(char_u *val)
|
|||
return FALSE;
|
||||
return TRUE;
|
||||
}
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Handle string options that need some action to perform when changed.
|
||||
|
@ -6068,9 +6047,7 @@ did_set_string_option(
|
|||
/* set when changing an option that only requires a redraw in the GUI */
|
||||
int redraw_gui_only = FALSE;
|
||||
#endif
|
||||
#ifdef FEAT_AUTOCMD
|
||||
int ft_changed = FALSE;
|
||||
#endif
|
||||
|
||||
/* Get the global option to compare with, otherwise we would have to check
|
||||
* two values for all local options. */
|
||||
|
@ -6351,14 +6328,12 @@ did_set_string_option(
|
|||
}
|
||||
#endif
|
||||
|
||||
#ifdef FEAT_AUTOCMD
|
||||
/* 'eventignore' */
|
||||
else if (varp == &p_ei)
|
||||
{
|
||||
if (check_ei() == FAIL)
|
||||
errmsg = e_invarg;
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef FEAT_MBYTE
|
||||
/* 'encoding', 'fileencoding', 'termencoding' and 'makeencoding' */
|
||||
|
@ -7468,7 +7443,6 @@ did_set_string_option(
|
|||
}
|
||||
#endif
|
||||
|
||||
#ifdef FEAT_AUTOCMD
|
||||
else if (gvarp == &p_ft)
|
||||
{
|
||||
if (!valid_filetype(*varp))
|
||||
|
@ -7476,7 +7450,6 @@ did_set_string_option(
|
|||
else
|
||||
ft_changed = STRCMP(oldval, *varp) != 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef FEAT_SYN_HL
|
||||
else if (gvarp == &p_syn)
|
||||
|
@ -7593,18 +7566,17 @@ did_set_string_option(
|
|||
else if (!(opt_flags & OPT_LOCAL) && opt_flags != OPT_GLOBAL)
|
||||
set_string_option_global(opt_idx, varp);
|
||||
|
||||
#ifdef FEAT_AUTOCMD
|
||||
/*
|
||||
* Trigger the autocommand only after setting the flags.
|
||||
*/
|
||||
# ifdef FEAT_SYN_HL
|
||||
#ifdef FEAT_SYN_HL
|
||||
/* When 'syntax' is set, load the syntax of that name */
|
||||
if (varp == &(curbuf->b_p_syn))
|
||||
{
|
||||
apply_autocmds(EVENT_SYNTAX, curbuf->b_p_syn,
|
||||
curbuf->b_fname, TRUE, curbuf);
|
||||
}
|
||||
# endif
|
||||
#endif
|
||||
else if (varp == &(curbuf->b_p_ft))
|
||||
{
|
||||
/* 'filetype' is set, trigger the FileType autocommand.
|
||||
|
@ -7620,7 +7592,6 @@ did_set_string_option(
|
|||
varp = NULL;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
#ifdef FEAT_SPELL
|
||||
if (varp == &(curwin->w_s->b_p_spl))
|
||||
{
|
||||
|
@ -8280,14 +8251,12 @@ set_bool_option(
|
|||
#endif
|
||||
}
|
||||
|
||||
#ifdef FEAT_AUTOCMD
|
||||
/* when 'buflisted' changes, trigger autocommands */
|
||||
else if ((int *)varp == &curbuf->b_p_bl && old_value != curbuf->b_p_bl)
|
||||
{
|
||||
apply_autocmds(curbuf->b_p_bl ? EVENT_BUFADD : EVENT_BUFDELETE,
|
||||
NULL, NULL, TRUE, curbuf);
|
||||
}
|
||||
#endif
|
||||
|
||||
/* when 'swf' is set, create swapfile, when reset remove swapfile */
|
||||
else if ((int *)varp == &curbuf->b_p_swf)
|
||||
|
@ -8433,9 +8402,7 @@ set_bool_option(
|
|||
#ifdef FEAT_TITLE
|
||||
redraw_titles();
|
||||
#endif
|
||||
#ifdef FEAT_AUTOCMD
|
||||
modified_was_set = value;
|
||||
#endif
|
||||
}
|
||||
|
||||
#ifdef BACKSLASH_IN_FILENAME
|
||||
|
@ -8529,7 +8496,7 @@ set_bool_option(
|
|||
}
|
||||
#endif
|
||||
|
||||
#ifdef FEAT_MBYTE
|
||||
#ifdef HAVE_INPUT_METHOD
|
||||
/* 'imdisable' */
|
||||
else if ((int *)varp == &p_imdisable)
|
||||
{
|
||||
|
@ -8739,7 +8706,7 @@ set_bool_option(
|
|||
|
||||
options[opt_idx].flags |= P_WAS_SET;
|
||||
|
||||
#if defined(FEAT_AUTOCMD) && defined(FEAT_EVAL)
|
||||
#if defined(FEAT_EVAL)
|
||||
if (!starting)
|
||||
{
|
||||
char_u buf_old[2], buf_new[2], buf_type[7];
|
||||
|
@ -9289,7 +9256,7 @@ set_num_option(
|
|||
|
||||
options[opt_idx].flags |= P_WAS_SET;
|
||||
|
||||
#if defined(FEAT_AUTOCMD) && defined(FEAT_EVAL)
|
||||
#if defined(FEAT_EVAL)
|
||||
if (!starting && errmsg == NULL)
|
||||
{
|
||||
char_u buf_old[11], buf_new[11], buf_type[7];
|
||||
|
@ -10139,22 +10106,15 @@ makeset(FILE *fd, int opt_flags, int local_only)
|
|||
}
|
||||
else /* P_STRING */
|
||||
{
|
||||
#if defined(FEAT_SYN_HL) || defined(FEAT_AUTOCMD)
|
||||
int do_endif = FALSE;
|
||||
|
||||
/* Don't set 'syntax' and 'filetype' again if the value is
|
||||
* already right, avoids reloading the syntax file. */
|
||||
if (
|
||||
# if defined(FEAT_SYN_HL)
|
||||
p->indir == PV_SYN
|
||||
# if defined(FEAT_AUTOCMD)
|
||||
||
|
||||
# endif
|
||||
# endif
|
||||
# if defined(FEAT_AUTOCMD)
|
||||
p->indir == PV_FT
|
||||
# endif
|
||||
)
|
||||
#if defined(FEAT_SYN_HL)
|
||||
p->indir == PV_SYN ||
|
||||
#endif
|
||||
p->indir == PV_FT)
|
||||
{
|
||||
if (fprintf(fd, "if &%s != '%s'", p->fullname,
|
||||
*(char_u **)(varp)) < 0
|
||||
|
@ -10162,17 +10122,14 @@ makeset(FILE *fd, int opt_flags, int local_only)
|
|||
return FAIL;
|
||||
do_endif = TRUE;
|
||||
}
|
||||
#endif
|
||||
if (put_setstring(fd, cmd, p->fullname, (char_u **)varp,
|
||||
(p->flags & P_EXPAND) != 0) == FAIL)
|
||||
return FAIL;
|
||||
#if defined(FEAT_SYN_HL) || defined(FEAT_AUTOCMD)
|
||||
if (do_endif)
|
||||
{
|
||||
if (put_line(fd, "endif") == FAIL)
|
||||
return FAIL;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -10783,9 +10740,7 @@ get_varp(struct vimoption *p)
|
|||
case PV_FENC: return (char_u *)&(curbuf->b_p_fenc);
|
||||
#endif
|
||||
case PV_FF: return (char_u *)&(curbuf->b_p_ff);
|
||||
#ifdef FEAT_AUTOCMD
|
||||
case PV_FT: return (char_u *)&(curbuf->b_p_ft);
|
||||
#endif
|
||||
case PV_FO: return (char_u *)&(curbuf->b_p_fo);
|
||||
case PV_FLP: return (char_u *)&(curbuf->b_p_flp);
|
||||
case PV_IMI: return (char_u *)&(curbuf->b_p_iminsert);
|
||||
|
@ -11200,10 +11155,8 @@ buf_copy_options(buf_T *buf, int flags)
|
|||
buf->b_p_cink = vim_strsave(p_cink);
|
||||
buf->b_p_cino = vim_strsave(p_cino);
|
||||
#endif
|
||||
#ifdef FEAT_AUTOCMD
|
||||
/* Don't copy 'filetype', it must be detected */
|
||||
buf->b_p_ft = empty_option;
|
||||
#endif
|
||||
buf->b_p_pi = p_pi;
|
||||
#if defined(FEAT_SMARTINDENT) || defined(FEAT_CINDENT)
|
||||
buf->b_p_cinw = vim_strsave(p_cinw);
|
||||
|
|
|
@ -477,9 +477,7 @@ EXTERN char_u *p_efm; /* 'errorformat' */
|
|||
EXTERN char_u *p_gefm; /* 'grepformat' */
|
||||
EXTERN char_u *p_gp; /* 'grepprg' */
|
||||
#endif
|
||||
#ifdef FEAT_AUTOCMD
|
||||
EXTERN char_u *p_ei; /* 'eventignore' */
|
||||
#endif
|
||||
EXTERN int p_ek; /* 'esckeys' */
|
||||
EXTERN int p_exrc; /* 'exrc' */
|
||||
#ifdef FEAT_MBYTE
|
||||
|
@ -1046,9 +1044,7 @@ enum
|
|||
, BV_FF
|
||||
, BV_FLP
|
||||
, BV_FO
|
||||
#ifdef FEAT_AUTOCMD
|
||||
, BV_FT
|
||||
#endif
|
||||
, BV_IMI
|
||||
, BV_IMS
|
||||
#if defined(FEAT_CINDENT) && defined(FEAT_EVAL)
|
||||
|
|
|
@ -152,7 +152,6 @@ mch_inchar(
|
|||
*/
|
||||
if (WaitForChar(raw_in, p_ut * 1000L) == 0)
|
||||
{
|
||||
#ifdef FEAT_AUTOCMD
|
||||
if (trigger_cursorhold() && maxlen >= 3)
|
||||
{
|
||||
buf[0] = K_SPECIAL;
|
||||
|
@ -160,7 +159,6 @@ mch_inchar(
|
|||
buf[2] = (int)KE_CURSORHOLD;
|
||||
return 3;
|
||||
}
|
||||
#endif
|
||||
before_blocking();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -2163,7 +2163,6 @@ Messaging_WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
|
|||
(data->dwData == COPYDATA_RESULT ? 1 :
|
||||
2))) == FAIL)
|
||||
vim_free(str);
|
||||
#ifdef FEAT_AUTOCMD
|
||||
else if (data->dwData == COPYDATA_REPLY)
|
||||
{
|
||||
char_u winstr[30];
|
||||
|
@ -2172,7 +2171,6 @@ Messaging_WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
|
|||
apply_autocmds(EVENT_REMOTEREPLY, winstr, str,
|
||||
TRUE, curbuf);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
|
|
@ -445,7 +445,6 @@ mch_inchar(
|
|||
{
|
||||
/* no character available within 'updatetime' */
|
||||
did_start_blocking = TRUE;
|
||||
#ifdef FEAT_AUTOCMD
|
||||
if (trigger_cursorhold() && maxlen >= 3
|
||||
&& !typebuf_changed(tb_change_cnt))
|
||||
{
|
||||
|
@ -454,7 +453,6 @@ mch_inchar(
|
|||
buf[2] = (int)KE_CURSORHOLD;
|
||||
return 3;
|
||||
}
|
||||
#endif
|
||||
/*
|
||||
* If there is no character available within 'updatetime'
|
||||
* seconds flush all the swap files to disk.
|
||||
|
@ -1133,16 +1131,15 @@ deathtrap SIGDEFARG(sigarg)
|
|||
/* Remember how often we have been called. */
|
||||
++entered;
|
||||
|
||||
#ifdef FEAT_AUTOCMD
|
||||
/* Executing autocommands is likely to use more stack space than we have
|
||||
* available in the signal stack. */
|
||||
block_autocmds();
|
||||
#endif
|
||||
|
||||
#ifdef FEAT_EVAL
|
||||
/* Set the v:dying variable. */
|
||||
set_vim_var_nr(VV_DYING, (long)entered);
|
||||
#endif
|
||||
v_dying = entered;
|
||||
|
||||
#ifdef HAVE_STACK_LIMIT
|
||||
/* Since we are now using the signal stack, need to reset the stack
|
||||
|
|
|
@ -1787,7 +1787,6 @@ mch_inchar(
|
|||
*/
|
||||
if (!WaitForChar(p_ut, FALSE))
|
||||
{
|
||||
#ifdef FEAT_AUTOCMD
|
||||
if (trigger_cursorhold() && maxlen >= 3)
|
||||
{
|
||||
buf[0] = K_SPECIAL;
|
||||
|
@ -1795,7 +1794,6 @@ mch_inchar(
|
|||
buf[2] = (int)KE_CURSORHOLD;
|
||||
return 3;
|
||||
}
|
||||
#endif
|
||||
before_blocking();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -3626,13 +3626,10 @@ qf_fill_buffer(qf_info_T *qi, buf_T *buf, qfline_T *old_last)
|
|||
/* Set the 'filetype' to "qf" each time after filling the buffer.
|
||||
* This resembles reading a file into a buffer, it's more logical when
|
||||
* using autocommands. */
|
||||
#ifdef FEAT_AUTOCMD
|
||||
++curbuf_lock;
|
||||
#endif
|
||||
set_option_value((char_u *)"ft", 0L, (char_u *)"qf", OPT_LOCAL);
|
||||
curbuf->b_p_ma = FALSE;
|
||||
|
||||
#ifdef FEAT_AUTOCMD
|
||||
keep_filetype = TRUE; /* don't detect 'filetype' */
|
||||
apply_autocmds(EVENT_BUFREADPOST, (char_u *)"quickfix", NULL,
|
||||
FALSE, curbuf);
|
||||
|
@ -3640,7 +3637,7 @@ qf_fill_buffer(qf_info_T *qi, buf_T *buf, qfline_T *old_last)
|
|||
FALSE, curbuf);
|
||||
keep_filetype = FALSE;
|
||||
--curbuf_lock;
|
||||
#endif
|
||||
|
||||
/* make sure it will be redrawn */
|
||||
redraw_curbuf_later(NOT_VALID);
|
||||
}
|
||||
|
@ -3682,7 +3679,6 @@ ex_make(exarg_T *eap)
|
|||
win_T *wp = NULL;
|
||||
qf_info_T *qi = &ql_info;
|
||||
int res;
|
||||
#ifdef FEAT_AUTOCMD
|
||||
char_u *au_name = NULL;
|
||||
|
||||
/* Redirect ":grep" to ":vimgrep" if 'grepprg' is "internal". */
|
||||
|
@ -3705,12 +3701,11 @@ ex_make(exarg_T *eap)
|
|||
if (au_name != NULL && apply_autocmds(EVENT_QUICKFIXCMDPRE, au_name,
|
||||
curbuf->b_fname, TRUE, curbuf))
|
||||
{
|
||||
# ifdef FEAT_EVAL
|
||||
#ifdef FEAT_EVAL
|
||||
if (aborting())
|
||||
return;
|
||||
# endif
|
||||
}
|
||||
#endif
|
||||
}
|
||||
#ifdef FEAT_MBYTE
|
||||
enc = (*curbuf->b_p_menc != NUL) ? curbuf->b_p_menc : p_menc;
|
||||
#endif
|
||||
|
@ -3766,7 +3761,6 @@ ex_make(exarg_T *eap)
|
|||
qi = GET_LOC_LIST(wp);
|
||||
if (res >= 0 && qi != NULL)
|
||||
qf_list_changed(qi, qi->qf_curlist);
|
||||
#ifdef FEAT_AUTOCMD
|
||||
if (au_name != NULL)
|
||||
{
|
||||
apply_autocmds(EVENT_QUICKFIXCMDPOST, au_name,
|
||||
|
@ -3776,7 +3770,6 @@ ex_make(exarg_T *eap)
|
|||
else
|
||||
res = 0;
|
||||
}
|
||||
#endif
|
||||
if (res > 0 && !eap->forceit)
|
||||
qf_jump(qi, 0, 0, FALSE); /* display first error */
|
||||
|
||||
|
@ -4105,13 +4098,10 @@ ex_cfile(exarg_T *eap)
|
|||
char_u *enc = NULL;
|
||||
win_T *wp = NULL;
|
||||
qf_info_T *qi = &ql_info;
|
||||
#ifdef FEAT_AUTOCMD
|
||||
char_u *au_name = NULL;
|
||||
int save_qfid;
|
||||
#endif
|
||||
int res;
|
||||
|
||||
#ifdef FEAT_AUTOCMD
|
||||
switch (eap->cmdidx)
|
||||
{
|
||||
case CMD_cfile: au_name = (char_u *)"cfile"; break;
|
||||
|
@ -4124,7 +4114,6 @@ ex_cfile(exarg_T *eap)
|
|||
}
|
||||
if (au_name != NULL)
|
||||
apply_autocmds(EVENT_QUICKFIXCMDPRE, au_name, NULL, FALSE, curbuf);
|
||||
#endif
|
||||
#ifdef FEAT_MBYTE
|
||||
enc = (*curbuf->b_p_menc != NUL) ? curbuf->b_p_menc : p_menc;
|
||||
#endif
|
||||
|
@ -4164,7 +4153,6 @@ ex_cfile(exarg_T *eap)
|
|||
qi = GET_LOC_LIST(wp);
|
||||
if (res >= 0 && qi != NULL)
|
||||
qf_list_changed(qi, qi->qf_curlist);
|
||||
#ifdef FEAT_AUTOCMD
|
||||
if (qi != NULL)
|
||||
save_qfid = qi->qf_lists[qi->qf_curlist].qf_id;
|
||||
if (au_name != NULL)
|
||||
|
@ -4174,7 +4162,6 @@ ex_cfile(exarg_T *eap)
|
|||
* is still valid. */
|
||||
if (qi != NULL && !qflist_valid(wp, save_qfid))
|
||||
return;
|
||||
#endif
|
||||
if (res > 0 && (eap->cmdidx == CMD_cfile || eap->cmdidx == CMD_lfile))
|
||||
qf_jump(qi, 0, 0, eap->forceit); /* display first error */
|
||||
}
|
||||
|
@ -4198,11 +4185,9 @@ ex_vimgrep(exarg_T *eap)
|
|||
int fi;
|
||||
qf_info_T *qi = &ql_info;
|
||||
int loclist_cmd = FALSE;
|
||||
#ifdef FEAT_AUTOCMD
|
||||
int_u save_qfid;
|
||||
qfline_T *cur_qf_start;
|
||||
win_T *wp;
|
||||
#endif
|
||||
long lnum;
|
||||
buf_T *buf;
|
||||
int duplicate_name = FALSE;
|
||||
|
@ -4212,7 +4197,7 @@ ex_vimgrep(exarg_T *eap)
|
|||
buf_T *first_match_buf = NULL;
|
||||
time_t seconds = 0;
|
||||
int save_mls;
|
||||
#if defined(FEAT_AUTOCMD) && defined(FEAT_SYN_HL)
|
||||
#if defined(FEAT_SYN_HL)
|
||||
char_u *save_ei = NULL;
|
||||
#endif
|
||||
aco_save_T aco;
|
||||
|
@ -4222,7 +4207,6 @@ ex_vimgrep(exarg_T *eap)
|
|||
char_u *dirname_start = NULL;
|
||||
char_u *dirname_now = NULL;
|
||||
char_u *target_dir = NULL;
|
||||
#ifdef FEAT_AUTOCMD
|
||||
char_u *au_name = NULL;
|
||||
|
||||
switch (eap->cmdidx)
|
||||
|
@ -4240,12 +4224,11 @@ ex_vimgrep(exarg_T *eap)
|
|||
if (au_name != NULL && apply_autocmds(EVENT_QUICKFIXCMDPRE, au_name,
|
||||
curbuf->b_fname, TRUE, curbuf))
|
||||
{
|
||||
# ifdef FEAT_EVAL
|
||||
#ifdef FEAT_EVAL
|
||||
if (aborting())
|
||||
return;
|
||||
# endif
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
if (eap->cmdidx == CMD_lgrep
|
||||
|| eap->cmdidx == CMD_lvimgrep
|
||||
|
@ -4325,12 +4308,10 @@ ex_vimgrep(exarg_T *eap)
|
|||
* ":lcd %:p:h" changes the meaning of short path names. */
|
||||
mch_dirname(dirname_start, MAXPATHL);
|
||||
|
||||
#ifdef FEAT_AUTOCMD
|
||||
/* Remember the current values of the quickfix list and qf_start, so that
|
||||
* we can check for autocommands changing the current quickfix list. */
|
||||
save_qfid = qi->qf_lists[qi->qf_curlist].qf_id;
|
||||
cur_qf_start = qi->qf_lists[qi->qf_curlist].qf_start;
|
||||
#endif
|
||||
|
||||
seconds = (time_t)0;
|
||||
for (fi = 0; fi < fcount && !got_int && tomatch > 0; ++fi)
|
||||
|
@ -4365,7 +4346,7 @@ ex_vimgrep(exarg_T *eap)
|
|||
using_dummy = TRUE;
|
||||
redraw_for_dummy = TRUE;
|
||||
|
||||
#if defined(FEAT_AUTOCMD) && defined(FEAT_SYN_HL)
|
||||
#if defined(FEAT_SYN_HL)
|
||||
/* Don't do Filetype autocommands to avoid loading syntax and
|
||||
* indent scripts, a great speed improvement. */
|
||||
save_ei = au_event_disable(",Filetype");
|
||||
|
@ -4379,7 +4360,7 @@ ex_vimgrep(exarg_T *eap)
|
|||
buf = load_dummy_buffer(fname, dirname_start, dirname_now);
|
||||
|
||||
p_mls = save_mls;
|
||||
#if defined(FEAT_AUTOCMD) && defined(FEAT_SYN_HL)
|
||||
#if defined(FEAT_SYN_HL)
|
||||
au_event_restore(save_ei);
|
||||
#endif
|
||||
}
|
||||
|
@ -4387,7 +4368,6 @@ ex_vimgrep(exarg_T *eap)
|
|||
/* Use existing, loaded buffer. */
|
||||
using_dummy = FALSE;
|
||||
|
||||
#ifdef FEAT_AUTOCMD
|
||||
if (loclist_cmd)
|
||||
{
|
||||
/*
|
||||
|
@ -4419,7 +4399,6 @@ ex_vimgrep(exarg_T *eap)
|
|||
cur_qf_start = qi->qf_lists[qi->qf_curlist].qf_start;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
if (buf == NULL)
|
||||
{
|
||||
|
@ -4475,9 +4454,7 @@ ex_vimgrep(exarg_T *eap)
|
|||
if (got_int)
|
||||
break;
|
||||
}
|
||||
#ifdef FEAT_AUTOCMD
|
||||
cur_qf_start = qi->qf_lists[qi->qf_curlist].qf_start;
|
||||
#endif
|
||||
|
||||
if (using_dummy)
|
||||
{
|
||||
|
@ -4532,7 +4509,7 @@ ex_vimgrep(exarg_T *eap)
|
|||
* need to be done (again). But not the window-local
|
||||
* options! */
|
||||
aucmd_prepbuf(&aco, buf);
|
||||
#if defined(FEAT_AUTOCMD) && defined(FEAT_SYN_HL)
|
||||
#if defined(FEAT_SYN_HL)
|
||||
apply_autocmds(EVENT_FILETYPE, buf->b_p_ft,
|
||||
buf->b_fname, TRUE, buf);
|
||||
#endif
|
||||
|
@ -4552,7 +4529,6 @@ ex_vimgrep(exarg_T *eap)
|
|||
|
||||
qf_update_buffer(qi, NULL);
|
||||
|
||||
#ifdef FEAT_AUTOCMD
|
||||
if (au_name != NULL)
|
||||
apply_autocmds(EVENT_QUICKFIXCMDPOST, au_name,
|
||||
curbuf->b_fname, TRUE, curbuf);
|
||||
|
@ -4563,7 +4539,6 @@ ex_vimgrep(exarg_T *eap)
|
|||
wp = loclist_cmd ? curwin : NULL;
|
||||
if (!qflist_valid(wp, save_qfid))
|
||||
goto theend;
|
||||
#endif
|
||||
|
||||
/* Jump to first match. */
|
||||
if (qi->qf_lists[qi->qf_curlist].qf_count > 0)
|
||||
|
@ -4748,7 +4723,7 @@ wipe_dummy_buffer(buf_T *buf, char_u *dirname_start)
|
|||
{
|
||||
if (curbuf != buf) /* safety check */
|
||||
{
|
||||
#if defined(FEAT_AUTOCMD) && defined(FEAT_EVAL)
|
||||
#if defined(FEAT_EVAL)
|
||||
cleanup_T cs;
|
||||
|
||||
/* Reset the error/interrupt/exception state here so that aborting()
|
||||
|
@ -4759,7 +4734,7 @@ wipe_dummy_buffer(buf_T *buf, char_u *dirname_start)
|
|||
|
||||
wipe_buffer(buf, FALSE);
|
||||
|
||||
#if defined(FEAT_AUTOCMD) && defined(FEAT_EVAL)
|
||||
#if defined(FEAT_EVAL)
|
||||
/* Restore the error/interrupt/exception state if not discarded by a
|
||||
* new aborting error, interrupt, or uncaught exception. */
|
||||
leave_cleanup(&cs);
|
||||
|
@ -5598,12 +5573,9 @@ ex_cbuffer(exarg_T *eap)
|
|||
{
|
||||
buf_T *buf = NULL;
|
||||
qf_info_T *qi = &ql_info;
|
||||
#ifdef FEAT_AUTOCMD
|
||||
char_u *au_name = NULL;
|
||||
#endif
|
||||
int res;
|
||||
|
||||
#ifdef FEAT_AUTOCMD
|
||||
switch (eap->cmdidx)
|
||||
{
|
||||
case CMD_cbuffer: au_name = (char_u *)"cbuffer"; break;
|
||||
|
@ -5617,12 +5589,11 @@ ex_cbuffer(exarg_T *eap)
|
|||
if (au_name != NULL && apply_autocmds(EVENT_QUICKFIXCMDPRE, au_name,
|
||||
curbuf->b_fname, TRUE, curbuf))
|
||||
{
|
||||
# ifdef FEAT_EVAL
|
||||
#ifdef FEAT_EVAL
|
||||
if (aborting())
|
||||
return;
|
||||
# endif
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
/* Must come after autocommands. */
|
||||
if (eap->cmdidx == CMD_lbuffer
|
||||
|
@ -5670,11 +5641,9 @@ ex_cbuffer(exarg_T *eap)
|
|||
qf_title, NULL);
|
||||
if (res >= 0)
|
||||
qf_list_changed(qi, qi->qf_curlist);
|
||||
#ifdef FEAT_AUTOCMD
|
||||
if (au_name != NULL)
|
||||
apply_autocmds(EVENT_QUICKFIXCMDPOST, au_name,
|
||||
curbuf->b_fname, TRUE, curbuf);
|
||||
#endif
|
||||
if (res > 0 && (eap->cmdidx == CMD_cbuffer ||
|
||||
eap->cmdidx == CMD_lbuffer))
|
||||
qf_jump(qi, 0, 0, eap->forceit); /* display first error */
|
||||
|
@ -5692,12 +5661,9 @@ ex_cexpr(exarg_T *eap)
|
|||
{
|
||||
typval_T *tv;
|
||||
qf_info_T *qi = &ql_info;
|
||||
#ifdef FEAT_AUTOCMD
|
||||
char_u *au_name = NULL;
|
||||
#endif
|
||||
int res;
|
||||
|
||||
#ifdef FEAT_AUTOCMD
|
||||
switch (eap->cmdidx)
|
||||
{
|
||||
case CMD_cexpr: au_name = (char_u *)"cexpr"; break;
|
||||
|
@ -5711,12 +5677,11 @@ ex_cexpr(exarg_T *eap)
|
|||
if (au_name != NULL && apply_autocmds(EVENT_QUICKFIXCMDPRE, au_name,
|
||||
curbuf->b_fname, TRUE, curbuf))
|
||||
{
|
||||
# ifdef FEAT_EVAL
|
||||
#ifdef FEAT_EVAL
|
||||
if (aborting())
|
||||
return;
|
||||
# endif
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
if (eap->cmdidx == CMD_lexpr
|
||||
|| eap->cmdidx == CMD_lgetexpr
|
||||
|
@ -5742,11 +5707,9 @@ ex_cexpr(exarg_T *eap)
|
|||
NULL);
|
||||
if (res >= 0)
|
||||
qf_list_changed(qi, qi->qf_curlist);
|
||||
#ifdef FEAT_AUTOCMD
|
||||
if (au_name != NULL)
|
||||
apply_autocmds(EVENT_QUICKFIXCMDPOST, au_name,
|
||||
curbuf->b_fname, TRUE, curbuf);
|
||||
#endif
|
||||
if (res > 0 && (eap->cmdidx == CMD_cexpr ||
|
||||
eap->cmdidx == CMD_lexpr))
|
||||
qf_jump(qi, 0, 0, eap->forceit); /* display first error */
|
||||
|
@ -5779,16 +5742,13 @@ ex_helpgrep(exarg_T *eap)
|
|||
qf_info_T *save_qi;
|
||||
int new_qi = FALSE;
|
||||
win_T *wp;
|
||||
#ifdef FEAT_AUTOCMD
|
||||
char_u *au_name = NULL;
|
||||
#endif
|
||||
|
||||
#ifdef FEAT_MULTI_LANG
|
||||
/* Check for a specified language */
|
||||
lang = check_help_lang(eap->arg);
|
||||
#endif
|
||||
|
||||
#ifdef FEAT_AUTOCMD
|
||||
switch (eap->cmdidx)
|
||||
{
|
||||
case CMD_helpgrep: au_name = (char_u *)"helpgrep"; break;
|
||||
|
@ -5798,12 +5758,11 @@ ex_helpgrep(exarg_T *eap)
|
|||
if (au_name != NULL && apply_autocmds(EVENT_QUICKFIXCMDPRE, au_name,
|
||||
curbuf->b_fname, TRUE, curbuf))
|
||||
{
|
||||
# ifdef FEAT_EVAL
|
||||
#ifdef FEAT_EVAL
|
||||
if (aborting())
|
||||
return;
|
||||
# endif
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
/* Make 'cpoptions' empty, the 'l' flag should not be used here. */
|
||||
save_cpo = p_cpo;
|
||||
|
@ -5965,7 +5924,6 @@ ex_helpgrep(exarg_T *eap)
|
|||
qf_list_changed(qi, qi->qf_curlist);
|
||||
qf_update_buffer(qi, NULL);
|
||||
|
||||
#ifdef FEAT_AUTOCMD
|
||||
if (au_name != NULL)
|
||||
{
|
||||
apply_autocmds(EVENT_QUICKFIXCMDPOST, au_name,
|
||||
|
@ -5974,7 +5932,6 @@ ex_helpgrep(exarg_T *eap)
|
|||
/* autocommands made "qi" invalid */
|
||||
return;
|
||||
}
|
||||
#endif
|
||||
|
||||
/* Jump to first match. */
|
||||
if (qi->qf_lists[qi->qf_curlist].qf_count > 0)
|
||||
|
|
|
@ -8767,11 +8767,9 @@ screenalloc(int doclear)
|
|||
tabpage_T *tp;
|
||||
static int entered = FALSE; /* avoid recursiveness */
|
||||
static int done_outofmem_msg = FALSE; /* did outofmem message */
|
||||
#ifdef FEAT_AUTOCMD
|
||||
int retry_count = 0;
|
||||
|
||||
retry:
|
||||
#endif
|
||||
/*
|
||||
* Allocation of the screen buffers is done only when the size changes and
|
||||
* when Rows and Columns have been set and we have started doing full
|
||||
|
@ -8823,10 +8821,8 @@ retry:
|
|||
*/
|
||||
FOR_ALL_TAB_WINDOWS(tp, wp)
|
||||
win_free_lsize(wp);
|
||||
#ifdef FEAT_AUTOCMD
|
||||
if (aucmd_win != NULL)
|
||||
win_free_lsize(aucmd_win);
|
||||
#endif
|
||||
|
||||
new_ScreenLines = (schar_T *)lalloc((long_u)(
|
||||
(Rows + 1) * Columns * sizeof(schar_T)), FALSE);
|
||||
|
@ -8859,11 +8855,9 @@ retry:
|
|||
goto give_up;
|
||||
}
|
||||
}
|
||||
#ifdef FEAT_AUTOCMD
|
||||
if (aucmd_win != NULL && aucmd_win->w_lines == NULL
|
||||
&& win_alloc_lines(aucmd_win) == FAIL)
|
||||
outofmem = TRUE;
|
||||
#endif
|
||||
give_up:
|
||||
|
||||
#ifdef FEAT_MBYTE
|
||||
|
@ -9032,7 +9026,6 @@ give_up:
|
|||
entered = FALSE;
|
||||
--RedrawingDisabled;
|
||||
|
||||
#ifdef FEAT_AUTOCMD
|
||||
/*
|
||||
* Do not apply autocommands more than 3 times to avoid an endless loop
|
||||
* in case applying autocommands always changes Rows or Columns.
|
||||
|
@ -9044,7 +9037,6 @@ give_up:
|
|||
* jump back to check if we need to allocate the screen again. */
|
||||
goto retry;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
void
|
||||
|
|
16
src/search.c
16
src/search.c
|
@ -97,10 +97,8 @@ static char_u lastc_bytes[MB_MAXBYTES + 1];
|
|||
static int lastc_bytelen = 1; /* >1 for multi-byte char */
|
||||
#endif
|
||||
|
||||
#if defined(FEAT_AUTOCMD) || defined(FEAT_EVAL) || defined(PROTO)
|
||||
/* copy of spats[], for keeping the search patterns while executing autocmds */
|
||||
static struct spat saved_spats[2];
|
||||
#endif
|
||||
# ifdef FEAT_SEARCH_EXTRA
|
||||
/* copy of spats[RE_SEARCH], for keeping the search patterns while incremental
|
||||
* searching */
|
||||
|
@ -300,7 +298,6 @@ save_re_pat(int idx, char_u *pat, int magic)
|
|||
}
|
||||
}
|
||||
|
||||
#if defined(FEAT_AUTOCMD) || defined(FEAT_EVAL) || defined(PROTO)
|
||||
/*
|
||||
* Save the search patterns, so they can be restored later.
|
||||
* Used before/after executing autocommands and user functions.
|
||||
|
@ -318,10 +315,10 @@ save_search_patterns(void)
|
|||
saved_spats[1] = spats[1];
|
||||
if (spats[1].pat != NULL)
|
||||
saved_spats[1].pat = vim_strsave(spats[1].pat);
|
||||
#ifdef FEAT_SEARCH_EXTRA
|
||||
saved_last_idx = last_idx;
|
||||
# ifdef FEAT_SEARCH_EXTRA
|
||||
saved_no_hlsearch = no_hlsearch;
|
||||
# endif
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -332,18 +329,17 @@ restore_search_patterns(void)
|
|||
{
|
||||
vim_free(spats[0].pat);
|
||||
spats[0] = saved_spats[0];
|
||||
# if defined(FEAT_EVAL)
|
||||
#if defined(FEAT_EVAL)
|
||||
set_vv_searchforward();
|
||||
# endif
|
||||
#endif
|
||||
vim_free(spats[1].pat);
|
||||
spats[1] = saved_spats[1];
|
||||
#ifdef FEAT_SEARCH_EXTRA
|
||||
last_idx = saved_last_idx;
|
||||
# ifdef FEAT_SEARCH_EXTRA
|
||||
SET_NO_HLSEARCH(saved_no_hlsearch);
|
||||
# endif
|
||||
#endif
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
#if defined(EXITFREE) || defined(PROTO)
|
||||
void
|
||||
|
|
12
src/spell.c
12
src/spell.c
|
@ -1849,9 +1849,7 @@ spell_load_lang(char_u *lang)
|
|||
char_u fname_enc[85];
|
||||
int r;
|
||||
spelload_T sl;
|
||||
#ifdef FEAT_AUTOCMD
|
||||
int round;
|
||||
#endif
|
||||
|
||||
/* Copy the language name to pass it to spell_load_cb() as a cookie.
|
||||
* It's truncated when an error is detected. */
|
||||
|
@ -1859,11 +1857,9 @@ spell_load_lang(char_u *lang)
|
|||
sl.sl_slang = NULL;
|
||||
sl.sl_nobreak = FALSE;
|
||||
|
||||
#ifdef FEAT_AUTOCMD
|
||||
/* We may retry when no spell file is found for the language, an
|
||||
* autocommand may load it then. */
|
||||
for (round = 1; round <= 2; ++round)
|
||||
#endif
|
||||
{
|
||||
/*
|
||||
* Find the first spell file for "lang" in 'runtimepath' and load it.
|
||||
|
@ -1889,17 +1885,13 @@ spell_load_lang(char_u *lang)
|
|||
lang);
|
||||
r = do_in_runtimepath(fname_enc, 0, spell_load_cb, &sl);
|
||||
|
||||
#ifdef FEAT_AUTOCMD
|
||||
if (r == FAIL && *sl.sl_lang != NUL && round == 1
|
||||
&& apply_autocmds(EVENT_SPELLFILEMISSING, lang,
|
||||
curbuf->b_fname, FALSE, curbuf))
|
||||
continue;
|
||||
break;
|
||||
#endif
|
||||
}
|
||||
#ifdef FEAT_AUTOCMD
|
||||
break;
|
||||
#endif
|
||||
}
|
||||
|
||||
if (r == FAIL)
|
||||
|
@ -2348,11 +2340,9 @@ did_set_spelllang(win_T *wp)
|
|||
static int recursive = FALSE;
|
||||
char_u *ret_msg = NULL;
|
||||
char_u *spl_copy;
|
||||
#ifdef FEAT_AUTOCMD
|
||||
bufref_T bufref;
|
||||
|
||||
set_bufref(&bufref, wp->w_buffer);
|
||||
#endif
|
||||
|
||||
/* We don't want to do this recursively. May happen when a language is
|
||||
* not available and the SpellFileMissing autocommand opens a new buffer
|
||||
|
@ -2449,7 +2439,6 @@ did_set_spelllang(win_T *wp)
|
|||
else
|
||||
{
|
||||
spell_load_lang(lang);
|
||||
#ifdef FEAT_AUTOCMD
|
||||
/* SpellFileMissing autocommands may do anything, including
|
||||
* destroying the buffer we are using... */
|
||||
if (!bufref_valid(&bufref))
|
||||
|
@ -2457,7 +2446,6 @@ did_set_spelllang(win_T *wp)
|
|||
ret_msg = (char_u *)N_("E797: SpellFileMissing autocommand deleted buffer");
|
||||
goto theend;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -586,9 +586,7 @@ typedef struct
|
|||
int lockmarks; /* TRUE when ":lockmarks" was used */
|
||||
int keeppatterns; /* TRUE when ":keeppatterns" was used */
|
||||
int noswapfile; /* TRUE when ":noswapfile" was used */
|
||||
# ifdef FEAT_AUTOCMD
|
||||
char_u *save_ei; /* saved value of 'eventignore' */
|
||||
# endif
|
||||
regmatch_T filter_regmatch; /* set by :filter /pat/ */
|
||||
int filter_force; /* set for :filter! */
|
||||
} cmdmod_T;
|
||||
|
@ -1946,10 +1944,8 @@ struct file_buffer
|
|||
int b_nwindows; /* nr of windows open on this buffer */
|
||||
|
||||
int b_flags; /* various BF_ flags */
|
||||
#ifdef FEAT_AUTOCMD
|
||||
int b_locked; /* Buffer is being closed or referenced, don't
|
||||
let autocommands wipe it out. */
|
||||
#endif
|
||||
|
||||
/*
|
||||
* b_ffname has the full path of the file (NULL for no name).
|
||||
|
@ -1986,13 +1982,11 @@ struct file_buffer
|
|||
incremented for each change, also for undo */
|
||||
#define CHANGEDTICK(buf) ((buf)->b_ct_di.di_tv.vval.v_number)
|
||||
|
||||
#ifdef FEAT_AUTOCMD
|
||||
varnumber_T b_last_changedtick; /* b:changedtick when TextChanged or
|
||||
TextChangedI was last triggered. */
|
||||
# ifdef FEAT_INS_EXPAND
|
||||
#ifdef FEAT_INS_EXPAND
|
||||
varnumber_T b_last_changedtick_pum; /* b:changedtick when TextChangedP was
|
||||
last triggered. */
|
||||
# endif
|
||||
#endif
|
||||
|
||||
int b_saving; /* Set to TRUE if we are in the middle of
|
||||
|
@ -2171,9 +2165,7 @@ struct file_buffer
|
|||
char_u *b_p_fenc; /* 'fileencoding' */
|
||||
#endif
|
||||
char_u *b_p_ff; /* 'fileformat' */
|
||||
#ifdef FEAT_AUTOCMD
|
||||
char_u *b_p_ft; /* 'filetype' */
|
||||
#endif
|
||||
char_u *b_p_fo; /* 'formatoptions' */
|
||||
char_u *b_p_flp; /* 'formatlistpat' */
|
||||
int b_p_inf; /* 'infercase' */
|
||||
|
@ -2448,12 +2440,8 @@ struct diffblock_S
|
|||
#endif
|
||||
|
||||
#define SNAP_HELP_IDX 0
|
||||
#ifdef FEAT_AUTOCMD
|
||||
# define SNAP_AUCMD_IDX 1
|
||||
# define SNAP_COUNT 2
|
||||
#else
|
||||
# define SNAP_COUNT 1
|
||||
#endif
|
||||
#define SNAP_AUCMD_IDX 1
|
||||
#define SNAP_COUNT 2
|
||||
|
||||
/*
|
||||
* Tab pages point to the top frame of each tab page.
|
||||
|
@ -2642,10 +2630,8 @@ struct window_S
|
|||
|
||||
win_T *w_prev; /* link to previous window */
|
||||
win_T *w_next; /* link to next window */
|
||||
#ifdef FEAT_AUTOCMD
|
||||
int w_closing; /* window is being closed, don't let
|
||||
autocommands close it too. */
|
||||
#endif
|
||||
|
||||
frame_T *w_frame; /* frame containing this window */
|
||||
|
||||
|
@ -2676,10 +2662,8 @@ struct window_S
|
|||
*/
|
||||
linenr_T w_topline; /* buffer line number of the line at the
|
||||
top of the window */
|
||||
#ifdef FEAT_AUTOCMD
|
||||
char w_topline_was_set; /* flag set to TRUE when topline is set,
|
||||
e.g. by winrestview() */
|
||||
#endif
|
||||
#ifdef FEAT_DIFF
|
||||
int w_topfill; /* number of filler lines above w_topline */
|
||||
int w_old_topfill; /* w_topfill at last redraw */
|
||||
|
@ -2973,10 +2957,8 @@ typedef struct oparg_S
|
|||
int block_mode; /* current operator is Visual block mode */
|
||||
colnr_T start_vcol; /* start col for block mode operator */
|
||||
colnr_T end_vcol; /* end col for block mode operator */
|
||||
#ifdef FEAT_AUTOCMD
|
||||
long prev_opcount; /* ca.opcount saved for K_CURSORHOLD */
|
||||
long prev_count0; /* ca.count0 saved for K_CURSORHOLD */
|
||||
#endif
|
||||
} oparg_T;
|
||||
|
||||
/*
|
||||
|
@ -3160,18 +3142,16 @@ typedef int vimmenu_T;
|
|||
|
||||
/*
|
||||
* Struct to save values in before executing autocommands for a buffer that is
|
||||
* not the current buffer. Without FEAT_AUTOCMD only "curbuf" is remembered.
|
||||
* not the current buffer.
|
||||
*/
|
||||
typedef struct
|
||||
{
|
||||
buf_T *save_curbuf; /* saved curbuf */
|
||||
#ifdef FEAT_AUTOCMD
|
||||
int use_aucmd_win; /* using aucmd_win */
|
||||
win_T *save_curwin; /* saved curwin */
|
||||
win_T *new_curwin; /* new curwin */
|
||||
bufref_T new_curbuf; /* new curbuf */
|
||||
char_u *globaldir; /* saved value of globaldir */
|
||||
#endif
|
||||
} aco_save_T;
|
||||
|
||||
/*
|
||||
|
|
|
@ -6420,11 +6420,9 @@ ex_ownsyntax(exarg_T *eap)
|
|||
if (old_value != NULL)
|
||||
old_value = vim_strsave(old_value);
|
||||
|
||||
#ifdef FEAT_AUTOCMD
|
||||
/* Apply the "syntax" autocommand event, this finds and loads the syntax
|
||||
* file. */
|
||||
apply_autocmds(EVENT_SYNTAX, eap->arg, curbuf->b_fname, TRUE, curbuf);
|
||||
#endif
|
||||
|
||||
/* move value of b:current_syntax to w:current_syntax */
|
||||
new_value = get_var_value((char_u *)"b:current_syntax");
|
||||
|
@ -6995,10 +6993,8 @@ static char *(highlight_init_light[]) = {
|
|||
CENT("Conceal ctermbg=DarkGrey ctermfg=LightGrey",
|
||||
"Conceal ctermbg=DarkGrey ctermfg=LightGrey guibg=DarkGrey guifg=LightGrey"),
|
||||
#endif
|
||||
#ifdef FEAT_AUTOCMD
|
||||
CENT("MatchParen term=reverse ctermbg=Cyan",
|
||||
"MatchParen term=reverse ctermbg=Cyan guibg=Cyan"),
|
||||
#endif
|
||||
#ifdef FEAT_GUI
|
||||
"Normal gui=NONE",
|
||||
#endif
|
||||
|
@ -7089,10 +7085,8 @@ static char *(highlight_init_dark[]) = {
|
|||
CENT("ColorColumn term=reverse ctermbg=DarkRed",
|
||||
"ColorColumn term=reverse ctermbg=DarkRed guibg=DarkRed"),
|
||||
#endif
|
||||
#ifdef FEAT_AUTOCMD
|
||||
CENT("MatchParen term=reverse ctermbg=DarkCyan",
|
||||
"MatchParen term=reverse ctermbg=DarkCyan guibg=DarkCyan"),
|
||||
#endif
|
||||
#ifdef FEAT_CONCEAL
|
||||
CENT("Conceal ctermbg=DarkGrey ctermfg=LightGrey",
|
||||
"Conceal ctermbg=DarkGrey ctermfg=LightGrey guibg=DarkGrey guifg=LightGrey"),
|
||||
|
@ -7233,9 +7227,7 @@ load_colors(char_u *name)
|
|||
sprintf((char *)buf, "colors/%s.vim", name);
|
||||
retval = source_runtime(buf, DIP_START + DIP_OPT);
|
||||
vim_free(buf);
|
||||
#ifdef FEAT_AUTOCMD
|
||||
apply_autocmds(EVENT_COLORSCHEME, name, curbuf->b_fname, FALSE, curbuf);
|
||||
#endif
|
||||
}
|
||||
recursive = FALSE;
|
||||
|
||||
|
|
10
src/tag.c
10
src/tag.c
|
@ -1017,7 +1017,7 @@ do_tag(
|
|||
}
|
||||
}
|
||||
|
||||
#ifdef FEAT_AUTOCMD
|
||||
#if defined(FEAT_EVAL)
|
||||
/* Let the SwapExists event know what tag we are jumping to. */
|
||||
vim_snprintf((char *)IObuff, IOSIZE, ":ta %s\r", name);
|
||||
set_vim_var_string(VV_SWAPCOMMAND, IObuff, -1);
|
||||
|
@ -1028,7 +1028,7 @@ do_tag(
|
|||
*/
|
||||
i = jumpto_tag(matches[cur_match], forceit, type != DT_CSCOPE);
|
||||
|
||||
#ifdef FEAT_AUTOCMD
|
||||
#if defined(FEAT_EVAL)
|
||||
set_vim_var_string(VV_SWAPCOMMAND, NULL, -1);
|
||||
#endif
|
||||
|
||||
|
@ -3174,11 +3174,7 @@ jumpto_tag(
|
|||
* file. Also accept a file name for which there is a matching BufReadCmd
|
||||
* autocommand event (e.g., http://sys/file).
|
||||
*/
|
||||
if (mch_getperm(fname) < 0
|
||||
#ifdef FEAT_AUTOCMD
|
||||
&& !has_autocmd(EVENT_BUFREADCMD, fname, NULL)
|
||||
#endif
|
||||
)
|
||||
if (mch_getperm(fname) < 0 && !has_autocmd(EVENT_BUFREADCMD, fname, NULL))
|
||||
{
|
||||
retval = NOTAGFILE;
|
||||
vim_free(nofile_fname);
|
||||
|
|
|
@ -1985,7 +1985,6 @@ set_termname(char_u *term)
|
|||
scroll_region_reset(); /* In case Rows changed */
|
||||
check_map_keycodes(); /* check mappings for terminal codes used */
|
||||
|
||||
#ifdef FEAT_AUTOCMD
|
||||
{
|
||||
bufref_T old_curbuf;
|
||||
|
||||
|
@ -2003,7 +2002,6 @@ set_termname(char_u *term)
|
|||
if (bufref_valid(&old_curbuf))
|
||||
curbuf = old_curbuf.br_buf;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
#ifdef FEAT_TERMRESPONSE
|
||||
|
@ -4515,9 +4513,7 @@ check_termcode(
|
|||
|
||||
LOG_TR("Received U7 status");
|
||||
u7_status = STATUS_GOT;
|
||||
# ifdef FEAT_AUTOCMD
|
||||
did_cursorhold = TRUE;
|
||||
# endif
|
||||
if (col == 2)
|
||||
aw = "single";
|
||||
else if (col == 3)
|
||||
|
@ -4560,9 +4556,7 @@ check_termcode(
|
|||
|
||||
LOG_TR("Received CRV response");
|
||||
crv_status = STATUS_GOT;
|
||||
# ifdef FEAT_AUTOCMD
|
||||
did_cursorhold = TRUE;
|
||||
# endif
|
||||
|
||||
/* If this code starts with CSI, you can bet that the
|
||||
* terminal uses 8-bit codes. */
|
||||
|
@ -4702,10 +4696,8 @@ check_termcode(
|
|||
# ifdef FEAT_EVAL
|
||||
set_vim_var_string(VV_TERMRESPONSE, tp, slen);
|
||||
# endif
|
||||
# ifdef FEAT_AUTOCMD
|
||||
apply_autocmds(EVENT_TERMRESPONSE,
|
||||
NULL, NULL, FALSE, curbuf);
|
||||
# endif
|
||||
key_name[0] = (int)KS_EXTRA;
|
||||
key_name[1] = (int)KE_IGNORE;
|
||||
}
|
||||
|
|
|
@ -38,6 +38,10 @@
|
|||
* in tl_scrollback are no longer used.
|
||||
*
|
||||
* TODO:
|
||||
* - What to store in a session file? Shell at the prompt would be OK to
|
||||
* restore, but others may not. Open the window and let the user start the
|
||||
* command? Also see #2650.
|
||||
* - Adding WinBar to terminal window doesn't display, text isn't shifted down.
|
||||
* - When using 'termguicolors' still use the 16 ANSI colors as-is. Helps for
|
||||
* a job that uses 16 colors while Vim is using > 256.
|
||||
* - in GUI vertical split causes problems. Cursor is flickering. (Hirohito
|
||||
|
@ -46,24 +50,20 @@
|
|||
* - after resizing windows overlap. (Boris Staletic, #2164)
|
||||
* - Redirecting output does not work on MS-Windows, Test_terminal_redir_file()
|
||||
* is disabled.
|
||||
* - if the job in the terminal does not support the mouse, we can use the
|
||||
* mouse in the Terminal window for copy/paste and scrolling.
|
||||
* - cursor blinks in terminal on widows with a timer. (xtal8, #2142)
|
||||
* - What to store in a session file? Shell at the prompt would be OK to
|
||||
* restore, but others may not. Open the window and let the user start the
|
||||
* command? Also see #2650.
|
||||
* - When closing gvim with an active terminal buffer, the dialog suggests
|
||||
* saving the buffer. Should say something else. (Manas Thakur, #2215)
|
||||
* Also: #2223
|
||||
* - Termdebug does not work when Vim build with mzscheme. gdb hangs.
|
||||
* - MS-Windows GUI: WinBar has tearoff item
|
||||
* - Adding WinBar to terminal window doesn't display, text isn't shifted down.
|
||||
* - MS-Windows GUI: still need to type a key after shell exits? #1924
|
||||
* - After executing a shell command the status line isn't redraw.
|
||||
* - implement term_setsize()
|
||||
* - add test for giving error for invalid 'termsize' value.
|
||||
* - support minimal size when 'termsize' is "rows*cols".
|
||||
* - support minimal size when 'termsize' is empty?
|
||||
* - if the job in the terminal does not support the mouse, we can use the
|
||||
* mouse in the Terminal window for copy/paste and scrolling.
|
||||
* - GUI: when using tabs, focus in terminal, click on tab does not work.
|
||||
* - GUI: when 'confirm' is set and trying to exit Vim, dialog offers to save
|
||||
* changes to "!shell".
|
||||
|
@ -506,14 +506,12 @@ term_start(typval_T *argvar, jobopt_T *opt, int without_job, int forceit)
|
|||
* a deadlock if the job is waiting for Vim to read. */
|
||||
channel_set_nonblock(term->tl_job->jv_channel, PART_IN);
|
||||
|
||||
#ifdef FEAT_AUTOCMD
|
||||
if (!opt->jo_hidden)
|
||||
{
|
||||
++curbuf->b_locked;
|
||||
apply_autocmds(EVENT_BUFWINENTER, NULL, NULL, FALSE, curbuf);
|
||||
--curbuf->b_locked;
|
||||
}
|
||||
#endif
|
||||
|
||||
if (old_curbuf != NULL)
|
||||
{
|
||||
|
@ -938,9 +936,7 @@ term_convert_key(term_T *term, int c, char *buf)
|
|||
#ifdef FEAT_DND
|
||||
case K_DROP: return 0;
|
||||
#endif
|
||||
#ifdef FEAT_AUTOCMD
|
||||
case K_CURSORHOLD: return 0;
|
||||
#endif
|
||||
case K_PS: vterm_keyboard_start_paste(vterm);
|
||||
other = TRUE;
|
||||
break;
|
||||
|
|
4
src/ui.c
4
src/ui.c
|
@ -3299,13 +3299,11 @@ ui_focus_change(
|
|||
last_time = time(NULL);
|
||||
}
|
||||
|
||||
#ifdef FEAT_AUTOCMD
|
||||
/*
|
||||
* Fire the focus gained/lost autocommand.
|
||||
*/
|
||||
need_redraw |= apply_autocmds(in_focus ? EVENT_FOCUSGAINED
|
||||
: EVENT_FOCUSLOST, NULL, NULL, FALSE, curbuf);
|
||||
#endif
|
||||
|
||||
if (need_redraw)
|
||||
{
|
||||
|
@ -3339,7 +3337,7 @@ ui_focus_change(
|
|||
}
|
||||
#endif
|
||||
|
||||
#if defined(FEAT_MBYTE) || defined(PROTO)
|
||||
#if defined(HAVE_INPUT_METHOD) || defined(PROTO)
|
||||
/*
|
||||
* Save current Input Method status to specified place.
|
||||
*/
|
||||
|
|
|
@ -424,7 +424,6 @@ u_savecommon(
|
|||
term_change_in_curbuf();
|
||||
#endif
|
||||
|
||||
#ifdef FEAT_AUTOCMD
|
||||
/*
|
||||
* Saving text for undo means we are going to make a change. Give a
|
||||
* warning for a read-only file before making the change, so that the
|
||||
|
@ -439,7 +438,6 @@ u_savecommon(
|
|||
EMSG(_("E881: Line count changed unexpectedly"));
|
||||
return FAIL;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
#ifdef U_DEBUG
|
||||
|
@ -2631,11 +2629,9 @@ u_undoredo(int undo)
|
|||
int empty_buffer; /* buffer became empty */
|
||||
u_header_T *curhead = curbuf->b_u_curhead;
|
||||
|
||||
#ifdef FEAT_AUTOCMD
|
||||
/* Don't want autocommands using the undo structures here, they are
|
||||
* invalid till the end. */
|
||||
block_autocmds();
|
||||
#endif
|
||||
|
||||
#ifdef U_DEBUG
|
||||
u_check(FALSE);
|
||||
|
@ -2664,9 +2660,7 @@ u_undoredo(int undo)
|
|||
if (top > curbuf->b_ml.ml_line_count || top >= bot
|
||||
|| bot > curbuf->b_ml.ml_line_count + 1)
|
||||
{
|
||||
#ifdef FEAT_AUTOCMD
|
||||
unblock_autocmds();
|
||||
#endif
|
||||
IEMSG(_("E438: u_undo: line numbers wrong"));
|
||||
changed(); /* don't want UNCHANGED now */
|
||||
return;
|
||||
|
@ -2891,9 +2885,7 @@ u_undoredo(int undo)
|
|||
* the undone/redone change. */
|
||||
curbuf->b_u_time_cur = curhead->uh_time;
|
||||
|
||||
#ifdef FEAT_AUTOCMD
|
||||
unblock_autocmds();
|
||||
#endif
|
||||
#ifdef U_DEBUG
|
||||
u_check(FALSE);
|
||||
#endif
|
||||
|
|
|
@ -1372,7 +1372,6 @@ call_func(
|
|||
else
|
||||
fp = find_func(rfname);
|
||||
|
||||
#ifdef FEAT_AUTOCMD
|
||||
/* Trigger FuncUndefined event, may load the function. */
|
||||
if (fp == NULL
|
||||
&& apply_autocmds(EVENT_FUNCUNDEFINED,
|
||||
|
@ -1382,7 +1381,6 @@ call_func(
|
|||
/* executed an autocommand, search for the function again */
|
||||
fp = find_func(rfname);
|
||||
}
|
||||
#endif
|
||||
/* Try loading a package. */
|
||||
if (fp == NULL && script_autoload(rfname, TRUE) && !aborting())
|
||||
{
|
||||
|
|
|
@ -78,11 +78,7 @@ static char *(features[]) =
|
|||
#else
|
||||
"-arabic",
|
||||
#endif
|
||||
#ifdef FEAT_AUTOCMD
|
||||
"+autocmd",
|
||||
#else
|
||||
"-autocmd",
|
||||
#endif
|
||||
#ifdef FEAT_AUTOSERVERNAME
|
||||
"+autoservername",
|
||||
#else
|
||||
|
@ -778,6 +774,8 @@ static char *(features[]) =
|
|||
|
||||
static int included_patches[] =
|
||||
{ /* Add new patch number below this line */
|
||||
/**/
|
||||
1564,
|
||||
/**/
|
||||
1563,
|
||||
/**/
|
||||
|
|
14
src/vim.h
14
src/vim.h
|
@ -2118,6 +2118,20 @@ typedef enum {
|
|||
# define USE_MCH_ERRMSG
|
||||
#endif
|
||||
|
||||
/* Whether IME is supported when XIM is not used. */
|
||||
# if defined(FEAT_MBYTE_IME) && \
|
||||
(!defined(FEAT_GUI_W32) || !(defined(FEAT_MBYTE_IME) || defined(GLOBAL_IME)))
|
||||
# define IME_WITHOUT_XIM
|
||||
#endif
|
||||
|
||||
#if defined(FEAT_MBYTE) && (defined(FEAT_XIM) \
|
||||
|| defined(IME_WITHOUT_XIM) \
|
||||
|| defined(FEAT_GUI_W32) \
|
||||
|| defined(MACOS_CONVERT))
|
||||
/* im_set_active() is available */
|
||||
# define HAVE_INPUT_METHOD
|
||||
#endif
|
||||
|
||||
#ifndef FEAT_MBYTE
|
||||
# define after_pathsep(b, p) vim_ispathsep(*((p) - 1))
|
||||
# define transchar_byte(c) transchar(c)
|
||||
|
|
107
src/window.c
107
src/window.c
|
@ -1437,13 +1437,11 @@ make_windows(
|
|||
if (count > 1)
|
||||
last_status(TRUE);
|
||||
|
||||
#ifdef FEAT_AUTOCMD
|
||||
/*
|
||||
* Don't execute autocommands while creating the windows. Must do that
|
||||
* when putting the buffers in the windows.
|
||||
*/
|
||||
block_autocmds();
|
||||
#endif
|
||||
|
||||
/* todo is number of windows left to create */
|
||||
for (todo = count - 1; todo > 0; --todo)
|
||||
|
@ -1461,9 +1459,7 @@ make_windows(
|
|||
break;
|
||||
}
|
||||
|
||||
#ifdef FEAT_AUTOCMD
|
||||
unblock_autocmds();
|
||||
#endif
|
||||
|
||||
/* return actual number of windows */
|
||||
return (count - todo);
|
||||
|
@ -2104,19 +2100,14 @@ close_windows(
|
|||
win_T *wp;
|
||||
tabpage_T *tp, *nexttp;
|
||||
int h = tabline_height();
|
||||
#ifdef FEAT_AUTOCMD
|
||||
int count = tabpage_index(NULL);
|
||||
#endif
|
||||
|
||||
++RedrawingDisabled;
|
||||
|
||||
for (wp = firstwin; wp != NULL && !ONE_WINDOW; )
|
||||
{
|
||||
if (wp->w_buffer == buf && (!keep_curwin || wp != curwin)
|
||||
#ifdef FEAT_AUTOCMD
|
||||
&& !(wp->w_closing || wp->w_buffer->b_locked > 0)
|
||||
#endif
|
||||
)
|
||||
&& !(wp->w_closing || wp->w_buffer->b_locked > 0))
|
||||
{
|
||||
if (win_close(wp, FALSE) == FAIL)
|
||||
/* If closing the window fails give up, to avoid looping
|
||||
|
@ -2137,10 +2128,7 @@ close_windows(
|
|||
if (tp != curtab)
|
||||
for (wp = tp->tp_firstwin; wp != NULL; wp = wp->w_next)
|
||||
if (wp->w_buffer == buf
|
||||
#ifdef FEAT_AUTOCMD
|
||||
&& !(wp->w_closing || wp->w_buffer->b_locked > 0)
|
||||
#endif
|
||||
)
|
||||
&& !(wp->w_closing || wp->w_buffer->b_locked > 0))
|
||||
{
|
||||
win_close_othertab(wp, FALSE, tp);
|
||||
|
||||
|
@ -2153,10 +2141,8 @@ close_windows(
|
|||
|
||||
--RedrawingDisabled;
|
||||
|
||||
#ifdef FEAT_AUTOCMD
|
||||
if (count != tabpage_index(NULL))
|
||||
apply_autocmds(EVENT_TABCLOSED, NULL, NULL, FALSE, curbuf);
|
||||
#endif
|
||||
|
||||
redraw_tabline = TRUE;
|
||||
if (h != tabline_height())
|
||||
|
@ -2181,7 +2167,6 @@ last_window(void)
|
|||
int
|
||||
one_window(void)
|
||||
{
|
||||
#ifdef FEAT_AUTOCMD
|
||||
win_T *wp;
|
||||
int seen_one = FALSE;
|
||||
|
||||
|
@ -2195,9 +2180,6 @@ one_window(void)
|
|||
}
|
||||
}
|
||||
return TRUE;
|
||||
#else
|
||||
return ONE_WINDOW;
|
||||
#endif
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -2212,9 +2194,7 @@ close_last_window_tabpage(
|
|||
{
|
||||
if (ONE_WINDOW)
|
||||
{
|
||||
#ifdef FEAT_AUTOCMD
|
||||
buf_T *old_curbuf = curbuf;
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Closing the last window in a tab page. First go to another tab
|
||||
|
@ -2239,13 +2219,11 @@ close_last_window_tabpage(
|
|||
}
|
||||
/* Since goto_tabpage_tp above did not trigger *Enter autocommands, do
|
||||
* that now. */
|
||||
#ifdef FEAT_AUTOCMD
|
||||
apply_autocmds(EVENT_TABCLOSED, NULL, NULL, FALSE, curbuf);
|
||||
apply_autocmds(EVENT_WINENTER, NULL, NULL, FALSE, curbuf);
|
||||
apply_autocmds(EVENT_TABENTER, NULL, NULL, FALSE, curbuf);
|
||||
if (old_curbuf != curbuf)
|
||||
apply_autocmds(EVENT_BUFENTER, NULL, NULL, FALSE, curbuf);
|
||||
#endif
|
||||
return TRUE;
|
||||
}
|
||||
return FALSE;
|
||||
|
@ -2262,9 +2240,7 @@ close_last_window_tabpage(
|
|||
win_close(win_T *win, int free_buf)
|
||||
{
|
||||
win_T *wp;
|
||||
#ifdef FEAT_AUTOCMD
|
||||
int other_buffer = FALSE;
|
||||
#endif
|
||||
int close_curwin = FALSE;
|
||||
int dir;
|
||||
int help_window = FALSE;
|
||||
|
@ -2277,7 +2253,6 @@ win_close(win_T *win, int free_buf)
|
|||
return FAIL;
|
||||
}
|
||||
|
||||
#ifdef FEAT_AUTOCMD
|
||||
if (win->w_closing || (win->w_buffer != NULL
|
||||
&& win->w_buffer->b_locked > 0))
|
||||
return FAIL; /* window is already being closed */
|
||||
|
@ -2291,7 +2266,6 @@ win_close(win_T *win, int free_buf)
|
|||
EMSG(_("E814: Cannot close window, only autocmd window would remain"));
|
||||
return FAIL;
|
||||
}
|
||||
#endif
|
||||
|
||||
/* When closing the last window in a tab page first go to another tab page
|
||||
* and then close the window and the tab page to avoid that curwin and
|
||||
|
@ -2306,7 +2280,6 @@ win_close(win_T *win, int free_buf)
|
|||
else
|
||||
clear_snapshot(curtab, SNAP_HELP_IDX);
|
||||
|
||||
#ifdef FEAT_AUTOCMD
|
||||
if (win == curwin)
|
||||
{
|
||||
/*
|
||||
|
@ -2337,13 +2310,12 @@ win_close(win_T *win, int free_buf)
|
|||
win->w_closing = FALSE;
|
||||
if (last_window())
|
||||
return FAIL;
|
||||
# ifdef FEAT_EVAL
|
||||
#ifdef FEAT_EVAL
|
||||
/* autocmds may abort script processing */
|
||||
if (aborting())
|
||||
return FAIL;
|
||||
# endif
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
#ifdef FEAT_GUI
|
||||
/* Avoid trouble with scrollbars that are going to be deleted in
|
||||
|
@ -2366,14 +2338,10 @@ win_close(win_T *win, int free_buf)
|
|||
bufref_T bufref;
|
||||
|
||||
set_bufref(&bufref, curbuf);
|
||||
#ifdef FEAT_AUTOCMD
|
||||
win->w_closing = TRUE;
|
||||
#endif
|
||||
close_buffer(win, win->w_buffer, free_buf ? DOBUF_UNLOAD : 0, TRUE);
|
||||
#ifdef FEAT_AUTOCMD
|
||||
if (win_valid_any_tab(win))
|
||||
win->w_closing = FALSE;
|
||||
#endif
|
||||
/* Make sure curbuf is valid. It can become invalid if 'bufhidden' is
|
||||
* "wipe". */
|
||||
if (!bufref_valid(&bufref))
|
||||
|
@ -2455,11 +2423,9 @@ win_close(win_T *win, int free_buf)
|
|||
if (close_curwin)
|
||||
{
|
||||
win_enter_ext(wp, FALSE, TRUE, FALSE, TRUE, TRUE);
|
||||
#ifdef FEAT_AUTOCMD
|
||||
if (other_buffer)
|
||||
/* careful: after this wp and win may be invalid! */
|
||||
apply_autocmds(EVENT_BUFENTER, NULL, NULL, FALSE, curbuf);
|
||||
#endif
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -2498,13 +2464,11 @@ win_close_othertab(win_T *win, int free_buf, tabpage_T *tp)
|
|||
tabpage_T *ptp = NULL;
|
||||
int free_tp = FALSE;
|
||||
|
||||
#ifdef FEAT_AUTOCMD
|
||||
/* Get here with win->w_buffer == NULL when win_close() detects the tab
|
||||
* page changed. */
|
||||
if (win->w_closing || (win->w_buffer != NULL
|
||||
&& win->w_buffer->b_locked > 0))
|
||||
return; /* window is already being closed */
|
||||
#endif
|
||||
|
||||
if (win->w_buffer != NULL)
|
||||
/* Close the link to the buffer. */
|
||||
|
@ -2586,13 +2550,11 @@ win_free_all(void)
|
|||
while (first_tabpage->tp_next != NULL)
|
||||
tabpage_close(TRUE);
|
||||
|
||||
# ifdef FEAT_AUTOCMD
|
||||
if (aucmd_win != NULL)
|
||||
{
|
||||
(void)win_free_mem(aucmd_win, &dummy, NULL);
|
||||
aucmd_win = NULL;
|
||||
}
|
||||
# endif
|
||||
|
||||
while (firstwin != NULL)
|
||||
(void)win_free_mem(firstwin, &dummy, NULL);
|
||||
|
@ -3331,11 +3293,7 @@ close_others(
|
|||
|
||||
if (one_window())
|
||||
{
|
||||
if (message
|
||||
#ifdef FEAT_AUTOCMD
|
||||
&& !autocmd_busy
|
||||
#endif
|
||||
)
|
||||
if (message && !autocmd_busy)
|
||||
MSG(_(m_onlyone));
|
||||
return;
|
||||
}
|
||||
|
@ -3349,26 +3307,22 @@ close_others(
|
|||
|
||||
/* Check if it's allowed to abandon this window */
|
||||
r = can_abandon(wp->w_buffer, forceit);
|
||||
#ifdef FEAT_AUTOCMD
|
||||
if (!win_valid(wp)) /* autocommands messed wp up */
|
||||
{
|
||||
nextwp = firstwin;
|
||||
continue;
|
||||
}
|
||||
#endif
|
||||
if (!r)
|
||||
{
|
||||
#if defined(FEAT_GUI_DIALOG) || defined(FEAT_CON_DIALOG)
|
||||
if (message && (p_confirm || cmdmod.confirm) && p_write)
|
||||
{
|
||||
dialog_changed(wp->w_buffer, FALSE);
|
||||
# ifdef FEAT_AUTOCMD
|
||||
if (!win_valid(wp)) /* autocommands messed wp up */
|
||||
{
|
||||
nextwp = firstwin;
|
||||
continue;
|
||||
}
|
||||
# endif
|
||||
}
|
||||
if (bufIsChanged(wp->w_buffer))
|
||||
#endif
|
||||
|
@ -3443,7 +3397,6 @@ win_alloc_first(void)
|
|||
return OK;
|
||||
}
|
||||
|
||||
#if defined(FEAT_AUTOCMD) || defined(PROTO)
|
||||
/*
|
||||
* Init "aucmd_win". This can only be done after the first
|
||||
* window is fully initialized, thus it can't be in win_alloc_first().
|
||||
|
@ -3459,7 +3412,6 @@ win_alloc_aucmd_win(void)
|
|||
new_frame(aucmd_win);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Allocate the first window or the first window in a new tab page.
|
||||
|
@ -3663,12 +3615,10 @@ win_new_tabpage(int after)
|
|||
#endif
|
||||
|
||||
redraw_all_later(CLEAR);
|
||||
#ifdef FEAT_AUTOCMD
|
||||
apply_autocmds(EVENT_WINNEW, NULL, NULL, FALSE, curbuf);
|
||||
apply_autocmds(EVENT_WINENTER, NULL, NULL, FALSE, curbuf);
|
||||
apply_autocmds(EVENT_TABNEW, NULL, NULL, FALSE, curbuf);
|
||||
apply_autocmds(EVENT_TABENTER, NULL, NULL, FALSE, curbuf);
|
||||
#endif
|
||||
return OK;
|
||||
}
|
||||
|
||||
|
@ -3710,21 +3660,17 @@ make_tabpages(int maxcount)
|
|||
if (count > p_tpm)
|
||||
count = p_tpm;
|
||||
|
||||
#ifdef FEAT_AUTOCMD
|
||||
/*
|
||||
* Don't execute autocommands while creating the tab pages. Must do that
|
||||
* when putting the buffers in the windows.
|
||||
*/
|
||||
block_autocmds();
|
||||
#endif
|
||||
|
||||
for (todo = count - 1; todo > 0; --todo)
|
||||
if (win_new_tabpage(0) == FAIL)
|
||||
break;
|
||||
|
||||
#ifdef FEAT_AUTOCMD
|
||||
unblock_autocmds();
|
||||
#endif
|
||||
|
||||
/* return actual number of tab pages */
|
||||
return (count - todo);
|
||||
|
@ -3841,7 +3787,6 @@ leave_tabpage(
|
|||
tabpage_T *tp = curtab;
|
||||
|
||||
reset_VIsual_and_resel(); /* stop Visual mode */
|
||||
#ifdef FEAT_AUTOCMD
|
||||
if (trigger_leave_autocmds)
|
||||
{
|
||||
if (new_curbuf != curbuf)
|
||||
|
@ -3857,7 +3802,6 @@ leave_tabpage(
|
|||
if (curtab != tp)
|
||||
return FAIL;
|
||||
}
|
||||
#endif
|
||||
#if defined(FEAT_GUI)
|
||||
/* Remove the scrollbars. They may be added back later. */
|
||||
if (gui.in_use)
|
||||
|
@ -3929,7 +3873,6 @@ enter_tabpage(
|
|||
gui_may_update_scrollbars();
|
||||
#endif
|
||||
|
||||
#ifdef FEAT_AUTOCMD
|
||||
/* Apply autocommands after updating the display, when 'rows' and
|
||||
* 'columns' have been set correctly. */
|
||||
if (trigger_enter_autocmds)
|
||||
|
@ -3938,7 +3881,6 @@ enter_tabpage(
|
|||
if (old_curbuf != curbuf)
|
||||
apply_autocmds(EVENT_BUFENTER, NULL, NULL, FALSE, curbuf);
|
||||
}
|
||||
#endif
|
||||
|
||||
redraw_all_later(CLEAR);
|
||||
}
|
||||
|
@ -4131,10 +4073,8 @@ win_goto(win_T *wp)
|
|||
text_locked_msg();
|
||||
return;
|
||||
}
|
||||
#ifdef FEAT_AUTOCMD
|
||||
if (curbuf_locked())
|
||||
return;
|
||||
#endif
|
||||
|
||||
if (wp->w_buffer != curbuf)
|
||||
reset_VIsual_and_resel();
|
||||
|
@ -4337,14 +4277,11 @@ win_enter_ext(
|
|||
int trigger_enter_autocmds UNUSED,
|
||||
int trigger_leave_autocmds UNUSED)
|
||||
{
|
||||
#ifdef FEAT_AUTOCMD
|
||||
int other_buffer = FALSE;
|
||||
#endif
|
||||
|
||||
if (wp == curwin && !curwin_invalid) /* nothing to do */
|
||||
return;
|
||||
|
||||
#ifdef FEAT_AUTOCMD
|
||||
if (!curwin_invalid && trigger_leave_autocmds)
|
||||
{
|
||||
/*
|
||||
|
@ -4360,13 +4297,12 @@ win_enter_ext(
|
|||
apply_autocmds(EVENT_WINLEAVE, NULL, NULL, FALSE, curbuf);
|
||||
if (!win_valid(wp))
|
||||
return;
|
||||
# ifdef FEAT_EVAL
|
||||
#ifdef FEAT_EVAL
|
||||
/* autocmds may abort script processing */
|
||||
if (aborting())
|
||||
return;
|
||||
# endif
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
/* sync undo before leaving the current buffer */
|
||||
if (undo_sync && curbuf != wp->w_buffer)
|
||||
|
@ -4417,7 +4353,6 @@ win_enter_ext(
|
|||
shorten_fnames(TRUE);
|
||||
}
|
||||
|
||||
#ifdef FEAT_AUTOCMD
|
||||
if (trigger_new_autocmds)
|
||||
apply_autocmds(EVENT_WINNEW, NULL, NULL, FALSE, curbuf);
|
||||
if (trigger_enter_autocmds)
|
||||
|
@ -4426,7 +4361,6 @@ win_enter_ext(
|
|||
if (other_buffer)
|
||||
apply_autocmds(EVENT_BUFENTER, NULL, NULL, FALSE, curbuf);
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef FEAT_TITLE
|
||||
maketitle();
|
||||
|
@ -4544,12 +4478,11 @@ win_alloc(win_T *after UNUSED, int hidden UNUSED)
|
|||
init_var_dict(new_wp->w_vars, &new_wp->w_winvar, VAR_SCOPE);
|
||||
#endif
|
||||
|
||||
#ifdef FEAT_AUTOCMD
|
||||
/* Don't execute autocommands while the window is not properly
|
||||
* initialized yet. gui_create_scrollbar() may trigger a FocusGained
|
||||
* event. */
|
||||
block_autocmds();
|
||||
#endif
|
||||
|
||||
/*
|
||||
* link the window in the window list
|
||||
*/
|
||||
|
@ -4585,9 +4518,7 @@ win_alloc(win_T *after UNUSED, int hidden UNUSED)
|
|||
#ifdef FEAT_FOLDING
|
||||
foldInitWin(new_wp);
|
||||
#endif
|
||||
#ifdef FEAT_AUTOCMD
|
||||
unblock_autocmds();
|
||||
#endif
|
||||
#ifdef FEAT_SEARCH_EXTRA
|
||||
new_wp->w_match_head = NULL;
|
||||
new_wp->w_next_match_id = 4;
|
||||
|
@ -4614,11 +4545,9 @@ win_free(
|
|||
/* reduce the reference count to the argument list. */
|
||||
alist_unlink(wp->w_alist);
|
||||
|
||||
#ifdef FEAT_AUTOCMD
|
||||
/* Don't execute autocommands while the window is halfway being deleted.
|
||||
* gui_mch_destroy_scrollbar() may trigger a FocusGained event. */
|
||||
block_autocmds();
|
||||
#endif
|
||||
|
||||
#ifdef FEAT_LUA
|
||||
lua_window_free(wp);
|
||||
|
@ -4708,23 +4637,17 @@ win_free(
|
|||
vim_free(wp->w_p_cc_cols);
|
||||
#endif
|
||||
|
||||
#ifdef FEAT_AUTOCMD
|
||||
if (wp != aucmd_win)
|
||||
#endif
|
||||
win_remove(wp, tp);
|
||||
#ifdef FEAT_AUTOCMD
|
||||
if (autocmd_busy)
|
||||
{
|
||||
wp->w_next = au_pending_free_win;
|
||||
au_pending_free_win = wp;
|
||||
}
|
||||
else
|
||||
#endif
|
||||
vim_free(wp);
|
||||
|
||||
#ifdef FEAT_AUTOCMD
|
||||
unblock_autocmds();
|
||||
#endif
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -6426,11 +6349,7 @@ only_one_window(void)
|
|||
# ifdef FEAT_QUICKFIX
|
||||
|| wp->w_p_pvw
|
||||
# endif
|
||||
) || wp == curwin)
|
||||
# ifdef FEAT_AUTOCMD
|
||||
&& wp != aucmd_win
|
||||
# endif
|
||||
)
|
||||
) || wp == curwin) && wp != aucmd_win)
|
||||
++count;
|
||||
return (count <= 1);
|
||||
}
|
||||
|
@ -6613,9 +6532,7 @@ switch_win(
|
|||
tabpage_T *tp,
|
||||
int no_display)
|
||||
{
|
||||
# ifdef FEAT_AUTOCMD
|
||||
block_autocmds();
|
||||
# endif
|
||||
*save_curwin = curwin;
|
||||
if (tp != NULL)
|
||||
{
|
||||
|
@ -6667,9 +6584,7 @@ restore_win(
|
|||
curwin = save_curwin;
|
||||
curbuf = curwin->w_buffer;
|
||||
}
|
||||
# ifdef FEAT_AUTOCMD
|
||||
unblock_autocmds();
|
||||
# endif
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -6679,9 +6594,7 @@ restore_win(
|
|||
void
|
||||
switch_buffer(bufref_T *save_curbuf, buf_T *buf)
|
||||
{
|
||||
# ifdef FEAT_AUTOCMD
|
||||
block_autocmds();
|
||||
# endif
|
||||
set_bufref(save_curbuf, curbuf);
|
||||
--curbuf->b_nwindows;
|
||||
curbuf = buf;
|
||||
|
@ -6695,9 +6608,7 @@ switch_buffer(bufref_T *save_curbuf, buf_T *buf)
|
|||
void
|
||||
restore_buffer(bufref_T *save_curbuf)
|
||||
{
|
||||
# ifdef FEAT_AUTOCMD
|
||||
unblock_autocmds();
|
||||
# endif
|
||||
/* Check for valid buffer, just in case. */
|
||||
if (bufref_valid(save_curbuf))
|
||||
{
|
||||
|
|
Loading…
Add table
Reference in a new issue