Mercurial > vim
diff src/option.c @ 3246:c4898d6d73a2 v7.3.392
updated for version 7.3.392
Problem: When setting 'undofile' while the file is already loaded but
unchanged, try reading the undo file. (Andy Wokula)
Solution: Compute a checksum of the text when 'undofile' is set. (Christian
Brabandt)
author | Bram Moolenaar <bram@vim.org> |
---|---|
date | Wed, 04 Jan 2012 19:34:37 +0100 |
parents | d2f70593afeb |
children | 320cc46d0eb0 |
line wrap: on
line diff
--- a/src/option.c +++ b/src/option.c @@ -7516,6 +7516,30 @@ set_bool_option(opt_idx, varp, value, op compatible_set(); } +#ifdef FEAT_PERSISTENT_UNDO + /* 'undofile' */ + else if ((int *)varp == &curbuf->b_p_udf || (int *)varp == &p_udf) + { + char_u hash[UNDO_HASH_SIZE]; + buf_T *save_curbuf = curbuf; + + for (curbuf = firstbuf; curbuf != NULL; curbuf = curbuf->b_next) + { + /* When 'undofile' is set globally: for every buffer, otherwise + * only for the current buffer: Try to read in the undofile, if + * one exists and the buffer wasn't changed. */ + if ((curbuf == save_curbuf + || (opt_flags & OPT_GLOBAL) || opt_flags == 0) + && !curbufIsChanged()) + { + u_compute_hash(hash); + u_read_undo(NULL, hash, curbuf->b_fname); + } + } + curbuf = save_curbuf; + } +#endif + /* 'list', 'number' */ else if ((int *)varp == &curwin->w_p_list || (int *)varp == &curwin->w_p_nu