vim-patch:8.2.1874: can't do something just before leaving Insert mode

Problem:    Can't do something just before leaving Insert mode.
Solution:   Add the InsertLeavePre autocommand event. (closes vim/vim#7177)
b53e13a91a

N/A patches for version.c:

vim-patch:8.1.1877: graduated features scattered

Problem:    Graduated features scattered.
Solution:   Put graduated and obsolete features together.
ffc0716af8

vim-patch:8.2.1875: warning when building GTK gui

Problem:    Warning when building GTK gui.
Solution:   Add missing function parameter.
3da855c8e2

vim-patch:8.2.1877: test for function list fails

Problem:    Test for function list fails.
Solution:   Move "obsolete" comments one line up.
b8f519e538

vim-patch:8.2.1878: GTK: error for redefining function

Problem:    GTK: error for redefining function. (Tony Mechelynck)
Solution:   Remove "gtk_" prefix from local functions and prepend "gui_" to
            global functions.
8a99e66b4f

vim-patch:8.2.1881: cannot build with GTK3

Problem:    Cannot build with GTK3.
Solution:   Adjust form functions.
692d1a51e7

vim-patch:8.2.1883: compiler warnings when using Python

Problem:    Compiler warnings when using Python.
Solution:   Adjust PyCFunction to also have the second argument.  Use "int"
            return type for some functions.  Insert "(void *)" to get rid of
            the remaining warnings.
4ce5fe4c87
This commit is contained in:
Jan Edmund Lazo 2020-10-21 23:25:21 -04:00
parent 07022306e2
commit 3f0850e9f0
No known key found for this signature in database
GPG Key ID: 64915E6E9F735B15
4 changed files with 23 additions and 4 deletions

View File

@ -700,9 +700,14 @@ InsertEnter Just before starting Insert mode. Also for
The cursor is restored afterwards. If you do The cursor is restored afterwards. If you do
not want that set |v:char| to a non-empty not want that set |v:char| to a non-empty
string. string.
*InsertLeavePre*
InsertLeavePre Just before leaving Insert mode. Also when
using CTRL-O |i_CTRL-O|. Be caseful not to
change mode or use `:normal`, it will likely
cause trouble.
*InsertLeave* *InsertLeave*
InsertLeave When leaving Insert mode. Also when using InsertLeave Just after leaving Insert mode. Also when
CTRL-O |i_CTRL-O|. But not for |i_CTRL-C|. using CTRL-O |i_CTRL-O|. But not for |i_CTRL-C|.
*MenuPopup* *MenuPopup*
MenuPopup Just before showing the popup menu (under the MenuPopup Just before showing the popup menu (under the
right mouse button). Useful for adjusting the right mouse button). Useful for adjusting the

View File

@ -65,7 +65,8 @@ return {
'InsertChange', -- when changing Insert/Replace mode 'InsertChange', -- when changing Insert/Replace mode
'InsertCharPre', -- before inserting a char 'InsertCharPre', -- before inserting a char
'InsertEnter', -- when entering Insert mode 'InsertEnter', -- when entering Insert mode
'InsertLeave', -- when leaving Insert mode 'InsertLeave', -- just after leaving Insert mode
'InsertLeavePre', -- just before leaving Insert mode
'MenuPopup', -- just before popup menu is displayed 'MenuPopup', -- just before popup menu is displayed
'OptionSet', -- after setting any option 'OptionSet', -- after setting any option
'QuickFixCmdPost', -- after :make, :grep etc. 'QuickFixCmdPost', -- after :make, :grep etc.

View File

@ -7691,6 +7691,10 @@ static bool ins_esc(long *count, int cmdchar, bool nomove)
undisplay_dollar(); undisplay_dollar();
} }
if (cmdchar != 'r' && cmdchar != 'v') {
ins_apply_autocmds(EVENT_INSERTLEAVEPRE);
}
// When an autoindent was removed, curswant stays after the // When an autoindent was removed, curswant stays after the
// indent // indent
if (restart_edit == NUL && (colnr_T)temp == curwin->w_cursor.col) { if (restart_edit == NUL && (colnr_T)temp == curwin->w_cursor.col) {

View File

@ -1441,31 +1441,40 @@ endfunc
func Test_edit_InsertLeave() func Test_edit_InsertLeave()
new new
au InsertLeavePre * let g:did_au_pre = 1
au InsertLeave * let g:did_au = 1 au InsertLeave * let g:did_au = 1
let g:did_au_pre = 0
let g:did_au = 0 let g:did_au = 0
call feedkeys("afoo\<Esc>", 'tx') call feedkeys("afoo\<Esc>", 'tx')
call assert_equal(1, g:did_au_pre)
call assert_equal(1, g:did_au) call assert_equal(1, g:did_au)
call assert_equal('foo', getline(1)) call assert_equal('foo', getline(1))
let g:did_au_pre = 0
let g:did_au = 0 let g:did_au = 0
call feedkeys("Sbar\<C-C>", 'tx') call feedkeys("Sbar\<C-C>", 'tx')
call assert_equal(1, g:did_au_pre)
call assert_equal(0, g:did_au) call assert_equal(0, g:did_au)
call assert_equal('bar', getline(1)) call assert_equal('bar', getline(1))
inoremap x xx<Esc> inoremap x xx<Esc>
let g:did_au_pre = 0
let g:did_au = 0 let g:did_au = 0
call feedkeys("Saax", 'tx') call feedkeys("Saax", 'tx')
call assert_equal(1, g:did_au_pre)
call assert_equal(1, g:did_au) call assert_equal(1, g:did_au)
call assert_equal('aaxx', getline(1)) call assert_equal('aaxx', getline(1))
inoremap x xx<C-C> inoremap x xx<C-C>
let g:did_au_pre = 0
let g:did_au = 0 let g:did_au = 0
call feedkeys("Sbbx", 'tx') call feedkeys("Sbbx", 'tx')
call assert_equal(1, g:did_au_pre)
call assert_equal(0, g:did_au) call assert_equal(0, g:did_au)
call assert_equal('bbxx', getline(1)) call assert_equal('bbxx', getline(1))
bwipe! bwipe!
au! InsertLeave au! InsertLeave InsertLeavePre
iunmap x iunmap x
endfunc endfunc