Изменить 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 (битовая маска модификатора).

Другие вопросы по тегам