Use register_shell_extension()? (George Reilly, 2010 May 26)
Ron's version: http://dev.ronware.org/p/vim/finfo?name=gvim.nsi
- Persistent undo bugs / fixes:
- - Memory leak reproduced by Dominique Pelle, 2010 May 28.
- - When there is no undo info (undolevels negative), delete the undo file.
- Already done?
- Need to check all values for evil manipulation.
- Add undofile(name): get undo file name for buffer "name".
- patch for unused functions. (Dominique Pelle, 2010 May 29)
if (file_name == NULL)
{
if (p_verbose > 0)
- smsg((char_u *)_("Cannot write undo file in any directory in 'undodir'"));
+ {
+ verbose_enter();
+ smsg((char_u *)
+ _("Cannot write undo file in any directory in 'undodir'"));
+ verbose_leave();
+ }
return;
}
}
if (fd < 0)
{
if (name != NULL || p_verbose > 0)
- smsg((char_u *)_("Will not overwrite with undo file, cannot read: %s"),
+ {
+ if (name == NULL)
+ verbose_enter();
+ smsg((char_u *)
+ _("Will not overwrite with undo file, cannot read: %s"),
file_name);
+ if (name == NULL)
+ verbose_leave();
+ }
goto theend;
}
else
|| memcmp(buf, UF_START_MAGIC, UF_START_MAGIC_LEN) != 0)
{
if (name != NULL || p_verbose > 0)
+ {
+ if (name == NULL)
+ verbose_enter();
smsg((char_u *)_("Will not overwrite, this is not an undo file: %s"),
file_name);
+ if (name == NULL)
+ verbose_leave();
+ }
goto theend;
}
}
mch_remove(file_name);
}
+ /* If there is no undo information at all, quit here after deleting any
+ * existing undo file. */
+ if (buf->b_u_numhead == 0)
+ {
+ if (p_verbose > 0)
+ verb_msg((char_u *)_("Skipping undo file write, noting to undo"));
+ goto theend;
+ }
+
fd = mch_open((char *)file_name,
O_CREAT|O_EXTRA|O_WRONLY|O_EXCL|O_NOFOLLOW, perm);
if (fd < 0)
}
(void)mch_setperm(file_name, perm);
if (p_verbose > 0)
+ {
+ verbose_enter();
smsg((char_u *)_("Writing undo file: %s"), file_name);
+ verbose_leave();
+ }
#ifdef U_DEBUG
- /* Check if there already is a problem before writing. */
+ /* Check there is no problem in undo info before writing. */
u_check(FALSE);
#endif
file_name = name;
if (p_verbose > 0)
+ {
+ verbose_enter();
smsg((char_u *)_("Reading undo file: %s"), file_name);
+ verbose_leave();
+ }
fp = mch_fopen((char *)file_name, "r");
if (fp == NULL)
{
{
if (p_verbose > 0 || name != NULL)
{
- verbose_enter();
+ if (name == NULL)
+ verbose_enter();
give_warning((char_u *)_("File contents changed, cannot use undo info"), TRUE);
- verbose_leave();
+ if (name == NULL)
+ verbose_leave();
}
goto error;
}