To:
[email protected]
Subject: Patch 6.2f.006
Fcc: outbox
From: Bram Moolenaar <
[email protected]>
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
------------
Patch 6.2f.006
Problem: When saving a file takes a while and Vim regains focus this can
result in a "file changed outside of Vim" warning and ml_get()
errors. (Mike Williams)
Solution: Add the "b_saving" flag to avoid checking the timestamp while the
buffer is being saved. (Michael Schaap)
Files: src/fileio.c, src/structs.h
*** ../vim-6.2f.005/src/fileio.c Mon May 26 22:15:06 2003
--- src/fileio.c Mon May 26 21:08:40 2003
***************
*** 2800,2805 ****
--- 2800,2808 ----
prev_got_int = got_int;
got_int = FALSE;
+ /* Mark the buffer as 'being saved' to prevent changed buffer warnings */
+ buf->b_saving = TRUE;
+
/*
* If we are not appending or filtering, the file exists, and the
* 'writebackup', 'backup' or 'patchmode' option is set, need a backup.
***************
*** 3960,3965 ****
--- 3963,3971 ----
--no_wait_return; /* may wait for return now */
nofail:
+ /* Done saving, we accept changed buffer warnings again */
+ buf->b_saving = FALSE;
+
vim_free(backup);
if (buffer != smallbuf)
vim_free(buffer);
***************
*** 5387,5399 ****
int save_mouse_correct = need_mouse_correct;
#endif
! /* If there is no file name, the buffer is not loaded, or 'buftype' is
! * set: ignore this buffer. */
if (buf->b_ffname == NULL
|| buf->b_ml.ml_mfp == NULL
#if defined(FEAT_QUICKFIX)
|| *buf->b_p_bt != NUL
#endif
)
return 0;
--- 5393,5406 ----
int save_mouse_correct = need_mouse_correct;
#endif
! /* If there is no file name, the buffer is not loaded, 'buftype' is
! * set, or we are in the middle of a save: ignore this buffer. */
if (buf->b_ffname == NULL
|| buf->b_ml.ml_mfp == NULL
#if defined(FEAT_QUICKFIX)
|| *buf->b_p_bt != NUL
#endif
+ || buf->b_saving
)
return 0;
*** ../vim-6.2f.005/src/structs.h Mon May 26 22:15:06 2003
--- src/structs.h Mon May 26 21:08:40 2003
***************
*** 904,909 ****
--- 904,912 ----
file has been changed and not written out. */
int b_changedtick; /* incremented for each change, also for undo */
+ int b_saving; /* Set to TRUE if we are in the middle of
+ saving the buffer. */
+
/*
* Changes to a buffer require updating of the display. To minimize the
* work, remember changes made and update everything at once.
*** ../vim-6.2f.005/src/version.c Mon May 26 23:00:43 2003
--- src/version.c Mon May 26 23:02:14 2003
***************
*** 632,633 ****
--- 632,635 ----
{ /* Add new patch number below this line */
+ /**/
+ 6,
/**/
--
CRONE: Who sent you?
ARTHUR: The Knights Who Say GNU!
CRONE: Aaaagh! (she looks around in rear) No! We have no shrubberies here.
"Monty Python and the Holy editor wars" PYTHON (MONTY) SOFTWARE LTD
/// Bram Moolenaar --
[email protected] --
http://www.Moolenaar.net \\\
/// Creator of Vim - Vi IMproved --
http://www.Vim.org \\\
\\\ Project leader for A-A-P --
http://www.A-A-P.org ///
\\\ Help AIDS victims, buy at Amazon --
http://ICCF.nl/click1.html ///