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


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)
 
 

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

 Тема:    Автор:    Дата:  
 Re: xkb   Eugene Grosbein   12 Feb 2007 22:18:14 
 Re: xkb   Eugene Grosbein   12 Feb 2007 22:54:00 
 xkb   Slawa Olhovchenkov   12 Feb 2007 18:46:30 
 Re: xkb   Eugene Grosbein   12 Feb 2007 23:53:36 
Архивное /ru.unix.bsd/260936cb4835a.html, оценка 1 из 5, голосов 10
Яндекс.Метрика
Valid HTML 4.01 Transitional