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


ru.unix.bsd

 
 - RU.UNIX.BSD ------------------------------------------------------------------
 From : Valeriy E. Ushakov                   2:5020/400     12 Feb 2007  15:43:36
 To : Eugene Grosbein
 Subject : Re: xkb
 -------------------------------------------------------------------------------- 
 
 Eugene Grosbein <Eugene.Grosbein@f1.n5006.z2.fidonet.org> wrote:
 
 EG> 12 фев 2007, понедельник, в 03:13 KRAST, Valeriy E. Ushakov написал(а):
 EG> 
  EG>>>> Где в /usr/X11R6/lib/X11/xkb сказано, какие именно символы
  EG>>>> должны вводиться при нажатии Ctrl плюс клавиши верхнего ряда основного
  EG>>>> наборного поля? Hапример, где сказано, что Ctrl-7 вводит ^_
  EG>>>> а Ctrl-_ вводит -
 
 xkb тут впрямую не участвует, т.к. ему не сказали, что Ctrl+7 надо
 как-то дальше транслировать, xkb отрапортовало, что нажали Ctrl и 7,
 а на этом его деятельность кончилась.
 
 Я так понимаю, что можно задать в xkb'шном описании Control как
 модификатор со своей отдельной мапой и расписать там все самому, как
 хочется.  Пример можно увидеть поискав map[Control] в xkb'шом
 каталоге, его используют для типа "PC_BREAK", клавиш "сдвигаемых"
 control'ом.
 
 Для букв control не делают как отдельный уровень, т.к. нет его
 осмысленного описания.  xkb должно на выходе породить keysym'ы, а их
 для Ctrl-A и т.д. не определено.
  EG>>> Я вот тут подумал, а может это xterm должен делать?
  EG>>> Попробовал так в ~/.Xresources:
  EG>>> 
  EG>>> *VT100*translations:    #override <Key>^-: string(0x1F)
  EG>>> 
  EG>>> Hикаких изменений. Что я делаю не так?
 
 xev показывает, что трансляция происходит на этапе XLookupString,
 т.е. при переводе набора keysyms+mods в текст (i->"i",
 Cyrillic_i->"и", и т.д.).  В частности именно тут происходит перевод
 Ctrl+7->0x1f (кодом, приведенным мною ниже).
 
 [Hе знаю, откуда исторически проиходит именно такое отображение для
 control+цифры, но хардварный vt220 ведет себя именно так.  Hа нем,
 кстати, нет кнопки Esc, и набрать его можно только как Ctrl+3.]
 
 В xterm'е XLookupString случается, если в *translations ему ничего не
 сказано, поэтому писать в translations в качестве ключа результат
 XLookupString очевидным образом бесполезно.  Чтобы добится трансляции
 на уровне xterm надо писать что-нибудь типа:
 
   Ctrl<Key>7:     string("hi there")
  VEU>> Скорее всего здесь: lib/X11/KeyBind.c:_XTranslateKeySym()
 
 Тут я обсдался, это pre-XKB версия.
  VEU>>     /* only apply Control key if it makes sense, else ignore it */
  VEU>>     if (modifiers & ControlMask) {
  VEU>>         if ((c >= '@' && c < '\177') || c == ' ') c &= 0x1F;
  VEU>>         else if (c == '2') c = '\000';
  VEU>>         else if (c >= '3' && c <= '7') c -= ('3' - '\033');
  VEU>>         else if (c == '8') c = '\177';
  VEU>>         else if (c == '/') c = '_' & 0x1F;
  VEU>>     }
 Такой же код в XkbToControl(), в самом конце XKBBind.c, занимается
 конвертацией Ctrl+... при XLookupString() в xkb'шном случае.
 EG> А теперь можно по-русски? Спасибо.
 
 Собственно, почти все уже рассказал выше.
 SY, Uwe
 -- 
 uwe@ptc.spbu.ru                         |       Zu Grunde kommen
 http://snark.ptc.spbu.ru/~uwe/          |       Ist zu Grunde gehen
 --- ifmail v.2.15dev5.3
  * Origin: St.Petersburg University (2:5020/400)
 
 

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

 Тема:    Автор:    Дата:  
 Re: xkb   Valeriy E. Ushakov   12 Feb 2007 15:43:36 
Архивное /ru.unix.bsd/65780632c866.html, оценка 2 из 5, голосов 10
Яндекс.Метрика
Valid HTML 4.01 Transitional