diff options
author | geekodour <hrishikeshbman@gmail.com> | 2018-04-14 19:21:22 +0530 |
---|---|---|
committer | Justin M. Keyes <justinkz@gmail.com> | 2018-04-15 15:05:02 +0200 |
commit | 1e71978cf032b4a8c3f27e11e6fbafc4fd2ab8db (patch) | |
tree | 6a38461978a3275d2674afd0ff449b97931eaece | |
parent | 1e7d5e8cdf9827978f42ea114cfd85f9d32b00eb (diff) | |
download | rneovim-1e71978cf032b4a8c3f27e11e6fbafc4fd2ab8db.tar.gz rneovim-1e71978cf032b4a8c3f27e11e6fbafc4fd2ab8db.tar.bz2 rneovim-1e71978cf032b4a8c3f27e11e6fbafc4fd2ab8db.zip |
events: VimSuspend, VimResume #8280
closes #3648
ref #5959
-rw-r--r-- | runtime/doc/autocmd.txt | 11 | ||||
-rw-r--r-- | runtime/doc/starting.txt | 14 | ||||
-rw-r--r-- | src/nvim/auevents.lua | 2 | ||||
-rw-r--r-- | src/nvim/ex_docmd.c | 3 | ||||
-rw-r--r-- | test/functional/ui/screen_basic_spec.lua | 16 |
5 files changed, 32 insertions, 14 deletions
diff --git a/runtime/doc/autocmd.txt b/runtime/doc/autocmd.txt index 9a04bf2824..06a016eddb 100644 --- a/runtime/doc/autocmd.txt +++ b/runtime/doc/autocmd.txt @@ -272,10 +272,11 @@ Name triggered by ~ |GUIEnter| after starting the GUI successfully |GUIFailed| after starting the GUI failed |TermResponse| after the terminal response to |t_RV| is received - |QuitPre| when using `:quit`, before deciding whether to quit -|VimLeavePre| before exiting Vim, before writing the shada file -|VimLeave| before exiting Vim, after writing the shada file +|VimLeavePre| before exiting Nvim, before writing the shada file +|VimLeave| before exiting Nvim, after writing the shada file +|VimResume| after Nvim is resumed +|VimSuspend| before Nvim is suspended Various |DirChanged| after the |current-directory| was changed @@ -1009,6 +1010,10 @@ VimLeavePre Before exiting Vim, just before writing the VimResized After the Vim window was resized, thus 'lines' and/or 'columns' changed. Not when starting up though. + *VimResume* +VimResume After Nvim resumes from |suspend| state. + *VimSuspend* +VimSuspend Before Nvim enters |suspend| state. *WinEnter* WinEnter After entering another window. Not done for the first window, when Vim has just started. diff --git a/runtime/doc/starting.txt b/runtime/doc/starting.txt index 21c47edc24..db3eb757c0 100644 --- a/runtime/doc/starting.txt +++ b/runtime/doc/starting.txt @@ -687,25 +687,17 @@ CTRL-Z Suspend Vim, like ":stop". Command-line mode, the CTRL-Z is inserted as a normal character. In Visual mode Vim goes back to Normal mode. - Note: if CTRL-Z undoes a change see |mswin.vim|. - :sus[pend][!] or *:sus* *:suspend* *:st* *:stop* -:st[op][!] Suspend Vim. +:st[op][!] Suspend Vim. Vim will continue if you make it the + foreground job again. If the '!' is not given and 'autowrite' is set, every buffer with changes and a file name is written out. If the '!' is given or 'autowrite' is not set, changed buffers are not written, don't forget to bring Vim back to the foreground later! -In the GUI, suspending is implemented as iconising gvim. In Windows 95/NT, -gvim is minimized. - -On many Unix systems, it is possible to suspend Vim with CTRL-Z. This is only -possible in Normal and Visual mode (see next chapter, |vim-modes|). Vim will -continue if you make it the foreground job again. On other systems, CTRL-Z -will start a new shell. This is the same as the ":sh" command. Vim will -continue if you exit from the shell. +In the GUI, suspending is implementation-defined. In X-windows the selection is disowned when Vim suspends. this means you can't paste it in another application (since Vim is going to sleep an attempt diff --git a/src/nvim/auevents.lua b/src/nvim/auevents.lua index 7dfaf54ff0..1153314e76 100644 --- a/src/nvim/auevents.lua +++ b/src/nvim/auevents.lua @@ -92,6 +92,8 @@ return { 'VimLeave', -- before exiting Vim 'VimLeavePre', -- before exiting Vim and writing ShaDa file 'VimResized', -- after Vim window was resized + 'VimResume', -- after Nvim is resumed + 'VimSuspend', -- before Nvim is suspended 'WinNew', -- when entering a new window 'WinEnter', -- after entering a window 'WinLeave', -- before leaving a window diff --git a/src/nvim/ex_docmd.c b/src/nvim/ex_docmd.c index 93cb0e50fa..7cd6dbdeca 100644 --- a/src/nvim/ex_docmd.c +++ b/src/nvim/ex_docmd.c @@ -6300,15 +6300,18 @@ static void ex_stop(exarg_T *eap) if (!eap->forceit) { autowrite_all(); } + apply_autocmds(EVENT_VIMSUSPEND, NULL, NULL, false, NULL); ui_cursor_goto((int)Rows - 1, 0); ui_linefeed(); ui_flush(); ui_call_suspend(); // call machine specific function + ui_flush(); maketitle(); resettitle(); // force updating the title redraw_later_clear(); ui_refresh(); // may have resized window + apply_autocmds(EVENT_VIMRESUME, NULL, NULL, false, NULL); } } diff --git a/test/functional/ui/screen_basic_spec.lua b/test/functional/ui/screen_basic_spec.lua index 8a1f9b0d19..7fafd6b352 100644 --- a/test/functional/ui/screen_basic_spec.lua +++ b/test/functional/ui/screen_basic_spec.lua @@ -4,6 +4,7 @@ local spawn, set_session, clear = helpers.spawn, helpers.set_session, helpers.cl local feed, command = helpers.feed, helpers.command local insert = helpers.insert local eq = helpers.eq +local eval = helpers.eval local iswin = helpers.iswin describe('screen', function() @@ -75,11 +76,26 @@ describe('Screen', function() local function check() eq(true, screen.suspended) end + + command('let g:ev = []') + command('autocmd VimResume * :call add(g:ev, "r")') + command('autocmd VimSuspend * :call add(g:ev, "s")') + + eq(false, screen.suspended) command('suspend') + eq({ 's', 'r' }, eval('g:ev')) + screen:expect(check) screen.suspended = false + feed('<c-z>') + eq({ 's', 'r', 's', 'r' }, eval('g:ev')) + screen:expect(check) + screen.suspended = false + + command('suspend') + eq({ 's', 'r', 's', 'r', 's', 'r' }, eval('g:ev')) end) end) |