Как проверить, установлен ли DECCKM (режим курсорных клавиш) для последовательностей курсоров в vt100? (или любые другие терминалы)

Я хотел бы знать, есть ли способ узнать, работает ли функция DECCKM (указав, не использовать последовательности курсоров ANSI) был установлен или нет.

Я подключаюсь к процессу через ptrace, поэтому не могу узнать, были ли отправлены на терминал последовательности ^[[?1h или ^[[?1l перед подключением.

Есть ли какая-то последовательность строк, которая при отправке на терминал позволит мне запросить состояние режима курсорных клавиш? Или есть какая-то функция/системный вызов C, которая может это сделать? Поскольку я отлаживаю процесс, я могу подделать как ввод терминала, так и системные функции вызова от имени отлаживаемого процесса, поэтому мне просто интересно узнать, как вы можете выполнить проверку, как если бы вы писали программу и имели доступ к источнику код.


person Grimflo    schedule 01.11.2011    source источник
comment
Я не думаю, что есть какой-либо другой способ, кроме нажатия клавиш со стрелками и просмотра возвращаемой последовательности.   -  person ninjalj    schedule 01.11.2011
comment
Спасибо за ваш комментарий, но, поскольку я использую ptrace для подключения к процессу, у меня нет возможности нажать любую клавишу со стрелкой :)   -  person Grimflo    schedule 01.11.2011
comment
Вы особенно заинтересованы в том, чтобы узнать, был ли установлен DECCKM, например. проверить состояние программы? Или вы просто хотите убедиться, что терминал находится в правильном режиме, прежде чем использовать его?   -  person thkala    schedule 02.11.2011
comment
В данном конкретном случае я читаю входные данные на своем терминале и пересылаю их (путем имитации возвращаемых системными вызовами значений и записи в память) процессу ptraced. Проблема в том, что если DECCKM установлен в отлаживаемой программе и не установлен в моем терминале, последовательности курсоров, поступающие из моего стандартного ввода, не совпадают с ожидаемыми отслеживаемым процессом и не перемещают его курсор. Я хочу проверить, установлен ли DECCKM на удаленном терминале, и установить его локально, если это так, чтобы последовательности клавиш со стрелками, ожидаемые моим терминалом, и удаленный терминал совпадали.   -  person Grimflo    schedule 02.11.2011


Ответы (1)


Используйте DECRQM, чтобы узнать статус DECCKM.

person sendmoreinfo    schedule 01.02.2013