From: Kenichi Handa Date: Thu, 19 Jan 2006 02:12:45 +0000 (+0000) Subject: (handle_one_xevent): Handle keysyms 0x1000000..0x10000FF. X-Git-Tag: emacs-pretest-22.0.90~4699 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=71578d4f96dda81d3802731806003402b6d18c4b;p=emacs.git (handle_one_xevent): Handle keysyms 0x1000000..0x10000FF. --- diff --git a/src/ChangeLog b/src/ChangeLog index 848af025861..b92b30b4607 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,7 @@ +2006-01-19 Kenichi Handa + + * xterm.c (handle_one_xevent): Handle keysyms 0x1000000..0x10000FF. + 2006-01-17 Richard M. Stallman * frame.c (x_frame_get_and_record_arg): Don't record Qunbound diff --git a/src/xterm.c b/src/xterm.c index 113a942de5f..ebcf2cb4def 100644 --- a/src/xterm.c +++ b/src/xterm.c @@ -6242,23 +6242,40 @@ handle_one_xevent (dpyinfo, eventp, finish, hold_quit) } /* Keysyms directly mapped to supported Unicode characters. */ - if ((keysym >= 0x01000100 && keysym <= 0x010033ff) + if ((keysym >= 0x01000000 && keysym <= 0x010033ff) || (keysym >= 0x0100e000 && keysym <= 0x0100ffff)) { - int code, charset_id, c1, c2; - - if (keysym < 0x01002500) - charset_id = charset_mule_unicode_0100_24ff, - code = (keysym & 0xFFFF) - 0x100; - else if (keysym < 0x0100e000) - charset_id = charset_mule_unicode_2500_33ff, - code = (keysym & 0xFFFF) - 0x2500; + int code = keysym & 0xFFFF, charset_id, c1, c2; + + if (code < 0x80) + { + inev.ie.kind = ASCII_KEYSTROKE_EVENT; + inev.ie.code = code; + } + else if (code < 0x100) + { + if (code < 0xA0) + charset_id = CHARSET_8_BIT_CONTROL; + else + charset_id = charset_latin_iso8859_1; + inev.ie.kind = MULTIBYTE_CHAR_KEYSTROKE_EVENT; + inev.ie.code = MAKE_CHAR (charset_id, code, 0); + } else - charset_id = charset_mule_unicode_e000_ffff, - code = (keysym & 0xFFFF) - 0xe000; - c1 = (code / 96) + 32, c2 = (code % 96) + 32; - inev.ie.kind = MULTIBYTE_CHAR_KEYSTROKE_EVENT; - inev.ie.code = MAKE_CHAR (charset_id, c1, c2); + { + if (code < 0x2500) + charset_id = charset_mule_unicode_0100_24ff, + code -= 0x100; + else if (code < 0xE000) + charset_id = charset_mule_unicode_2500_33ff, + code -= 0x2500; + else + charset_id = charset_mule_unicode_e000_ffff, + code -= 0xE000; + c1 = (code / 96) + 32, c2 = (code % 96) + 32; + inev.ie.kind = MULTIBYTE_CHAR_KEYSTROKE_EVENT; + inev.ie.code = MAKE_CHAR (charset_id, c1, c2); + } goto done_keysym; }