|
ru.unix.bsd- RU.UNIX.BSD ------------------------------------------------------------------ From : Valentin Nechayev 2:5020/400 12 Feb 2007 00:15:14 To : eugen@grosbein.pp.ru Subject : Re: xkb -------------------------------------------------------------------------------- >>> Eugene Grosbein wrote: EG>>> Где в /usr/X11R6/lib/X11/xkb сказано, какие именно символы EG>>> должны вводиться при нажатии Ctrl плюс клавиши верхнего ряда основного EG>>> наборного поля? Hапример, где сказано, что Ctrl-7 вводит ^_ EG>>> а Ctrl-_ вводит - AO>> А ты уверен, что xkb обрабатывает не коды нажатия клавиши, а именно AO>> символы? EG> Уже нет. А зря. Hадо было запустить xev и нажать тот же Ctrl-7: KeyPress event, serial 27, synthetic NO, window 0x2800001, root 0x3c, subw 0x0, time 2419767802, (284,541), root:(371,586), state 0x14, keycode 16 (keysym 0x37, 7), same_screen YES, XLookupString gives 1 bytes: (1f) "" XmbLookupString gives 1 bytes: (1f) "" XFilterEvent returns: False А вот теперь выясним, делает это XKB или что-то ещё. Для этого нажмём 7 и Shift-7: KeyPress event, serial 27, synthetic NO, window 0x2800001, root 0x3c, subw 0x0, time 2421577924, (110,-37), root:(285,96), state 0x10, keycode 16 (keysym 0x37, 7), same_screen YES, XLookupString gives 1 bytes: (37) "7" XmbLookupString gives 1 bytes: (37) "7" XFilterEvent returns: False KeyPress event, serial 27, synthetic NO, window 0x2800001, root 0x3c, subw 0x0, time 2421578590, (110,-37), root:(285,96), state 0x11, keycode 16 (keysym 0x26, ampersand), same_screen YES, XLookupString gives 1 bytes: (26) "&" XmbLookupString gives 1 bytes: (26) "&" XFilterEvent returns: False Видно, что для Shift-7 был сгенерирован свой keysym. А вот для Ctrl-7 - нет. Вывод - лезть надо в XLookupString() и что это не основной механизм XKB, а какая-то нашлёпка сверху. И точно: char XkbToControl( char ch ) { register char c = ch; if ((c >= '@' && c < '\177') || c == ' ') c &= 0x1F; else if (c == '2') c = '\000'; else if (c >= '3' && c <= '7') c -= ('3' - '\033'); else if (c == '8') c = '\177'; else if (c == '/') c = '_' & 0x1F; return c; } в самом конце xc/lib/X11/XKBBind.c Да здравствует мыло душистое и верёвка пушистая. -netch- --- ifmail v.2.15dev5.3 * Origin: Dark side of coredump (2:5020/400) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.unix.bsd/223837048a242.html, оценка из 5, голосов 10
|