diff options
author | Usama Hameed <usama54321@gmail.com> | 2019-09-15 03:54:19 +0500 |
---|---|---|
committer | Justin M. Keyes <justinkz@gmail.com> | 2019-09-14 15:54:19 -0700 |
commit | fc27dc98d74f0e25bf1dc2cb8ff399b05ccd6f2c (patch) | |
tree | 65bc3f2ad808f50247ce923861db0dad20fe644b | |
parent | 8c88d98df955ebf2fb93506c19ce2af82e24a2df (diff) | |
download | rneovim-fc27dc98d74f0e25bf1dc2cb8ff399b05ccd6f2c.tar.gz rneovim-fc27dc98d74f0e25bf1dc2cb8ff399b05ccd6f2c.tar.bz2 rneovim-fc27dc98d74f0e25bf1dc2cb8ff399b05ccd6f2c.zip |
autocmds: TermEnter, TermLeave #8550
fix #8428
-rw-r--r-- | runtime/doc/autocmd.txt | 16 | ||||
-rw-r--r-- | runtime/doc/nvim_terminal_emulator.txt | 2 | ||||
-rw-r--r-- | src/nvim/auevents.lua | 2 | ||||
-rw-r--r-- | src/nvim/terminal.c | 3 | ||||
-rw-r--r-- | test/functional/autocmd/termxx_spec.lua (renamed from test/functional/autocmd/termclose_spec.lua) | 37 |
5 files changed, 53 insertions, 7 deletions
diff --git a/runtime/doc/autocmd.txt b/runtime/doc/autocmd.txt index 05a4167b48..34ea083f96 100644 --- a/runtime/doc/autocmd.txt +++ b/runtime/doc/autocmd.txt @@ -268,8 +268,10 @@ Name triggered by ~ |BufNew| just after creating a new buffer |SwapExists| detected an existing swap file -|TermOpen| when a terminal job starts -|TermClose| when a terminal job ends +|TermOpen| starting a terminal job +|TermEnter| entering Terminal-mode +|TermLeave| leaving Terminal-mode +|TermClose| stopping a terminal job |ChanOpen| after a channel opened |ChanInfo| after a channel has its state changed @@ -1049,11 +1051,17 @@ TabNewEntered After entering a new tab page. |tab-page| *TabClosed* TabClosed After closing a tab page. <afile> can be used for the tab page number. - *TermClose* -TermClose When a |terminal| job ends. *TermOpen* TermOpen When a |terminal| job is starting. Can be used to configure the terminal buffer. + *TermEnter* +TermEnter After entering |Terminal-mode|. + After TermOpen. + *TermLeave* +TermLeave After leaving |Terminal-mode|. + After TermClose. + *TermClose* +TermClose When a |terminal| job ends. *TermResponse* TermResponse After the response to t_RV is received from the terminal. The value of |v:termresponse| diff --git a/runtime/doc/nvim_terminal_emulator.txt b/runtime/doc/nvim_terminal_emulator.txt index d1831a8de6..1a5e6421e7 100644 --- a/runtime/doc/nvim_terminal_emulator.txt +++ b/runtime/doc/nvim_terminal_emulator.txt @@ -88,7 +88,7 @@ Mouse input has the following behavior: Configuration *terminal-configuration* Options: 'modified', 'scrollback' -Events: |TermOpen|, |TermClose| +Events: |TermOpen|, |TermEnter|, |TermLeave|, |TermClose| Highlight groups: |hl-TermCursor|, |hl-TermCursorNC| Terminal sets local defaults for some options, which may differ from your diff --git a/src/nvim/auevents.lua b/src/nvim/auevents.lua index c808af37b1..c223679596 100644 --- a/src/nvim/auevents.lua +++ b/src/nvim/auevents.lua @@ -90,6 +90,8 @@ return { 'TabNewEntered', -- after entering a new tab 'TermChanged', -- after changing 'term' 'TermClose', -- after the process exits + 'TermEnter', -- after entering Terminal mode + 'TermLeave', -- after leaving Terminal mode 'TermOpen', -- after opening a terminal buffer 'TermResponse', -- after setting "v:termresponse" 'TextChanged', -- text was modified diff --git a/src/nvim/terminal.c b/src/nvim/terminal.c index b1ce0e6592..8fcc8bf0a5 100644 --- a/src/nvim/terminal.c +++ b/src/nvim/terminal.c @@ -355,6 +355,7 @@ void terminal_enter(void) showmode(); curwin->w_redr_status = true; // For mode() in statusline. #8323 ui_busy_start(); + apply_autocmds(EVENT_TERMENTER, NULL, NULL, false, curbuf); s->state.execute = terminal_execute; s->state.check = terminal_check; @@ -363,6 +364,8 @@ void terminal_enter(void) restart_edit = 0; State = save_state; RedrawingDisabled = s->save_rd; + apply_autocmds(EVENT_TERMLEAVE, NULL, NULL, false, curbuf); + if (save_curwin == curwin) { // save_curwin may be invalid (window closed)! curwin->w_p_cul = save_w_p_cul; curwin->w_p_cuc = save_w_p_cuc; diff --git a/test/functional/autocmd/termclose_spec.lua b/test/functional/autocmd/termxx_spec.lua index 50bcf1af5a..b12c24b58d 100644 --- a/test/functional/autocmd/termclose_spec.lua +++ b/test/functional/autocmd/termxx_spec.lua @@ -9,8 +9,7 @@ local ok = helpers.ok local feed = helpers.feed local iswin = helpers.iswin - -describe('TermClose event', function() +describe('autocmd TermClose', function() before_each(function() clear() nvim('set_option', 'shell', nvim_dir .. '/shell-test') @@ -92,3 +91,37 @@ describe('TermClose event', function() feed('<c-c>:qa!<cr>') end) end) + +it('autocmd TermEnter, TermLeave', function() + clear() + command('let g:evs = []') + command('autocmd TermOpen * call add(g:evs, ["TermOpen", mode()])') + command('autocmd TermClose * call add(g:evs, ["TermClose", mode()])') + command('autocmd TermEnter * call add(g:evs, ["TermEnter", mode()])') + command('autocmd TermLeave * call add(g:evs, ["TermLeave", mode()])') + command('terminal') + + feed('i') + eq({ {'TermOpen', 'n'}, {'TermEnter', 't'}, }, eval('g:evs')) + feed([[<C-\><C-n>]]) + feed('A') + eq({ {'TermOpen', 'n'}, {'TermEnter', 't'}, {'TermLeave', 'n'}, {'TermEnter', 't'}, }, eval('g:evs')) + + -- TermLeave is also triggered by :quit. + command('split foo') + command('wincmd w') + feed('i') + command('q!') + eq( + { + {'TermOpen', 'n'}, + {'TermEnter', 't'}, + {'TermLeave', 'n'}, + {'TermEnter', 't'}, + {'TermLeave', 'n'}, + {'TermEnter', 't'}, + {'TermClose', 't'}, + {'TermLeave', 'n'}, + }, + eval('g:evs')) +end) |