Patch 7.4.1037
Problem: Using "q!" when there is a modified hidden buffer does not unload
the current buffer, resulting in the need to abandon it again.
Solution: When using "q!" unload the current buffer when needed. (Yasuhiro
Matsumoto, Hirohito Higashi)
Files: src/testdir/test31.in, src/testdir/test31.ok,
runtime/doc/editing.txt, src/ex_cmds2.c, src/ex_docmd.c,
src/gui.c, src/gui_gtk_x11.c, src/os_unix.c,
src/proto/ex_cmds2.pro
*** ../vim-7.4.1036/src/testdir/test31.in 2012-02-12 23:57:42.000000000
+0100
--- src/testdir/test31.in 2016-01-02 22:13:18.166838164 +0100
***************
*** 69,74 ****
--- 69,94 ----
GA 4 :all!
:1wincmd w
:w >>test.out
+ :"
+ :" test ":q!" and hidden buffer.
+ :bw! Xtest1 Xtest2 Xtest3 Xtest4
+ :sp Xtest1
+ :wincmd w
+ :bw!
+ :set modified
+ :bot sp Xtest2
+ :set modified
+ :bot sp Xtest3
+ :set modified
+ :wincmd t
+ :hide
+ :q!
+ :w >>test.out
+ :q!
+ :w >>test.out
+ :q!
+ :call append(line('$'), "Oh, Not finished yet.")
+ :w >>test.out
:qa!
ENDTEST
*** ../vim-7.4.1036/src/testdir/test31.ok 2012-02-13 00:00:13.000000000
+0100
--- src/testdir/test31.ok 2016-01-02 22:13:18.166838164 +0100
***************
*** 10,12 ****
--- 10,14 ----
testtext 3 3 3
testtext 1
testtext 2 2 2
+ testtext 3
+ testtext 1
*** ../vim-7.4.1036/runtime/doc/editing.txt 2015-09-08 18:46:04.337233673
+0200
--- runtime/doc/editing.txt 2016-01-02 22:15:50.757167261 +0100
***************
*** 1091,1100 ****
the last file in the argument list has not been
edited. See |:confirm| and 'confirm'. {not in Vi}
! :q[uit]! Quit without writing, also when currently visible
! buffers have changes. Does not exit when this is the
! last window and there is a changed hidden buffer.
! In this case, the first changed hidden buffer becomes
the current buffer.
Use ":qall!" to exit always.
--- 1105,1114 ----
the last file in the argument list has not been
edited. See |:confirm| and 'confirm'. {not in Vi}
! :q[uit]! Quit without writing, also when currentl buffer has
! changes. If this is the last window and there is a
! modified hidden buffer, the current buffer is
! abandoned and the first changed hidden buffer becomes
the current buffer.
Use ":qall!" to exit always.
*** ../vim-7.4.1036/src/ex_cmds2.c 2015-09-09 22:35:25.792564584 +0200
--- src/ex_cmds2.c 2016-01-02 22:18:39.275322271 +0100
***************
*** 1636,1645 ****
/*
* Return TRUE if any buffer was changed and cannot be abandoned.
* That changed buffer becomes the current buffer.
*/
int
! check_changed_any(hidden)
int hidden; /* Only check hidden buffers */
{
int ret = FALSE;
buf_T *buf;
--- 1636,1648 ----
/*
* Return TRUE if any buffer was changed and cannot be abandoned.
* That changed buffer becomes the current buffer.
+ * When "unload" is true the current buffer is unloaded instead of making it
+ * hidden. This is used for ":q!".
*/
int
! check_changed_any(hidden, unload)
int hidden; /* Only check hidden buffers */
+ int unload;
{
int ret = FALSE;
buf_T *buf;
***************
*** 1750,1756 ****
/* Open the changed buffer in the current window. */
if (buf != curbuf)
! set_curbuf(buf, DOBUF_GOTO);
theend:
vim_free(bufnrs);
--- 1753,1759 ----
/* Open the changed buffer in the current window. */
if (buf != curbuf)
! set_curbuf(buf, unload ? DOBUF_UNLOAD : DOBUF_GOTO);
theend:
vim_free(bufnrs);
*** ../vim-7.4.1036/src/ex_docmd.c 2016-01-02 21:40:46.600201059 +0100
--- src/ex_docmd.c 2016-01-02 22:13:48.710503680 +0100
***************
*** 7143,7149 ****
| (eap->forceit ? CCGD_FORCEIT : 0)
| CCGD_EXCMD))
|| check_more(TRUE, eap->forceit) == FAIL
! || (only_one_window() && check_changed_any(eap->forceit)))
{
not_exiting();
}
--- 7143,7149 ----
| (eap->forceit ? CCGD_FORCEIT : 0)
| CCGD_EXCMD))
|| check_more(TRUE, eap->forceit) == FAIL
! || (only_one_window() && check_changed_any(eap->forceit, TRUE)))
{
not_exiting();
}
***************
*** 7214,7220 ****
#endif
exiting = TRUE;
! if (eap->forceit || !check_changed_any(FALSE))
getout(0);
not_exiting();
}
--- 7214,7220 ----
#endif
exiting = TRUE;
! if (eap->forceit || !check_changed_any(FALSE, FALSE))
getout(0);
not_exiting();
}
***************
*** 7609,7615 ****
|| curbufIsChanged())
&& do_write(eap) == FAIL)
|| check_more(TRUE, eap->forceit) == FAIL
! || (only_one_window() && check_changed_any(eap->forceit)))
{
not_exiting();
}
--- 7609,7615 ----
|| curbufIsChanged())
&& do_write(eap) == FAIL)
|| check_more(TRUE, eap->forceit) == FAIL
! || (only_one_window() && check_changed_any(eap->forceit, FALSE)))
{
not_exiting();
}
*** ../vim-7.4.1036/src/gui.c 2015-11-10 14:35:14.308069835 +0100
--- src/gui.c 2016-01-02 22:13:48.714503636 +0100
***************
*** 825,831 ****
# endif
/* If there are changed buffers, present the user with a dialog if
* possible, otherwise give an error message. */
! if (!check_changed_any(FALSE))
getout(0);
exiting = FALSE;
--- 825,831 ----
# endif
/* If there are changed buffers, present the user with a dialog if
* possible, otherwise give an error message. */
! if (!check_changed_any(FALSE, FALSE))
getout(0);
exiting = FALSE;
*** ../vim-7.4.1036/src/gui_gtk_x11.c 2015-12-29 18:52:33.348054385 +0100
--- src/gui_gtk_x11.c 2016-01-02 22:13:48.714503636 +0100
***************
*** 2003,2009 ****
* If there are changed buffers, present the user with
* a dialog if possible, otherwise give an error message.
*/
! shutdown_cancelled = check_changed_any(FALSE);
exiting = FALSE;
cmdmod = save_cmdmod;
--- 2003,2009 ----
* If there are changed buffers, present the user with
* a dialog if possible, otherwise give an error message.
*/
! shutdown_cancelled = check_changed_any(FALSE, FALSE);
exiting = FALSE;
cmdmod = save_cmdmod;
*** ../vim-7.4.1036/src/os_unix.c 2015-12-31 21:26:50.649266887 +0100
--- src/os_unix.c 2016-01-02 22:13:48.718503593 +0100
***************
*** 7132,7138 ****
save_cmdmod = cmdmod;
cmdmod.confirm = TRUE;
! if (check_changed_any(FALSE))
/* Mustn't logout */
cancel_shutdown = True;
cmdmod = save_cmdmod;
--- 7132,7138 ----
save_cmdmod = cmdmod;
cmdmod.confirm = TRUE;
! if (check_changed_any(FALSE, FALSE))
/* Mustn't logout */
cancel_shutdown = True;
cmdmod = save_cmdmod;
*** ../vim-7.4.1036/src/proto/ex_cmds2.pro 2013-11-09 03:31:45.000000000
+0100
--- src/proto/ex_cmds2.pro 2016-01-02 22:13:48.718503593 +0100
***************
*** 39,45 ****
void browse_save_fname __ARGS((buf_T *buf));
void dialog_changed __ARGS((buf_T *buf, int checkall));
int can_abandon __ARGS((buf_T *buf, int forceit));
! int check_changed_any __ARGS((int hidden));
int check_fname __ARGS((void));
int buf_write_all __ARGS((buf_T *buf, int forceit));
int get_arglist __ARGS((garray_T *gap, char_u *str));
--- 39,45 ----
void browse_save_fname __ARGS((buf_T *buf));
void dialog_changed __ARGS((buf_T *buf, int checkall));
int can_abandon __ARGS((buf_T *buf, int forceit));
! int check_changed_any __ARGS((int hidden, int unload));
int check_fname __ARGS((void));
int buf_write_all __ARGS((buf_T *buf, int forceit));
int get_arglist __ARGS((garray_T *gap, char_u *str));
*** ../vim-7.4.1036/src/version.c 2016-01-02 22:02:56.201651969 +0100
--- src/version.c 2016-01-02 22:12:44.887202623 +0100
***************
*** 743,744 ****
--- 743,746 ----
{ /* Add new patch number below this line */
+ /**/
+ 1037,
/**/
--
An indication you must be a manager:
You feel sorry for Dilbert's boss.
/// Bram Moolenaar -- [email protected] -- http://www.Moolenaar.net \\\
/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\ an exciting new programming language -- http://www.Zimbu.org ///
\\\ 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].
For more options, visit https://groups.google.com/d/optout.