]> git.ipfire.org Git - thirdparty/vim.git/commitdiff
patch 9.1.0207: No autocommand when writing session file v9.1.0207
authorColin Kennedy <colinvfx@gmail.com>
Tue, 26 Mar 2024 17:20:16 +0000 (18:20 +0100)
committerChristian Brabandt <cb@256bit.org>
Tue, 26 Mar 2024 17:23:06 +0000 (18:23 +0100)
Problem:  No autocommand when writing session file
Solution: Add SessionWritePost autocommand
          (Colin Kennedy)

fixes: ##14242
closes: #14288

Co-authored-by: zeertzjq <zeertzjq@outlook.com>
Signed-off-by: Colin Kennedy <colinvfx@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
runtime/doc/autocmd.txt
runtime/doc/tags
runtime/doc/version9.txt
src/autocmd.c
src/session.c
src/testdir/test_autocmd.vim
src/version.c
src/vim.h

index 5f9f51ecb6f8407f823c6d3ee0eae9a9228d2297..32094b3982d0ad3550e357fa9e97aec8faf05daa 100644 (file)
@@ -1,4 +1,4 @@
-*autocmd.txt*   For Vim version 9.1.  Last change: 2024 Jan 25
+*autocmd.txt*   For Vim version 9.1.  Last change: 2024 Mar 26
 
 
                  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -428,6 +428,9 @@ Name                        triggered by ~
 
 |SessionLoadPost|      after loading a session file
 
+|SessionWritePost|     After writing the session file using
+                       the |:mksession| command.
+
 |MenuPopup|            just before showing the popup menu
 |CompleteChanged|      after Insert mode completion menu changed
 |CompleteDonePre|      after Insert mode completion is done, before clearing
@@ -1114,6 +1117,9 @@ SafeStateAgain                    Like SafeState but after processing any
 
                                                        *SessionLoadPost*
 SessionLoadPost                        After loading the session file created using
+                               the |:mksession| command.
+                                                       *SessionWritePost*
+SessionWritePost               After writing a session file by calling
                                the |:mksession| command.
                                                        *ShellCmdPost*
 ShellCmdPost                   After executing a shell command with |:!cmd|,
index 8dd4db2418b759aa931499ba958d364ab399bd98..4ff7095e0b8b4478827802ba98ab646adc61f062 100644 (file)
@@ -5682,6 +5682,7 @@ Select-mode-mapping       visual.txt      /*Select-mode-mapping*
 Session        starting.txt    /*Session*
 SessionLoad-variable   starting.txt    /*SessionLoad-variable*
 SessionLoadPost        autocmd.txt     /*SessionLoadPost*
+SessionWritePost       autocmd.txt     /*SessionWritePost*
 ShellCmdPost   autocmd.txt     /*ShellCmdPost*
 ShellFilterPost        autocmd.txt     /*ShellFilterPost*
 SigUSR1        autocmd.txt     /*SigUSR1*
index bf16d495343903bbac30517ecaf3beca01c1451c..b94d15764e09b07b022fda22725f430f141293b3 100644 (file)
@@ -1,4 +1,4 @@
-*version9.txt*  For Vim version 9.1.  Last change: 2024 Mar 03
+*version9.txt*  For Vim version 9.1.  Last change: 2024 Mar 26
 
 
                  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -41570,6 +41570,7 @@ Functions: ~
 
 Autocommands: ~
 
+|SessionWritePost|     after writing the session file |:mksession|
 |TermResponseAll|      after the terminal response to |t_RV| and others is
                        received
 |WinNewPre|            before creating a new window
index 8e43b34473339c0c357f8955f67bca315e3e39c8..8a7e6072a94f9c1dea2345d4e06cb6db45825bb9 100644 (file)
@@ -160,6 +160,7 @@ static struct event_name
     {"SafeState",      EVENT_SAFESTATE},
     {"SafeStateAgain", EVENT_SAFESTATEAGAIN},
     {"SessionLoadPost",        EVENT_SESSIONLOADPOST},
+    {"SessionWritePost",EVENT_SESSIONWRITEPOST},
     {"ShellCmdPost",   EVENT_SHELLCMDPOST},
     {"ShellFilterPost",        EVENT_SHELLFILTERPOST},
     {"SigUSR1",                EVENT_SIGUSR1},
index e39ce4d4d1ec7222573be22963f4c295d7d032f1..eea57a2333e7934914798ccc294813ef71a3c49f 100644 (file)
@@ -1392,6 +1392,8 @@ theend:
 #ifdef FEAT_SESSION
     vim_free(viewFile);
 #endif
+
+    apply_autocmds(EVENT_SESSIONWRITEPOST, NULL, NULL, FALSE, curbuf);
 }
 
 #if (defined(FEAT_VIMINFO) || defined(FEAT_SESSION)) || defined(PROTO)
index 564d568c0d6b106c12b2ac0840c0c005de244e8e..f0620040c206e5bd8b28ee85f8e0b27f77c8a08a 100644 (file)
@@ -4474,4 +4474,60 @@ func Test_autocmd_creates_new_buffer_on_bufleave()
   bw c.txt
 endfunc
 
+" Ensure `expected` was just recently written as a Vim session
+func s:assert_session_path(expected)
+  call assert_equal(a:expected, v:this_session)
+endfunc
+
+" Check for `expected` after a session is written to-disk.
+func s:watch_for_session_path(expected)
+  execute 'autocmd SessionWritePost * ++once execute "call s:assert_session_path(\"'
+        \ . a:expected
+        \ . '\")"'
+endfunc
+
+" Ensure v:this_session gets the full session path, if explicitly stated
+func Test_explicit_session_absolute_path()
+  %bwipeout!
+
+  let directory = getcwd()
+
+  let v:this_session = ""
+  let name = "some_file.vim"
+  let expected = fnamemodify(name, ":p")
+  call s:watch_for_session_path(expected)
+  execute "mksession! " .. expected
+
+  call delete(expected)
+endfunc
+
+" Ensure v:this_session gets the full session path, if explicitly stated
+func Test_explicit_session_relative_path()
+  %bwipeout!
+
+  let directory = getcwd()
+
+  let v:this_session = ""
+  let name = "some_file.vim"
+  let expected = fnamemodify(name, ":p")
+  call s:watch_for_session_path(expected)
+  execute "mksession! " .. name
+
+  call delete(expected)
+endfunc
+
+" Ensure v:this_session gets the full session path, if not specified
+func Test_implicit_session()
+  %bwipeout!
+
+  let directory = getcwd()
+
+  let v:this_session = ""
+  let expected = fnamemodify("Session.vim", ":p")
+  call s:watch_for_session_path(expected)
+  mksession!
+
+  call delete(expected)
+endfunc
+
 " vim: shiftwidth=2 sts=2 expandtab
index 76bfd1026025811bc876e9e716ae50e3936beafc..8ab59571975e3010d1ca2ef3549b118e3a71e40f 100644 (file)
@@ -704,6 +704,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    207,
 /**/
     206,
 /**/
index a04be0837ea44d6f09eeab813b927ea1634f6fbb..63a31880dcc08ff1238db45f40759336914ee1cc 100644 (file)
--- a/src/vim.h
+++ b/src/vim.h
@@ -1404,6 +1404,7 @@ enum auto_event
     EVENT_SAFESTATE,           // going to wait for a character
     EVENT_SAFESTATEAGAIN,      // still waiting for a character
     EVENT_SESSIONLOADPOST,     // after loading a session file
+    EVENT_SESSIONWRITEPOST,    // after writing a session file
     EVENT_SHELLCMDPOST,                // after ":!cmd"
     EVENT_SHELLFILTERPOST,     // after ":1,2!cmd", ":w !cmd", ":r !cmd".
     EVENT_SIGUSR1,             // after the SIGUSR1 signal