mirror of
https://github.com/neovim/neovim.git
synced 2025-02-25 18:55:25 -06:00
vim-patch:8.2.2070: can't get the exit value in VimLeave(Pre) autocommands (#13981)
Problem: Can't get the exit value in VimLeave or VimLeavePre autocommands. Solution: Add v:exiting like in Neovim. (Yegappan Lakshmanan, closes vim/vim#7395)f0068c5154
Rearrange VimVarIndex enums and vimvars[] entries to sync with Vim. N/A patches for version.c: vim-patch:8.2.2535: MS-Windows: cannot run all vim9 tests Problem: MS-Windows: cannot run all vim9 tests. Solution: Make test_vim9 target work.723ef5db98
This commit is contained in:
parent
1caf58578c
commit
595f6e4d64
@ -1541,7 +1541,10 @@ v:dying Normally zero. When a deadly signal is caught it's set to
|
|||||||
VimLeave autocommands will not be executed.
|
VimLeave autocommands will not be executed.
|
||||||
|
|
||||||
*v:exiting* *exiting-variable*
|
*v:exiting* *exiting-variable*
|
||||||
v:exiting Exit code, or |v:null| if not exiting. |VimLeave|
|
v:exiting Exit code, or |v:null| before invoking the |VimLeavePre|
|
||||||
|
and |VimLeave| autocmds. See |:q|, |:x| and |:cquit|.
|
||||||
|
Example: >
|
||||||
|
:au VimLeave * echo "Exit value is " .. v:exiting
|
||||||
|
|
||||||
*v:echospace* *echospace-variable*
|
*v:echospace* *echospace-variable*
|
||||||
v:echospace Number of screen cells that can be used for an `:echo` message
|
v:echospace Number of screen cells that can be used for an `:echo` message
|
||||||
|
@ -176,7 +176,6 @@ static struct vimvar {
|
|||||||
VV(VV_DYING, "dying", VAR_NUMBER, VV_RO),
|
VV(VV_DYING, "dying", VAR_NUMBER, VV_RO),
|
||||||
VV(VV_EXCEPTION, "exception", VAR_STRING, VV_RO),
|
VV(VV_EXCEPTION, "exception", VAR_STRING, VV_RO),
|
||||||
VV(VV_THROWPOINT, "throwpoint", VAR_STRING, VV_RO),
|
VV(VV_THROWPOINT, "throwpoint", VAR_STRING, VV_RO),
|
||||||
VV(VV_STDERR, "stderr", VAR_NUMBER, VV_RO),
|
|
||||||
VV(VV_REG, "register", VAR_STRING, VV_RO),
|
VV(VV_REG, "register", VAR_STRING, VV_RO),
|
||||||
VV(VV_CMDBANG, "cmdbang", VAR_NUMBER, VV_RO),
|
VV(VV_CMDBANG, "cmdbang", VAR_NUMBER, VV_RO),
|
||||||
VV(VV_INSERTMODE, "insertmode", VAR_STRING, VV_RO),
|
VV(VV_INSERTMODE, "insertmode", VAR_STRING, VV_RO),
|
||||||
@ -211,13 +210,9 @@ static struct vimvar {
|
|||||||
VV(VV_OPTION_OLD, "option_old", VAR_STRING, VV_RO),
|
VV(VV_OPTION_OLD, "option_old", VAR_STRING, VV_RO),
|
||||||
VV(VV_OPTION_TYPE, "option_type", VAR_STRING, VV_RO),
|
VV(VV_OPTION_TYPE, "option_type", VAR_STRING, VV_RO),
|
||||||
VV(VV_ERRORS, "errors", VAR_LIST, 0),
|
VV(VV_ERRORS, "errors", VAR_LIST, 0),
|
||||||
VV(VV_MSGPACK_TYPES, "msgpack_types", VAR_DICT, VV_RO),
|
|
||||||
VV(VV_EVENT, "event", VAR_DICT, VV_RO),
|
|
||||||
VV(VV_FALSE, "false", VAR_BOOL, VV_RO),
|
VV(VV_FALSE, "false", VAR_BOOL, VV_RO),
|
||||||
VV(VV_TRUE, "true", VAR_BOOL, VV_RO),
|
VV(VV_TRUE, "true", VAR_BOOL, VV_RO),
|
||||||
VV(VV_NULL, "null", VAR_SPECIAL, VV_RO),
|
VV(VV_NULL, "null", VAR_SPECIAL, VV_RO),
|
||||||
VV(VV__NULL_LIST, "_null_list", VAR_LIST, VV_RO),
|
|
||||||
VV(VV__NULL_DICT, "_null_dict", VAR_DICT, VV_RO),
|
|
||||||
VV(VV_VIM_DID_ENTER, "vim_did_enter", VAR_NUMBER, VV_RO),
|
VV(VV_VIM_DID_ENTER, "vim_did_enter", VAR_NUMBER, VV_RO),
|
||||||
VV(VV_TESTING, "testing", VAR_NUMBER, 0),
|
VV(VV_TESTING, "testing", VAR_NUMBER, 0),
|
||||||
VV(VV_TYPE_NUMBER, "t_number", VAR_NUMBER, VV_RO),
|
VV(VV_TYPE_NUMBER, "t_number", VAR_NUMBER, VV_RO),
|
||||||
@ -227,10 +222,16 @@ static struct vimvar {
|
|||||||
VV(VV_TYPE_DICT, "t_dict", VAR_NUMBER, VV_RO),
|
VV(VV_TYPE_DICT, "t_dict", VAR_NUMBER, VV_RO),
|
||||||
VV(VV_TYPE_FLOAT, "t_float", VAR_NUMBER, VV_RO),
|
VV(VV_TYPE_FLOAT, "t_float", VAR_NUMBER, VV_RO),
|
||||||
VV(VV_TYPE_BOOL, "t_bool", VAR_NUMBER, VV_RO),
|
VV(VV_TYPE_BOOL, "t_bool", VAR_NUMBER, VV_RO),
|
||||||
|
VV(VV_EVENT, "event", VAR_DICT, VV_RO),
|
||||||
VV(VV_ECHOSPACE, "echospace", VAR_NUMBER, VV_RO),
|
VV(VV_ECHOSPACE, "echospace", VAR_NUMBER, VV_RO),
|
||||||
VV(VV_EXITING, "exiting", VAR_NUMBER, VV_RO),
|
|
||||||
VV(VV_LUA, "lua", VAR_PARTIAL, VV_RO),
|
|
||||||
VV(VV_ARGV, "argv", VAR_LIST, VV_RO),
|
VV(VV_ARGV, "argv", VAR_LIST, VV_RO),
|
||||||
|
VV(VV_EXITING, "exiting", VAR_NUMBER, VV_RO),
|
||||||
|
// Neovim
|
||||||
|
VV(VV_STDERR, "stderr", VAR_NUMBER, VV_RO),
|
||||||
|
VV(VV_MSGPACK_TYPES, "msgpack_types", VAR_DICT, VV_RO),
|
||||||
|
VV(VV__NULL_LIST, "_null_list", VAR_LIST, VV_RO),
|
||||||
|
VV(VV__NULL_DICT, "_null_dict", VAR_DICT, VV_RO),
|
||||||
|
VV(VV_LUA, "lua", VAR_PARTIAL, VV_RO),
|
||||||
};
|
};
|
||||||
#undef VV
|
#undef VV
|
||||||
|
|
||||||
|
@ -105,7 +105,6 @@ typedef enum {
|
|||||||
VV_DYING,
|
VV_DYING,
|
||||||
VV_EXCEPTION,
|
VV_EXCEPTION,
|
||||||
VV_THROWPOINT,
|
VV_THROWPOINT,
|
||||||
VV_STDERR,
|
|
||||||
VV_REG,
|
VV_REG,
|
||||||
VV_CMDBANG,
|
VV_CMDBANG,
|
||||||
VV_INSERTMODE,
|
VV_INSERTMODE,
|
||||||
@ -140,13 +139,9 @@ typedef enum {
|
|||||||
VV_OPTION_OLD,
|
VV_OPTION_OLD,
|
||||||
VV_OPTION_TYPE,
|
VV_OPTION_TYPE,
|
||||||
VV_ERRORS,
|
VV_ERRORS,
|
||||||
VV_MSGPACK_TYPES,
|
|
||||||
VV_EVENT,
|
|
||||||
VV_FALSE,
|
VV_FALSE,
|
||||||
VV_TRUE,
|
VV_TRUE,
|
||||||
VV_NULL,
|
VV_NULL,
|
||||||
VV__NULL_LIST, // List with NULL value. For test purposes only.
|
|
||||||
VV__NULL_DICT, // Dictionary with NULL value. For test purposes only.
|
|
||||||
VV_VIM_DID_ENTER,
|
VV_VIM_DID_ENTER,
|
||||||
VV_TESTING,
|
VV_TESTING,
|
||||||
VV_TYPE_NUMBER,
|
VV_TYPE_NUMBER,
|
||||||
@ -156,10 +151,16 @@ typedef enum {
|
|||||||
VV_TYPE_DICT,
|
VV_TYPE_DICT,
|
||||||
VV_TYPE_FLOAT,
|
VV_TYPE_FLOAT,
|
||||||
VV_TYPE_BOOL,
|
VV_TYPE_BOOL,
|
||||||
|
VV_EVENT,
|
||||||
VV_ECHOSPACE,
|
VV_ECHOSPACE,
|
||||||
VV_EXITING,
|
|
||||||
VV_LUA,
|
|
||||||
VV_ARGV,
|
VV_ARGV,
|
||||||
|
VV_EXITING,
|
||||||
|
// Neovim
|
||||||
|
VV_STDERR,
|
||||||
|
VV_MSGPACK_TYPES,
|
||||||
|
VV__NULL_LIST, // List with NULL value. For test purposes only.
|
||||||
|
VV__NULL_DICT, // Dictionary with NULL value. For test purposes only.
|
||||||
|
VV_LUA,
|
||||||
} VimVarIndex;
|
} VimVarIndex;
|
||||||
|
|
||||||
/// All recognized msgpack types
|
/// All recognized msgpack types
|
||||||
|
@ -81,3 +81,32 @@ func Test_exiting()
|
|||||||
endif
|
endif
|
||||||
call delete('Xtestout')
|
call delete('Xtestout')
|
||||||
endfunc
|
endfunc
|
||||||
|
|
||||||
|
" Test for getting the Vim exit code from v:exiting
|
||||||
|
func Test_exit_code()
|
||||||
|
call assert_equal(v:null, v:exiting)
|
||||||
|
|
||||||
|
let before =<< trim [CODE]
|
||||||
|
au QuitPre * call writefile(['qp = ' .. v:exiting], 'Xtestout', 'a')
|
||||||
|
au ExitPre * call writefile(['ep = ' .. v:exiting], 'Xtestout', 'a')
|
||||||
|
au VimLeavePre * call writefile(['lp = ' .. v:exiting], 'Xtestout', 'a')
|
||||||
|
au VimLeave * call writefile(['l = ' .. v:exiting], 'Xtestout', 'a')
|
||||||
|
[CODE]
|
||||||
|
|
||||||
|
if RunVim(before, ['quit'], '')
|
||||||
|
call assert_equal(['qp = null', 'ep = null', 'lp = 0', 'l = 0'], readfile('Xtestout'))
|
||||||
|
endif
|
||||||
|
call delete('Xtestout')
|
||||||
|
|
||||||
|
if RunVim(before, ['cquit'], '')
|
||||||
|
call assert_equal(['lp = 1', 'l = 1'], readfile('Xtestout'))
|
||||||
|
endif
|
||||||
|
call delete('Xtestout')
|
||||||
|
|
||||||
|
if RunVim(before, ['cquit 4'], '')
|
||||||
|
call assert_equal(['lp = 4', 'l = 4'], readfile('Xtestout'))
|
||||||
|
endif
|
||||||
|
call delete('Xtestout')
|
||||||
|
endfunc
|
||||||
|
|
||||||
|
" vim: shiftwidth=2 sts=2 expandtab
|
||||||
|
Loading…
Reference in New Issue
Block a user