--- rxvt-orig/W11/w32/event.c Sun Nov 3 18:25:54 2002 +++ rxvt/W11/w32/event.c Fri Nov 15 21:36:30 2002 @@ -120,6 +120,14 @@ wineventq->handler = ev; } +static const int CtrlCode[] = { + -1, '!', '"', '#', '$', '%', '&', '\'', '(', ')', '*', '+', ',', '-', '.', 037, + '0', '1', 0, 033, 034, 035, 036, 037, 0177, '9', ':', ';', '<', '=', '>', '?', + 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 033, 034, 035, 036, 037, + 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 033, 034, 035, 036, -1, +}; static void doTranslateMessage(MSG *m) @@ -129,6 +137,23 @@ { m->message = WM_KEYDOWN; return; + } + if ( (m->message == WM_KEYDOWN) + && (GetKeyState(VK_CONTROL) & 0x8000) + && (m->wParam >= '0' && m->wParam <= '9' + || m->wParam >= 0xBA && m->wParam <= 0xF5) ) + { + char KeyStBuf[256]; + WORD AsciiCode; + int i; + GetKeyboardState(KeyStBuf); + KeyStBuf[VK_CONTROL]=KeyStBuf[VK_LCONTROL]=KeyStBuf[VK_RCONTROL]=0; + i=ToAscii(m->wParam, (m->lParam>>16)&255, KeyStBuf, &AsciiCode, 0); + if (i == 1 && AsciiCode >= 0x20 && AsciiCode <= 0x7F + && (i=CtrlCode[AsciiCode-0x20]) >= 0) { + PostMessage(m->hwnd, WM_CHAR, i, m->lParam); + return; + } } TranslateMessage(m); }