+2002-02-09 Kim F. Storm <storm@cua.dk>
+
+ * insdel.c (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).
+
2002-02-09 Eli Zaretskii <eliz@is.elta.co.il>
* dispextern.h (CURRENT_MODE_LINE_FACE_ID): Fix last change.
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)
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
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;