Mercurial > emacs
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;