Mercurial > vim
changeset 3036:df33dba4e553 v7.3.290
updated for version 7.3.290
Problem: When a BufWriteCmd autocommand resets 'modified' this doesn't
change older buffer states to be marked as 'modified' like
":write" does. (Yukihiro Nakadaira)
Solution: When the BufWriteCmd resets 'modified' then adjust the undo
information like ":write" does.
author | Bram Moolenaar <bram@vim.org> |
---|---|
date | Fri, 02 Sep 2011 11:56:20 +0200 |
parents | ba9f075a347d |
children | 5dc0dbe052c0 |
files | src/fileio.c src/version.c |
diffstat | 2 files changed, 18 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- a/src/fileio.c +++ b/src/fileio.c @@ -3342,8 +3342,22 @@ buf_write(buf, fname, sfname, start, end } else if (reset_changed && whole) { - if (!(did_cmd = apply_autocmds_exarg(EVENT_BUFWRITECMD, - sfname, sfname, FALSE, curbuf, eap))) + int was_changed = curbufIsChanged(); + + did_cmd = apply_autocmds_exarg(EVENT_BUFWRITECMD, + sfname, sfname, FALSE, curbuf, eap); + if (did_cmd) + { + if (was_changed && !curbufIsChanged()) + { + /* Written everything correctly and BufWriteCmd has reset + * 'modified': Correct the undo information so that an + * undo now sets 'modified'. */ + u_unchanged(curbuf); + u_update_save_nr(curbuf); + } + } + else { #ifdef FEAT_QUICKFIX if (overwriting && bt_nofile(curbuf))