Главная страница


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)
 
 

Вернуться к списку тем, сортированных по: возрастание даты  уменьшение даты  тема  автор 

 Тема:    Автор:    Дата:  
 Re: xkb   Valentin Nechayev   12 Feb 2007 00:15:14 
Архивное /ru.unix.bsd/223837048a242.html, оценка 2 из 5, голосов 10
Яндекс.Метрика
Valid HTML 4.01 Transitional