# HG changeset patch # User Chong Yidong # Date 1248219242 0 # Node ID 65ac865116fcbd4173cc1062d948021626171652 # Parent 835416032efae58e082ea0d3022ebfa14ad437fb * 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. diff -r 835416032efa -r 65ac865116fc src/ChangeLog --- 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 + + * 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 * xdisp.c (move_it_to): For continued lines ending in a tab, take diff -r 835416032efa -r 65ac865116fc src/fileio.c --- 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'.