changeset 43218:a4b638169822

(make_gap_smaller): Preserve BEG_UNCHANGED during gap reduction. This fixes a display problem where stray newlines were inserted in the window (corrected by C-l). Clarified code (IMHO).
author Kim F. Storm <storm@cua.dk>
date Sat, 09 Feb 2002 22:57:25 +0000
parents cafac76a491b
children 1e589b2b35e9
files src/insdel.c
diffstat 1 files changed, 11 insertions(+), 8 deletions(-) [+]
line wrap: on
line diff
--- a/src/insdel.c	Sat Feb 09 14:04:30 2002 +0000
+++ b/src/insdel.c	Sat Feb 09 22:57:25 2002 +0000
@@ -584,7 +584,8 @@
   int real_gap_loc_byte;
   int real_Z;
   int real_Z_byte;
-  int old_gap_size;
+  int real_beg_unchanged;
+  int new_gap_size;
 
   /* Make sure the gap is at least 20 bytes.  */
   if (GAP_SIZE - nbytes_removed < 20)
@@ -596,18 +597,19 @@
 
   real_gap_loc = GPT;
   real_gap_loc_byte = GPT_BYTE;
-  old_gap_size = GAP_SIZE;
+  new_gap_size = GAP_SIZE - nbytes_removed;
   real_Z = Z;
   real_Z_byte = Z_BYTE;
+  real_beg_unchanged = BEG_UNCHANGED;
 
   /* Pretend that the last unwanted part of the gap is the entire gap,
      and that the first desired part of the gap is part of the buffer
      text.  */
-  bzero (GPT_ADDR, GAP_SIZE - nbytes_removed);
-  GPT += GAP_SIZE - nbytes_removed;
-  GPT_BYTE += GAP_SIZE - nbytes_removed;
-  Z += GAP_SIZE - nbytes_removed;
-  Z_BYTE += GAP_SIZE - nbytes_removed;
+  bzero (GPT_ADDR, new_gap_size);
+  GPT += new_gap_size;
+  GPT_BYTE += new_gap_size;
+  Z += new_gap_size;
+  Z_BYTE += new_gap_size;
   GAP_SIZE = nbytes_removed;
 
   /* Move the unwanted pretend gap to the end of the buffer.  This
@@ -617,11 +619,12 @@
   enlarge_buffer_text (current_buffer, -nbytes_removed);
 
   /* Now restore the desired gap.  */
-  GAP_SIZE = old_gap_size - nbytes_removed;
+  GAP_SIZE = new_gap_size;
   GPT = real_gap_loc;
   GPT_BYTE = real_gap_loc_byte;
   Z = real_Z;
   Z_BYTE = real_Z_byte;
+  BEG_UNCHANGED = real_beg_unchanged;
 
   /* Put an anchor.  */
   *(Z_ADDR) = 0;