changeset 106806:311d96e388e8

* keyboard.c (read_char): Don't apply previous change when current buffer is unchanged by command execution.
author YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
date Tue, 12 Jan 2010 19:10:51 +0900
parents 0ff664c52820
children 8f9c3a09d55a
files src/ChangeLog src/keyboard.c
diffstat 2 files changed, 16 insertions(+), 4 deletions(-) [+]
line wrap: on
line diff
--- a/src/ChangeLog	Tue Jan 12 09:14:45 2010 +0100
+++ b/src/ChangeLog	Tue Jan 12 19:10:51 2010 +0900
@@ -1,3 +1,8 @@
+2010-01-12  YAMAMOTO Mitsuharu  <mituharu@math.s.chiba-u.ac.jp>
+
+	* keyboard.c (read_char): Don't apply previous change when current
+	buffer is unchanged by command execution.
+
 2010-01-12  Jan Djärv  <jan.h.d@swipnet.se>
 
 	* keyboard.c (read_char): Return after executing from special map.
--- a/src/keyboard.c	Tue Jan 12 09:14:45 2010 +0100
+++ b/src/keyboard.c	Tue Jan 12 19:10:51 2010 +0900
@@ -3155,6 +3155,7 @@
 
   if (!NILP (tem))
     {
+      struct buffer *prev_buffer = current_buffer;
 #if 0 /* This shouldn't be necessary anymore. --lorentey  */
       int was_locked = single_kboard;
       int count = SPECPDL_INDEX ();
@@ -3178,10 +3179,16 @@
       unbind_to (count, Qnil);
 #endif
 
-      /* The command may have changed the keymaps.  Pretend there is input
-         in another keyboard and return.  This will recalculate keymaps.  */
-      c = make_number (-2);
-      goto exit;
+      if (current_buffer != prev_buffer)
+	{
+	  /* The command may have changed the keymaps.  Pretend there
+	     is input in another keyboard and return.  This will
+	     recalculate keymaps.  */
+	  c = make_number (-2);
+	  goto exit;
+	}
+      else
+	goto retry;
     }
 
   /* Handle things that only apply to characters.  */