changeset 106738:04c6036b9437

* keyboard.c (read_key_sequence): Catch keyboard switch after making a new tty frame (Bug#5095).
author Chong Yidong <cyd@stupidchicken.com>
date Tue, 05 Jan 2010 07:04:04 -0700
parents 6efbdb23aea3
children 861edc07f3ea 4d2fbb46854b
files src/ChangeLog src/keyboard.c
diffstat 2 files changed, 12 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/src/ChangeLog	Tue Jan 05 21:03:13 2010 +0900
+++ b/src/ChangeLog	Tue Jan 05 07:04:04 2010 -0700
@@ -1,3 +1,8 @@
+2010-01-05  Chong Yidong  <cyd@stupidchicken.com>
+
+	* keyboard.c (read_key_sequence): Catch keyboard switch after
+	making a new tty frame (Bug#5095).
+
 2010-01-05  Kenichi Handa  <handa@m17n.org>
 
 	* fontset.c (fontset_find_font): Fix getting the frame pointer.
--- a/src/keyboard.c	Tue Jan 05 21:03:13 2010 +0900
+++ b/src/keyboard.c	Tue Jan 05 07:04:04 2010 -0700
@@ -9502,7 +9502,13 @@
 	    key = read_char (NILP (prompt), nmaps,
 			     (Lisp_Object *) submaps, last_nonmenu_event,
 			     &used_mouse_menu, NULL);
-	    if (INTEGERP (key) && XINT (key) == -2) /* wrong_kboard_jmpbuf */
+	    if ((INTEGERP (key) && XINT (key) == -2) /* wrong_kboard_jmpbuf */
+		/* When switching to a new tty (with a new keyboard),
+		   read_char returns the new buffer, rather than -2
+		   (Bug#5095).  This is because `terminal-init-xterm'
+		   calls read-char, which eats the wrong_kboard_jmpbuf
+		   return.  Any better way to fix this? -- cyd  */
+		|| (interrupted_kboard != current_kboard))
 	      {
 		int found = 0;
 		struct kboard *k;