changeset 10914:413d44c0bd41

(exec_sentinel, read_process_output): If running filter or sentinel changes the local map, call record_asynch_buffer_change.
author Richard M. Stallman <rms@gnu.org>
date Fri, 03 Mar 1995 10:31:49 +0000
parents 880d7c28921c
children 4d587fff2aa0
files src/process.c
diffstat 1 files changed, 16 insertions(+), 7 deletions(-) [+]
line wrap: on
line diff
--- a/src/process.c	Fri Mar 03 06:49:59 1995 +0000
+++ b/src/process.c	Fri Mar 03 10:31:49 1995 +0000
@@ -2329,10 +2329,13 @@
 	 it up.  */
       int count = specpdl_ptr - specpdl;
       Lisp_Object odeactivate;
-      Lisp_Object obuffer;
-
+      Lisp_Object obuffer, okeymap;
+
+      /* No need to gcpro these, because all we do with them later
+	 is test them for EQness, and none of them should be a string.  */
       odeactivate = Vdeactivate_mark;
-      obuffer = Fcurrent_buffer ();
+      XSETBUFFER (obuffer, current_buffer);
+      okeymap = current_buffer->keymap;
 
       specbind (Qinhibit_quit, Qt);
       specbind (Qlast_nonmenu_event, Qt);
@@ -2352,7 +2355,8 @@
       /* Handling the process output should not deactivate the mark.  */
       Vdeactivate_mark = odeactivate;
 
-      if (! EQ (Fcurrent_buffer (), obuffer))
+      if (! EQ (Fcurrent_buffer (), obuffer)
+	  || ! EQ (current_buffer->keymap, okeymap))
 	record_asynch_buffer_change ();
 
       if (waiting_for_user_input_p)
@@ -3206,12 +3210,16 @@
 exec_sentinel (proc, reason)
      Lisp_Object proc, reason;
 {
-  Lisp_Object sentinel, obuffer, odeactivate;
+  Lisp_Object sentinel, obuffer, odeactivate, okeymap;
   register struct Lisp_Process *p = XPROCESS (proc);
   int count = specpdl_ptr - specpdl;
 
+  /* No need to gcpro these, because all we do with them later
+     is test them for EQness, and none of them should be a string.  */
   odeactivate = Vdeactivate_mark;
-  obuffer = Fcurrent_buffer ();
+  XSETBUFFER (obuffer, current_buffer);
+  okeymap = current_buffer->keymap;
+
   sentinel = p->sentinel;
   if (NILP (sentinel))
     return;
@@ -3234,7 +3242,8 @@
   restore_match_data ();
 
   Vdeactivate_mark = odeactivate;
-  if (! EQ (Fcurrent_buffer (), obuffer))
+  if (! EQ (Fcurrent_buffer (), obuffer)
+      || ! EQ (current_buffer->keymap, okeymap))
     record_asynch_buffer_change ();
 
   if (waiting_for_user_input_p)