From 69bd1e4e36fa3e3f604740c92b15b13141520822 Mon Sep 17 00:00:00 2001 From: Magnus Groß Date: Wed, 29 Sep 2021 16:36:48 +0200 Subject: vim-patch:8.2.3430: no generic way to trigger an autocommand on mode change Problem: No generic way to trigger an autocommand on mode change. Solution: Add the ModeChanged autocommand event. (Magnus Gross, closes vim/vim#8856) https://github.com/vim/vim/commit/f1e8876fa2359b572d262772747405d3616db670 N/A patches for version.c: vim-patch:8.2.3434: function prototype for trigger_modechanged() is incomplete Problem: Function prototype for trigger_modechanged() is incomplete. Solution: Add "void". https://github.com/vim/vim/commit/28e591dd5080bbcd0f468f9d9597cedb716e28c9 Fixes #4399. Fixes #7416. --- runtime/doc/autocmd.txt | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) (limited to 'runtime') diff --git a/runtime/doc/autocmd.txt b/runtime/doc/autocmd.txt index 2737ac9b9f..eb7e00804e 100644 --- a/runtime/doc/autocmd.txt +++ b/runtime/doc/autocmd.txt @@ -718,7 +718,22 @@ MenuPopup Just before showing the popup menu (under the o Operator-pending i Insert c Command line - *OptionSet* + *ModeChanged* +ModeChanged After changing the mode. The pattern is + matched against `'old_mode:new_mode'`, for + example match against `i:*` to simulate + |InsertLeave|. + The following values of |v:event| are set: + old_mode The mode before it changed. + new_mode The new mode as also returned + by |mode()|. + When ModeChanged is triggered, old_mode will + have the value of new_mode when the event was + last triggered. + Usage example to use relative line numbers + when entering visual mode: > + :autocmd ModeChanged *:v set rnu +< *OptionSet* OptionSet After setting an option (except during |startup|). The |autocmd-pattern| is matched against the long option name. || -- cgit From 11683193f597e1b3144ba65f08056cd44b19175f Mon Sep 17 00:00:00 2001 From: Magnus Groß Date: Fri, 22 Oct 2021 20:36:35 +0200 Subject: vim-patch:8.2.3555: ModeChanged is not triggered on every mode change Problem: ModeChanged is not triggered on every mode change. Solution: Also trigger on minor mode changes. (Maguns Gross, closes vim/vim#8999) https://github.com/vim/vim/commit/25def2c8b8bd7b0c3d5f020207c717a880b05d50 --- runtime/doc/autocmd.txt | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) (limited to 'runtime') diff --git a/runtime/doc/autocmd.txt b/runtime/doc/autocmd.txt index eb7e00804e..d196167319 100644 --- a/runtime/doc/autocmd.txt +++ b/runtime/doc/autocmd.txt @@ -721,18 +721,23 @@ MenuPopup Just before showing the popup menu (under the *ModeChanged* ModeChanged After changing the mode. The pattern is matched against `'old_mode:new_mode'`, for - example match against `i:*` to simulate - |InsertLeave|. + example match against `*:c` to simulate + |CmdlineEnter|. The following values of |v:event| are set: old_mode The mode before it changed. new_mode The new mode as also returned - by |mode()|. + by |mode()| called with a + non-zero argument. When ModeChanged is triggered, old_mode will have the value of new_mode when the event was last triggered. + This will be triggered on every minor mode + change. Usage example to use relative line numbers when entering visual mode: > - :autocmd ModeChanged *:v set rnu + :au ModeChanged [vV\x16]*:* let &l:rnu = mode() =~# '^[vV\x16]' + :au ModeChanged *:[vV\x16]* let &l:rnu = mode() =~# '^[vV\x16]' + :au WinEnter,WinLeave * let &l:rnu = mode() =~# '^[vV\x16]' < *OptionSet* OptionSet After setting an option (except during |startup|). The |autocmd-pattern| is matched -- cgit