From dfc21838c09a887ffa729c74831b968f20b71fc5 Mon Sep 17 00:00:00 2001 From: "Richard M. Stallman" Date: Fri, 3 Mar 1995 10:31:49 +0000 Subject: [PATCH] (exec_sentinel, read_process_output): If running filter or sentinel changes the local map, call record_asynch_buffer_change. --- src/process.c | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/src/process.c b/src/process.c index 67d1609ad9d..1230887888f 100644 --- a/src/process.c +++ b/src/process.c @@ -2329,10 +2329,13 @@ read_process_output (proc, channel) 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 @@ read_process_output (proc, channel) /* 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 @@ static void 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 @@ exec_sentinel (proc, reason) 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) -- 2.39.5