|
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) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.unix.bsd/65780632c866.html, оценка из 5, голосов 10
|