mirror of
git://git.sv.gnu.org/emacs.git
synced 2026-01-07 20:30:32 -08:00
(modify_overlay): Don't do nothing if START == END;
This can still be a modification, for example when an overlay has a before-string or after-string. (Fdelete_overlay): Prevent redisplay optimizations when deleting an overlay with before-string or after-string.
This commit is contained in:
parent
1270031d86
commit
26f545d7f8
1 changed files with 16 additions and 11 deletions
27
src/buffer.c
27
src/buffer.c
|
|
@ -180,6 +180,7 @@ Lisp_Object Qinsert_behind_hooks;
|
|||
static void alloc_buffer_text P_ ((struct buffer *, size_t));
|
||||
static void free_buffer_text P_ ((struct buffer *b));
|
||||
static Lisp_Object copy_overlays P_ ((struct buffer *, Lisp_Object));
|
||||
static void modify_overlay P_ ((struct buffer *, int, int));
|
||||
|
||||
|
||||
/* For debugging; temporary. See set_buffer_internal. */
|
||||
|
|
@ -3402,13 +3403,11 @@ modify_overlay (buf, start, end)
|
|||
struct buffer *buf;
|
||||
int start, end;
|
||||
{
|
||||
if (start == end)
|
||||
return;
|
||||
|
||||
if (start > end)
|
||||
{
|
||||
int temp = start;
|
||||
start = end; end = temp;
|
||||
start = end;
|
||||
end = temp;
|
||||
}
|
||||
|
||||
BUF_COMPUTE_UNCHANGED (buf, start, end);
|
||||
|
|
@ -3547,19 +3546,25 @@ DEFUN ("delete-overlay", Fdelete_overlay, Sdelete_overlay, 1, 1, 0,
|
|||
return Qnil;
|
||||
|
||||
b = XBUFFER (buffer);
|
||||
|
||||
specbind (Qinhibit_quit, Qt);
|
||||
|
||||
|
||||
b->overlays_before = Fdelq (overlay, b->overlays_before);
|
||||
b->overlays_after = Fdelq (overlay, b->overlays_after);
|
||||
|
||||
b->overlays_after = Fdelq (overlay, b->overlays_after);
|
||||
modify_overlay (b,
|
||||
marker_position (OVERLAY_START (overlay)),
|
||||
marker_position (OVERLAY_END (overlay)));
|
||||
|
||||
Fset_marker (OVERLAY_START (overlay), Qnil, Qnil);
|
||||
Fset_marker (OVERLAY_END (overlay), Qnil, Qnil);
|
||||
|
||||
/* WHen deleting on overlay with before or after strings, turn off
|
||||
display optimizations for the affected buffer, on the basis that
|
||||
these strings may contain newlines. This is easier to do than to
|
||||
check for that situation during redisplay. */
|
||||
if (!windows_or_buffers_changed
|
||||
&& (!NILP (Foverlay_get (overlay, Qbefore_string))
|
||||
|| !NILP (Foverlay_get (overlay, Qafter_string))))
|
||||
b->prevent_redisplay_optimizations_p = 1;
|
||||
|
||||
return unbind_to (count, Qnil);
|
||||
}
|
||||
|
||||
|
|
@ -3833,8 +3838,8 @@ DEFUN ("overlay-put", Foverlay_put, Soverlay_put, 3, 3, 0,
|
|||
{
|
||||
if (changed)
|
||||
modify_overlay (XBUFFER (buffer),
|
||||
marker_position (OVERLAY_START (overlay)),
|
||||
marker_position (OVERLAY_END (overlay)));
|
||||
marker_position (OVERLAY_START (overlay)),
|
||||
marker_position (OVERLAY_END (overlay)));
|
||||
if (EQ (prop, Qevaporate) && ! NILP (value)
|
||||
&& (OVERLAY_POSITION (OVERLAY_START (overlay))
|
||||
== OVERLAY_POSITION (OVERLAY_END (overlay))))
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue