|
ru.unix.bsd- RU.UNIX.BSD ------------------------------------------------------------------ From : Eugene Grosbein 2:5006/1 12 Feb 2007 22:18:14 To : Valentin Nechayev Subject : Re: xkb -------------------------------------------------------------------------------- 11 фев 2007, воскресенье, в 23:15 KRAST, Valentin Nechayev написал(а): VN> А зря. Hадо было запустить xev и нажать тот же Ctrl-7: Угу, тормознул. Вроде и пробовал, но с непривычки ничего не выглядел. VN> KeyPress event, serial 27, synthetic NO, window 0x2800001, VN> root 0x3c, subw 0x0, time 2419767802, (284,541), root:(371,586), VN> state 0x14, keycode 16 (keysym 0x37, 7), same_screen YES, VN> XLookupString gives 1 bytes: (1f) "" VN> XmbLookupString gives 1 bytes: (1f) "" VN> XFilterEvent returns: False VN> А вот теперь выясним, делает это XKB или что-то ещё. Для этого VN> нажмём 7 и Shift-7: VN> KeyPress event, serial 27, synthetic NO, window 0x2800001, VN> root 0x3c, subw 0x0, time 2421577924, (110,-37), root:(285,96), VN> state 0x10, keycode 16 (keysym 0x37, 7), same_screen YES, VN> XLookupString gives 1 bytes: (37) "7" VN> XmbLookupString gives 1 bytes: (37) "7" VN> XFilterEvent returns: False VN> KeyPress event, serial 27, synthetic NO, window 0x2800001, VN> root 0x3c, subw 0x0, time 2421578590, (110,-37), root:(285,96), VN> state 0x11, keycode 16 (keysym 0x26, ampersand), same_screen YES, VN> XLookupString gives 1 bytes: (26) "&" VN> XmbLookupString gives 1 bytes: (26) "&" VN> XFilterEvent returns: False VN> Видно, что для Shift-7 был сгенерирован свой keysym. А вот для VN> Ctrl-7 - нет. Вывод - лезть надо в XLookupString() и что это не VN> основной механизм XKB, а какая-то нашлёпка сверху. Мой школьный учитель математики говаривал, что можно говорить "очевидно", это означает "легко доказать". Так вот, этот вывод мне нифига не очевиден :-) VN> И точно: VN> char VN> XkbToControl( char ch ) VN> { VN> register char c = ch; VN> if ((c >= '@' && c < '\177') || c == ' ') c &= 0x1F; VN> else if (c == '2') c = '\000'; VN> else if (c >= '3' && c <= '7') c -= ('3' - '\033'); VN> else if (c == '8') c = '\177'; VN> else if (c == '/') c = '_' & 0x1F; VN> return c; VN> } VN> в самом конце xc/lib/X11/XKBBind.c VN> Да здравствует мыло душистое и верёвка пушистая. Символ _ имеет код 0x5f. Он подпадает под первую альтернативу. 0x5f & 0x1f == 0x1f (что есть ^_). Вопрос: почему Ctrl-_ дает - вместо ^_ ? Eugene -- Choose SMTP and wondering why the fsck you are logged on on a Sunday morning --- slrn/0.9.8.0 (FreeBSD) * Origin: Svyaz Service JSC (2:5006/1@fidonet) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.unix.bsd/260936cb4835a.html, оценка из 5, голосов 10
|