Изменить escape-последовательность, сгенерированную xterm для комбинаций клавиш
Моя цель - настроить терминал, в котором программа интерфейса командной строки будет вести себя так, как ожидается для ввода с клавиатуры (программа написана на xharbour изначально для Windows, но теперь я бы хотела перенести ее на linux). Для начала я выбрал xterm, так как он проще, нет необходимости отключать комбинации клавиш терминала по умолчанию.
С замазкой большинство персонажей работают хорошо, а для тех, кто этого не делает, я использую autohotkey, скрипт ahk, и это делает свою работу. Например, для Ctrl+F1:^F1::SendInput ^[O5P
Я попытался и изменил, перекомпилировал terminfo, изменил его и изменил типы клавиатуры, но не смог получить ответ ^[O5P для нажатия Ctrl + F1 в терминале. Если вы знаете какой-либо способ сделать это изменение, пожалуйста, скажите мне... Я прочитал сотни страниц, которые якобы делают это, но все эти изменения не оказали никакого эффекта или ожидаемого эффекта.
Поэтому я оставил попытки изменить настройки терминала, чтобы достичь цели Ctrl + F1 до ^[O5P, и попробовал некоторые команды и программы, которые бы выполняли что-то похожее на autohotkey:
xmodmap
, но для сочетаний клавиш это не работаетxdotool
windowactivate XYZ типа ^[O5P, это возвращает коды символов отдельных символовxmacro
, он не отправляет нажатия клавиш в другое окноironahk
Я получаю сообщение об ошибке в самом начале, пытаясь запустить example.ahk, и не могу найти команды, которые мне нужны, в его легком руководстве.bind '\e[1;5P":"\e[O5P"'
здесь первый код ключа - это то, что я сейчас получаю при наборе ctrl + f1 и после того, который я хочу получить с помощью этой комбинации. Нет эффекта.xbindkeys
+xvkbd
тоже не помогло.
Пожалуйста, помогите мне, если вы уже знаете, удалось как-то добиться этого (измените код клавиши, возвращаемый для комбинации клавиш).
Я использую последние CentOS и Ubuntu для тестирования.
2 ответа
xterm может быть настроен на отправку пользовательских строк при нажатии определенных клавиш путем изменения таблицы перевода. Таблица перевода является частью базы данных ресурсов X, управляемой xrdb
команда.
Здесь есть хороший пример настраиваемой таблицы перевода для xterm. Это может быть скопировано в ваш $HOME/.Xdefaults
или же $HOME/.Xresources
и он будет загружен при следующем входе в систему. Чтобы загрузить его в текущую сессию немедленно, xrdb -merge $HOME/.Xresources
, Это не повлияет на уже запущенные xterms. (Вы можете изменить таблицу перевода работающего xterm с помощью editres
, но это больше проблем, чем оно того стоит.)
Чтобы предоставить пользовательскую таблицу перевода для одного экземпляра xterm, используйте -xrm
вариант, как в
xterm -xrm 'XTerm.VT100.translations: #override Ctrl<Key>Left: string(0x1b) string("b") \n Ctrl<Key>Right: string(0x1b) string("f")'
Непосредственно отвечая на вопрос, но ESC O 5 P
это совершенно неправильная вещь для отправки терминалом.
Вкратце: ESC O
иначе называется SS3
сокращение от Single Shift 3 - это последовательность, которая изменяет следующий отправленный символ, помещая его в графическую область G3 вместо стандартной. Это изменит 5 и отправит P напрямую. Это не так и никогда не было хорошей идеей.
Правильная вещь для отправки Ctrl-F1
было бы CSI 1;5 P
форма CSI P
(клавиша F1) со вторым параметром, установленным на 5 (битовая маска модификатора).