(read_process_output): Make sure the process marker's
authorGerd Moellmann <gerd@gnu.org>
Thu, 7 Dec 2000 15:53:18 +0000 (15:53 +0000)
committerGerd Moellmann <gerd@gnu.org>
Thu, 7 Dec 2000 15:53:18 +0000 (15:53 +0000)
position is valid when the process buffer is changed in
after-change functions.  W3 does that.

src/ChangeLog
src/process.c

index 4f0d0d6..ca92994 100644 (file)
@@ -9,6 +9,10 @@
 
 2000-12-07  Gerd Moellmann  <gerd@gnu.org>
 
+       * process.c (read_process_output): Make sure the process marker's
+       position is valid when the process buffer is changed in
+       after-change functions.  W3 does that.
+       
        * xfns.c (x_free_gcs): New function.
 
        * xterm.h (x_free_gcs): Add prototype.
index cb51af9..c91ab2c 100644 (file)
@@ -3055,6 +3055,7 @@ read_process_output (proc, channel)
       int before, before_byte;
       int opoint_byte;
       Lisp_Object text;
+      struct buffer *b;
 
       odeactivate = Vdeactivate_mark;
 
@@ -3120,7 +3121,14 @@ read_process_output (proc, channel)
       signal_after_change (before, 0, PT - before);
       update_compositions (before, PT, CHECK_BORDER);
 
-      set_marker_both (p->mark, p->buffer, PT, PT_BYTE);
+      /* Make sure the process marker's position is valid when the
+        process buffer is changed in the signal_after_change above.
+        W3 is known to do that.  */
+      if (BUFFERP (p->buffer)
+         && (b = XBUFFER (p->buffer), b != current_buffer))
+       set_marker_both (p->mark, p->buffer, BUF_PT (b), BUF_PT_BYTE (b));
+      else
+       set_marker_both (p->mark, p->buffer, PT, PT_BYTE);
 
       update_mode_lines++;