summaryrefslogtreecommitdiff
path: root/src/buffer.c
diff options
context:
space:
mode:
authorRichard M. Stallman <rms@gnu.org>1994-06-25 22:34:52 +0000
committerRichard M. Stallman <rms@gnu.org>1994-06-25 22:34:52 +0000
commitf6569ed381c9e91721efe5d5b35d55d2ddf8202d (patch)
treeddc1a645261f2161de741fadeaec0a22e6afd55e /src/buffer.c
parentdcf623e6bb049e5b06fb9093295836dd16ea0912 (diff)
downloademacs-f6569ed381c9e91721efe5d5b35d55d2ddf8202d.tar.gz
(send_process): Major rewrite.
Don't put in a C-d unless a single line is too long. Read process input whenever output gets stuck. Relocate BUF if we read input. New arg OBJECT. (Fprocess_send_region, Fprocess_send_string, process_send_signal) (Fprocess_send_eof): Pass new arg OBJECT.
Diffstat (limited to 'src/buffer.c')
-rw-r--r--src/buffer.c28
1 files changed, 18 insertions, 10 deletions
diff --git a/src/buffer.c b/src/buffer.c
index 3eb61de0c82..9561035e334 100644
--- a/src/buffer.c
+++ b/src/buffer.c
@@ -2115,25 +2115,33 @@ DEFUN ("overlay-put", Foverlay_put, Soverlay_put, 3, 3, 0,
(overlay, prop, value)
Lisp_Object overlay, prop, value;
{
- Lisp_Object plist, tail;
+ Lisp_Object plist, tail, buffer;
CHECK_OVERLAY (overlay, 0);
- tail = Fmarker_buffer (OVERLAY_START (overlay));
- if (! NILP (tail))
- redisplay_region (XMARKER (OVERLAY_START (overlay))->buffer,
- marker_position (OVERLAY_START (overlay)),
- marker_position (OVERLAY_END (overlay)));
-
+ buffer = Fmarker_buffer (OVERLAY_START (overlay));
+
plist = Fcdr_safe (XCONS (overlay)->cdr);
for (tail = plist;
CONSP (tail) && CONSP (XCONS (tail)->cdr);
tail = XCONS (XCONS (tail)->cdr)->cdr)
- {
- if (EQ (XCONS (tail)->car, prop))
+ if (EQ (XCONS (tail)->car, prop))
+ {
+ /* If actually changing the property, mark redisplay needed. */
+ if (! NILP (buffer) && !EQ (XCONS (XCONS (tail)->cdr)->car, value))
+ redisplay_region (buffer,
+ marker_position (OVERLAY_START (overlay)),
+ marker_position (OVERLAY_END (overlay)));
+
return XCONS (XCONS (tail)->cdr)->car = value;
- }
+ }
+
+ /* Actually changing the property; mark redisplay needed. */
+ if (! NILP (buffer))
+ redisplay_region (buffer,
+ marker_position (OVERLAY_START (overlay)),
+ marker_position (OVERLAY_END (overlay)));
if (! CONSP (XCONS (overlay)->cdr))
XCONS (overlay)->cdr = Fcons (Qnil, Qnil);