]> git.eshelyaron.com Git - emacs.git/commitdiff
* keyboard.c (read_char): Don't apply previous change when current
authorYAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
Tue, 12 Jan 2010 10:10:51 +0000 (19:10 +0900)
committerYAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
Tue, 12 Jan 2010 10:10:51 +0000 (19:10 +0900)
buffer is unchanged by command execution.

src/ChangeLog
src/keyboard.c

index f52cf8fee632ac380293607db4f555265675b37a..e5bdc50f1c790f9574cfe8dcce3fdb2fa8123059 100644 (file)
@@ -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.
index 8bd8cf304681dfcbf453d0e75da2248e4be612bb..3b57c6e470f9b843efec72d78a393f05e697d097 100644 (file)
@@ -3155,6 +3155,7 @@ read_char (commandflag, nmaps, maps, prev_event, used_mouse_menu, end_time)
 
   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 @@ read_char (commandflag, nmaps, maps, prev_event, used_mouse_menu, end_time)
       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.  */