--- emacs-21.2.92/src/xterm.c.ctrl 2002-11-08 22:05:22 +0300 +++ emacs-21.2.92/src/xterm.c 2002-11-08 23:09:30 +0300 @@ -10406,13 +10406,22 @@ /* make_lispy_event turns chars into control chars. Don't do it here because XLookupString is too eager. */ - event.xkey.state &= ~ControlMask; - event.xkey.state &= ~(dpyinfo->meta_mod_mask - | dpyinfo->super_mod_mask - | dpyinfo->hyper_mod_mask - | dpyinfo->alt_mod_mask); + /* make CMsHA behave the same no matter what the rest of the + state is (particularly important for multilingual XKBmaps + when we still want the latin letters appear in the "control" + sequences; would be nice if we also could choose an independent + map for each buffer like xxkb does for windows: the the problem with + smth like C-h f in Russian mode would be solved); discard + all mods save shift. (imz@altlinux.ru, 2002 Nov 8, + fixing #852 at bugs.altlinux.ru) */ + if (event.xkey.state & ( ControlMask + | dpyinfo->meta_mod_mask + | dpyinfo->super_mod_mask + | dpyinfo->hyper_mod_mask + | dpyinfo->alt_mod_mask)) + event.xkey.state &= (ShiftMask | dpyinfo->shift_lock_mask); /* In case Meta is ComposeCharacter, clear its status. According to Markus Ehrnsperger