summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/ChangeLog5
-rw-r--r--src/buffer.c7
-rw-r--r--src/buffer.h3
-rw-r--r--src/fileio.c20
4 files changed, 27 insertions, 8 deletions
diff --git a/src/ChangeLog b/src/ChangeLog
index 999269f60a8..698ab0d58dd 100644
--- a/src/ChangeLog
+++ b/src/ChangeLog
@@ -1,3 +1,8 @@
+2009-07-16 Richard Stallman <rms@gnu.org>
+
+ * fileio.c (Fwrite_region, Fdo_auto_save): Handle save_length = -2.
+ (Fset_buffer_auto_saved): Handle save_length = -2.
+
2009-07-16 Chong Yidong <cyd@stupidchicken.com>
* xterm.c (Qx_gtk_map_stock): New var.
diff --git a/src/buffer.c b/src/buffer.c
index f06a6c06a92..f811f162ef2 100644
--- a/src/buffer.c
+++ b/src/buffer.c
@@ -5853,7 +5853,12 @@ Backing up is done before the first time the file is saved. */);
DEFVAR_PER_BUFFER ("buffer-saved-size", &current_buffer->save_length,
make_number (Lisp_Int),
doc: /* Length of current buffer when last read in, saved or auto-saved.
-0 initially. */);
+0 initially.
+-1 means auto-saving turned off until next real save.
+
+If you set this to -2, that means don't turn off auto-saving in this buffer
+if its text size shrinks. If you use `buffer-swap-text' on a buffer,
+you probably should set this to -2 in that buffer. */);
DEFVAR_PER_BUFFER ("selective-display", &current_buffer->selective_display,
Qnil,
diff --git a/src/buffer.h b/src/buffer.h
index 1fb322e3ed9..397b97579e6 100644
--- a/src/buffer.h
+++ b/src/buffer.h
@@ -584,6 +584,9 @@ struct buffer
/* This isn't really used by the C code, so could be deleted. */
Lisp_Object backed_up;
/* Length of file when last read or saved.
+ -1 means auto saving turned off because buffer shrank a lot.
+ -2 means don't turn off auto saving if buffer shrinks.
+ (That value is used with buffer-swap-text.)
This is not in the struct buffer_text
because it's not used in indirect buffers at all. */
Lisp_Object save_length;
diff --git a/src/fileio.c b/src/fileio.c
index bf96b3aa2b1..43872d59472 100644
--- a/src/fileio.c
+++ b/src/fileio.c
@@ -4492,7 +4492,8 @@ This calls `write-region-annotate-functions' at the start, and
if (visiting)
{
SAVE_MODIFF = MODIFF;
- XSETFASTINT (current_buffer->save_length, Z - BEG);
+ if (XINT (current_buffer->save_length) != -2)
+ XSETFASTINT (current_buffer->save_length, Z - BEG);
current_buffer->filename = visit_file;
}
UNGCPRO;
@@ -4703,7 +4704,8 @@ This calls `write-region-annotate-functions' at the start, and
if (visiting)
{
SAVE_MODIFF = MODIFF;
- XSETFASTINT (current_buffer->save_length, Z - BEG);
+ if (XINT (current_buffer->save_length) != -2)
+ XSETFASTINT (current_buffer->save_length, Z - BEG);
current_buffer->filename = visit_file;
update_mode_lines++;
}
@@ -5307,7 +5309,7 @@ A non-nil CURRENT-ONLY argument means save only current buffer. */)
&& 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) >= 0
+ && XINT (b->save_length) != -1
&& (do_handled_files
|| NILP (Ffind_file_name_handler (b->auto_save_file_name,
Qwrite_region))))
@@ -5321,8 +5323,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)
+ if (XINT (b->save_length) != -2
+ /* -2 is a magic flag turning off this feature in a buffer. */
+ && (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
@@ -5347,7 +5351,8 @@ A non-nil CURRENT-ONLY argument means save only current buffer. */)
internal_condition_case (auto_save_1, Qt, auto_save_error);
auto_saved++;
b->auto_save_modified = BUF_MODIFF (b);
- XSETFASTINT (current_buffer->save_length, Z - BEG);
+ if (XINT (current_buffer->save_length) != -2)
+ XSETFASTINT (current_buffer->save_length, Z - BEG);
set_buffer_internal (old);
EMACS_GET_TIME (after_time);
@@ -5392,7 +5397,8 @@ No auto-save file will be written until the buffer changes again. */)
()
{
current_buffer->auto_save_modified = MODIFF;
- XSETFASTINT (current_buffer->save_length, Z - BEG);
+ if (XINT (current_buffer->save_length) != -2)
+ XSETFASTINT (current_buffer->save_length, Z - BEG);
current_buffer->auto_save_failure_time = -1;
return Qnil;
}