changeset 104015:65ac865116fc

* fileio.c: Revert 2009-07-16 changes. (Vauto_save_include_big_deletions): New variable. (Fdo_auto_save): Disable auto-save only if auto-save-include-big-deletions is nil.
author Chong Yidong <cyd@stupidchicken.com>
date Tue, 21 Jul 2009 23:34:02 +0000
parents 835416032efa
children e59e70025fe8
files src/ChangeLog src/fileio.c
diffstat 2 files changed, 24 insertions(+), 12 deletions(-) [+]
line wrap: on
line diff
--- a/src/ChangeLog	Tue Jul 21 20:12:09 2009 +0000
+++ b/src/ChangeLog	Tue Jul 21 23:34:02 2009 +0000
@@ -1,3 +1,10 @@
+2009-07-21  Chong Yidong  <cyd@stupidchicken.com>
+
+	* fileio.c: Revert 2009-07-16 changes.
+	(Vauto_save_include_big_deletions): New variable.
+	(Fdo_auto_save): Disable auto-save only if
+	auto-save-include-big-deletions is nil.
+
 2009-07-21  Chong Yidong  <cyd@stupidchicken.com>
 
 	* xdisp.c (move_it_to): For continued lines ending in a tab, take
--- a/src/fileio.c	Tue Jul 21 20:12:09 2009 +0000
+++ b/src/fileio.c	Tue Jul 21 23:34:02 2009 +0000
@@ -193,6 +193,9 @@
 /* Whether or not files are auto-saved into themselves.  */
 Lisp_Object Vauto_save_visited_file_name;
 
+/* Whether or not to continue auto-saving after a large deletion.  */
+Lisp_Object Vauto_save_include_big_deletions;
+
 /* On NT, specifies the directory separator character, used (eg.) when
    expanding file names.  This can be bound to / or \. */
 Lisp_Object Vdirectory_sep_char;
@@ -4492,8 +4495,7 @@
       if (visiting)
 	{
 	  SAVE_MODIFF = MODIFF;
-	  if (XINT (current_buffer->save_length) != -2)
-	    XSETFASTINT (current_buffer->save_length, Z - BEG);
+	  XSETFASTINT (current_buffer->save_length, Z - BEG);
 	  current_buffer->filename = visit_file;
 	}
       UNGCPRO;
@@ -4704,8 +4706,7 @@
   if (visiting)
     {
       SAVE_MODIFF = MODIFF;
-      if (XINT (current_buffer->save_length) != -2)
-	XSETFASTINT (current_buffer->save_length, Z - BEG);
+      XSETFASTINT (current_buffer->save_length, Z - BEG);
       current_buffer->filename = visit_file;
       update_mode_lines++;
     }
@@ -5309,7 +5310,7 @@
 	    && BUF_SAVE_MODIFF (b) < BUF_MODIFF (b)
 	    && b->auto_save_modified < BUF_MODIFF (b)
 	    /* -1 means we've turned off autosaving for a while--see below.  */
-	    && XINT (b->save_length) != -1
+	    && XINT (b->save_length) >= 0
 	    && (do_handled_files
 		|| NILP (Ffind_file_name_handler (b->auto_save_file_name,
 						  Qwrite_region))))
@@ -5323,8 +5324,8 @@
 		&& EMACS_SECS (before_time) - b->auto_save_failure_time < 1200)
 	      continue;
 
-	    if (XINT (b->save_length) != -2
-		/* -2 is a magic flag turning off this feature in a buffer.  */
+	    set_buffer_internal (b);
+	    if (NILP (Vauto_save_include_big_deletions)
 		&& (XFASTINT (b->save_length) * 10
 		    > (BUF_Z (b) - BUF_BEG (b)) * 13)
 		/* A short file is likely to change a large fraction;
@@ -5345,14 +5346,12 @@
 		Fsleep_for (make_number (1), Qnil);
 		continue;
 	      }
-	    set_buffer_internal (b);
 	    if (!auto_saved && NILP (no_message))
 	      message1 ("Auto-saving...");
 	    internal_condition_case (auto_save_1, Qt, auto_save_error);
 	    auto_saved++;
 	    b->auto_save_modified = BUF_MODIFF (b);
-	    if (XINT (current_buffer->save_length) != -2)
-	      XSETFASTINT (current_buffer->save_length, Z - BEG);
+	    XSETFASTINT (current_buffer->save_length, Z - BEG);
 	    set_buffer_internal (old);
 
 	    EMACS_GET_TIME (after_time);
@@ -5397,8 +5396,7 @@
      ()
 {
   current_buffer->auto_save_modified = MODIFF;
-  if (XINT (current_buffer->save_length) != -2)
-    XSETFASTINT (current_buffer->save_length, Z - BEG);
+  XSETFASTINT (current_buffer->save_length, Z - BEG);
   current_buffer->auto_save_failure_time = -1;
   return Qnil;
 }
@@ -5710,6 +5708,13 @@
 Normally auto-save files are written under other names.  */);
   Vauto_save_visited_file_name = Qnil;
 
+  DEFVAR_LISP ("auto-save-include-big-deletions", &Vauto_save_include_big_deletions,
+	       doc: /* If non-nil, auto-save even if a large part of the text is deleted.
+If nil, deleting a substantial portion of the text disables auto-save
+in the buffer; this is the default behavior, because the auto-save
+file is usually more useful if it contains the deleted text.  */);
+  Vauto_save_include_big_deletions = Qnil;
+
 #ifdef HAVE_FSYNC
   DEFVAR_BOOL ("write-region-inhibit-fsync", &write_region_inhibit_fsync,
 	       doc: /* *Non-nil means don't call fsync in `write-region'.