Если вы пытаетесь перенастроить Numpad – в xterm так, чтобы он эмулировал F4, но вместо этого получаете упрямый символ «-» – это не ваша ошибка. Протоколы обработки клавиш в X11 иногда капризничают: даже правильные, на первый взгляд, команды могут не сработать из-за тонкостей в синтаксисе или кодировках. Давайте разбираться, как обойти эти грабли.
Почему xterm «не видит» ваши настройки
Первое, что стоит понять: xterm обрабатывает события клавиатуры через ресурс XTerm.VT100.translations, но здесь есть нюансы. Например, просто указать KP_Subtract
недостаточно – нужно явно указать тип события. В некоторых окружениях (особенно современных DE вроде XFCE или KDE) требуется явное упоминание перед именем клавиши. Без этого xterm может проигнорировать правило, особенно если другие программы перехватывают события.
Пример неправильного подхода:
-xrm 'XTerm.VT100.translations: #override NumpadSubtract: действие'
Здесь не хватает указания на момент нажатия клавиши. Правильнее:
KP_Subtract
(Кстати, KP_Subtract
и NumpadSubtract
– это разные идентификаторы в зависимости от версии X11. Лучше проверить через xev
.)
Как определить правильный код для F4
Ошибка многих руководств – использование неверных escape-последовательностей. Например, string(0x1b) string(0x5b) string(0x41)
отправляет сигнал стрелки вверх, а не F4. Чтобы получить точные коды:
1. Запустите в терминале:
xxd -ps
2. Нажмите F4, затем дважды Ctrl+D (чтобы завершить ввод).
3. Вы увидите вывод вроде 1b4f53
– это и есть шестнадцатеричное представление F4.
Разбиваем его на части:
string(0x1b) string(0x4f) string(0x53)
Важно сохранить порядок байтов и не добавлять лишние пробелы – иначе xterm интерпретирует это как раздельные символы.
Рабочий пример и частые ошибки
Собрав всё вместе, команда для запуска xterm будет такой:
xterm -xrm 'XTerm.VT100.translations: #override KP_Subtract: string(0x1b) string(0x4f) string(0x53)'
Что может пойти не так:
- Лишние пробелы внутри строки с ресурсами – X11 строго соблюдает синтаксис.
- Конфликт с другими привязками – даже если F4 не используется в DE, проверьте
~/.Xresources
и системные настройки. - Неправильная кодировка – например, использование
0x5b
([) вместо0x4f
(O).
Совет: Если после настройки numpad – перестал работать в других программах, добавьте условие
! Ctrl
перед действием – это ограничит переназначение только xterm.
И напоследок: если xterm всё равно печатает «-», проверьте, не используется ли модификатор (например, Num Lock). Иногда проблема решается заменой на
(но это уже тема для другого эксперимента).
P.S. Не забудьте, что в некоторых сборках xterm (особенно в Opensuse) могут быть пропатчены для совместимости – тогда придётся ковыряться в исходниках или искать альтернативы вроде uxterm
. Удачи в танцах с клавиатурой!