]> git.eshelyaron.com Git - emacs.git/commitdiff
* fileio.c (Vauto_save_include_big_deletions): New variable.
authorChong Yidong <cyd@stupidchicken.com>
Tue, 21 Jul 2009 23:17:06 +0000 (23:17 +0000)
committerChong Yidong <cyd@stupidchicken.com>
Tue, 21 Jul 2009 23:17:06 +0000 (23:17 +0000)
(Fdo_auto_save): Disable auto-save only if
auto-save-include-big-deletions is nil.

src/ChangeLog
src/fileio.c

index 1ed4b48e3ca7685e94a25c7f8afc9e8b34269a23..c84ed27d87b6177721f205eb359949563cc32e53 100644 (file)
@@ -1,3 +1,9 @@
+2009-07-21  Chong Yidong  <cyd@stupidchicken.com>
+
+       * fileio.c (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
index bf96b3aa2b133377555c631f10cb579d08de9074..3702d4cc1b847db467083a3e96cb789cf710b471 100644 (file)
@@ -193,6 +193,9 @@ Lisp_Object Vauto_save_list_file_name;
 /* 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;
@@ -5321,8 +5324,10 @@ A non-nil CURRENT-ONLY argument means save only current buffer.  */)
                && EMACS_SECS (before_time) - b->auto_save_failure_time < 1200)
              continue;
 
-           if ((XFASTINT (b->save_length) * 10
-                > (BUF_Z (b) - BUF_BEG (b)) * 13)
+           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;
                   spare the user annoying messages.  */
                && XFASTINT (b->save_length) > 5000
@@ -5341,7 +5346,6 @@ A non-nil CURRENT-ONLY argument means save only current buffer.  */)
                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);
@@ -5704,6 +5708,13 @@ a non-nil value.  */);
 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'.