# HG changeset patch # User Richard M. Stallman # Date 794226709 0 # Node ID 413d44c0bd41e4e7a69865602cbdd9dfa9767a82 # Parent 880d7c28921ced4b9e0903b18511cfd0613bcf80 (exec_sentinel, read_process_output): If running filter or sentinel changes the local map, call record_asynch_buffer_change. diff -r 880d7c28921c -r 413d44c0bd41 src/process.c --- 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)