diff options
author | Richard M. Stallman <rms@gnu.org> | 1993-03-08 05:38:53 +0000 |
---|---|---|
committer | Richard M. Stallman <rms@gnu.org> | 1993-03-08 05:38:53 +0000 |
commit | 10e6549c5f805d026a44988da71d3cc88226bee1 (patch) | |
tree | 29f37f5660d43c1c9bc54dd4f01006c3a0b80a04 /src/xterm.c | |
parent | d63de416be4b4732ff5307ac62c3ff3d057df4d9 (diff) | |
download | emacs-10e6549c5f805d026a44988da71d3cc88226bee1.tar.gz |
(XTread_socket):
Don't reverse the chars that XLookupString returns. Use all of them.
Save last 100 chars and keysyms in temp_buffer.
Diffstat (limited to 'src/xterm.c')
-rw-r--r-- | src/xterm.c | 29 |
1 files changed, 17 insertions, 12 deletions
diff --git a/src/xterm.c b/src/xterm.c index 5ccb3c49525..57028257e0e 100644 --- a/src/xterm.c +++ b/src/xterm.c @@ -2435,6 +2435,11 @@ Atom Xatom_wm_delete_window; Atom Xatom_wm_configure_denied; /* When our config request is denied */ Atom Xatom_wm_window_moved; /* When the WM moves us. */ +/* Record the last 100 characters stored + to help debug the loss-of-chars-during-GC problem. */ +int temp_index; +short temp_buffer[100]; + /* Read events coming from the X server. This routine is called by the SIGIO handler. We return as soon as there are no more events to be read. @@ -2749,6 +2754,9 @@ XTread_socket (sd, bufp, numchars, waitp, expected) || IsKeypadKey (keysym) /* 0xff80 <= x < 0xffbe */ || IsFunctionKey (keysym)) /* 0xffbe <= x < 0xffe1 */ { + if (temp_index == sizeof temp_buffer / sizeof (short)) + temp_index = 0; + temp_buffer[temp_index++] = keysym; bufp->kind = non_ascii_keystroke; XSET (bufp->code, Lisp_Int, (unsigned) keysym - 0xff00); XSET (bufp->frame_or_window, Lisp_Frame, f); @@ -2762,30 +2770,27 @@ XTread_socket (sd, bufp, numchars, waitp, expected) { register int i; - if (nbytes == 1) + for (i = 0; i < nbytes; i++) { + if (temp_index == sizeof temp_buffer / sizeof (short)) + temp_index = 0; + temp_buffer[temp_index++] = copy_buffer[i]; bufp->kind = ascii_keystroke; - XSET (bufp->code, Lisp_Int, *copy_buffer); + XSET (bufp->code, Lisp_Int, copy_buffer[i]); XSET (bufp->frame_or_window, Lisp_Frame, f); bufp->modifiers = x_convert_modifiers (modifiers); bufp->timestamp = event.xkey.time; bufp++; } - else - for (i = nbytes - 1; i > 1; i--) - { - bufp->kind = ascii_keystroke; - XSET (bufp->code, Lisp_Int, copy_buffer[i]); - XSET (bufp->frame_or_window, Lisp_Frame, f); - bufp->modifiers = x_convert_modifiers (modifiers); - bufp->timestamp = event.xkey.time; - bufp++; - } count += nbytes; numchars -= nbytes; } + else + abort (); } + else + abort (); } break; #else /* ! defined (HAVE_X11) */ |