0
0
mirror of https://github.com/vim/vim.git synced 2025-07-26 11:04:33 -04:00

patch 7.4.1658

Problem:    A plugin does not know when VimEnter autocommands were already
            triggered.
Solution:   Add the v:vim_did_enter variable.
This commit is contained in:
Bram Moolenaar 2016-03-26 21:00:08 +01:00
parent 8fdd721047
commit 1473551a44
8 changed files with 30 additions and 2 deletions

View File

@ -918,7 +918,15 @@ VimEnter After doing all the startup stuff, including
loading .vimrc files, executing the "-c cmd" loading .vimrc files, executing the "-c cmd"
arguments, creating all windows and loading arguments, creating all windows and loading
the buffers in them. the buffers in them.
*VimLeave* Just before this event is triggered the
|v:vim_did_enter| variable is set, so that you
can do: >
if v:vim_did_enter
call s:init()
else
au VimEnter * call s:init()
endif
< *VimLeave*
VimLeave Before exiting Vim, just after writing the VimLeave Before exiting Vim, just after writing the
.viminfo file. Executed only once, like .viminfo file. Executed only once, like
VimLeavePre. VimLeavePre.

View File

@ -1762,6 +1762,10 @@ v:version Version number of Vim: Major version number times 100 plus
version 5.0 and 5.1 may have a patch 123, but these are version 5.0 and 5.1 may have a patch 123, but these are
completely different. completely different.
*v:vim_did_enter* *vim_did_enter-variable*
v:vim_did_enter Zero until most of startup is done. It is set to one just
before |VimEnter| autocommands are triggered.
*v:warningmsg* *warningmsg-variable* *v:warningmsg* *warningmsg-variable*
v:warningmsg Last given warning message. It's allowed to set this variable. v:warningmsg Last given warning message. It's allowed to set this variable.

View File

@ -372,6 +372,7 @@ static struct vimvar
{VV_NAME("true", VAR_SPECIAL), VV_RO}, {VV_NAME("true", VAR_SPECIAL), VV_RO},
{VV_NAME("null", VAR_SPECIAL), VV_RO}, {VV_NAME("null", VAR_SPECIAL), VV_RO},
{VV_NAME("none", VAR_SPECIAL), VV_RO}, {VV_NAME("none", VAR_SPECIAL), VV_RO},
{VV_NAME("vim_did_enter", VAR_NUMBER), VV_RO},
}; };
/* shorthand */ /* shorthand */

View File

@ -969,6 +969,9 @@ vim_main2(int argc UNUSED, char **argv UNUSED)
if (p_im) if (p_im)
need_start_insertmode = TRUE; need_start_insertmode = TRUE;
#ifdef FEAT_EVAL
set_vim_var_nr(VV_VIM_DID_ENTER, 1L);
#endif
#ifdef FEAT_AUTOCMD #ifdef FEAT_AUTOCMD
apply_autocmds(EVENT_VIMENTER, NULL, NULL, FALSE, curbuf); apply_autocmds(EVENT_VIMENTER, NULL, NULL, FALSE, curbuf);
TIME_MSG("VimEnter autocommands"); TIME_MSG("VimEnter autocommands");

View File

@ -2,6 +2,7 @@
" This makes testing go faster, since Vim doesn't need to restart. " This makes testing go faster, since Vim doesn't need to restart.
source test_assign.vim source test_assign.vim
source test_autocmd.vim
source test_cursor_func.vim source test_cursor_func.vim
source test_delete.vim source test_delete.vim
source test_ex_undo.vim source test_ex_undo.vim

View File

@ -0,0 +1,8 @@
" Tests for autocommands
func Test_vim_did_enter()
call assert_false(v:vim_did_enter)
" This script will never reach the main loop, can't check if v:vim_did_enter
" becomes one.
endfunc

View File

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

View File

@ -1869,7 +1869,8 @@ typedef int sock_T;
#define VV_TRUE 64 #define VV_TRUE 64
#define VV_NULL 65 #define VV_NULL 65
#define VV_NONE 66 #define VV_NONE 66
#define VV_LEN 67 /* number of v: vars */ #define VV_VIM_DID_ENTER 67
#define VV_LEN 68 /* number of v: vars */
/* used for v_number in VAR_SPECIAL */ /* used for v_number in VAR_SPECIAL */
#define VVAL_FALSE 0L #define VVAL_FALSE 0L