Patch 9.0.1538
Problem:    :wqall does not trigger ExitPre. (Bart Libert)
Solution:   Move preparations for :qall to a common function. (closes #12374)
Files:      src/ex_docmd.c, src/proto/ex_docmd.pro, src/ex_cmds.c,
            src/testdir/test_exit.vim


*** ../vim-9.0.1537/src/ex_docmd.c      2023-05-05 22:58:30.805061562 +0100
--- src/ex_docmd.c      2023-05-10 16:45:45.318977303 +0100
***************
*** 5957,5966 ****
  }
  
  /*
!  * ":qall": try to quit all windows
   */
!     static void
! ex_quit_all(exarg_T *eap)
  {
      if (cmdwin_type != 0)
      {
--- 5957,5967 ----
  }
  
  /*
!  * Do preparations for "qall" and "wqall".
!  * Returns FAIL when quitting should be aborted.
   */
!     int
! before_quit_all(exarg_T *eap)
  {
      if (cmdwin_type != 0)
      {
***************
*** 5968,5986 ****
            cmdwin_result = K_XF1;      // ex_window() takes care of this
        else
            cmdwin_result = K_XF2;
!       return;
      }
  
      // Don't quit while editing the command line.
      if (text_locked())
      {
        text_locked_msg();
!       return;
      }
  
      if (before_quit_autocmds(curwin, TRUE, eap->forceit))
!       return;
  
      exiting = TRUE;
      if (eap->forceit || !check_changed_any(FALSE, FALSE))
        getout(0);
--- 5969,5998 ----
            cmdwin_result = K_XF1;      // ex_window() takes care of this
        else
            cmdwin_result = K_XF2;
!       return FAIL;
      }
  
      // Don't quit while editing the command line.
      if (text_locked())
      {
        text_locked_msg();
!       return FAIL;
      }
  
      if (before_quit_autocmds(curwin, TRUE, eap->forceit))
!       return FAIL;
! 
!     return OK;
! }
  
+ /*
+  * ":qall": try to quit all windows
+  */
+     static void
+ ex_quit_all(exarg_T *eap)
+ {
+     if (before_quit_all(eap) == FAIL)
+       return;
      exiting = TRUE;
      if (eap->forceit || !check_changed_any(FALSE, FALSE))
        getout(0);
*** ../vim-9.0.1537/src/proto/ex_docmd.pro      2022-09-01 16:00:49.730496296 
+0100
--- src/proto/ex_docmd.pro      2023-05-10 16:47:47.487359104 +0100
***************
*** 39,44 ****
--- 39,45 ----
  void not_exiting(void);
  int before_quit_autocmds(win_T *wp, int quit_all, int forceit);
  void ex_quit(exarg_T *eap);
+ int before_quit_all(exarg_T *eap);
  void tabpage_close(int forceit);
  void tabpage_close_other(tabpage_T *tp, int forceit);
  void ex_stop(exarg_T *eap);
*** ../vim-9.0.1537/src/ex_cmds.c       2023-04-22 22:54:28.045802345 +0100
--- src/ex_cmds.c       2023-05-10 16:52:13.727961744 +0100
***************
*** 2269,2275 ****
--- 2269,2279 ----
      int               save_forceit = eap->forceit;
  
      if (eap->cmdidx == CMD_xall || eap->cmdidx == CMD_wqall)
+     {
+       if (before_quit_all(eap) == FAIL)
+           return;
        exiting = TRUE;
+     }
  
      FOR_ALL_BUFFERS(buf)
      {
*** ../vim-9.0.1537/src/testdir/test_exit.vim   2022-09-21 21:59:58.273433517 
+0100
--- src/testdir/test_exit.vim   2023-05-10 16:51:34.507888606 +0100
***************
*** 81,86 ****
--- 81,98 ----
          \ readfile('Xtestout'))
    endif
    call delete('Xtestout')
+ 
+   " ExitPre autocommand also executed on :wqall
+   let after =<< trim [CODE]
+     au QuitPre * call writefile(["QuitPre"], "Xtestout", "a")
+     au ExitPre * call writefile(["ExitPre"], "Xtestout", "a")
+     wqall
+   [CODE]
+ 
+   if RunVim([], after, '')
+     call assert_equal(['QuitPre', 'ExitPre'], readfile('Xtestout'))
+   endif
+   call delete('Xtestout')
  endfunc
  
  " Test for getting the Vim exit code from v:exiting
*** ../vim-9.0.1537/src/version.c       2023-05-10 14:47:46.536046589 +0100
--- src/version.c       2023-05-10 16:46:55.303205878 +0100
***************
*** 697,698 ****
--- 697,700 ----
  {   /* Add new patch number below this line */
+ /**/
+     1538,
  /**/

-- 
How To Keep A Healthy Level Of Insanity:
4. Put your garbage can on your desk and label it "in".

 /// Bram Moolenaar -- [email protected] -- http://www.Moolenaar.net   \\\
///                                                                      \\\
\\\        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///

-- 
-- 
You received this message from the "vim_dev" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php

--- 
You received this message because you are subscribed to the Google Groups 
"vim_dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/vim_dev/20230510155358.573741C1B21%40moolenaar.net.

Raspunde prin e-mail lui