Я пытаюсь получить координаты курсора в терминале VT100, используя следующий код:Чтение состояния устройства Отчет ANSI последовательность побега ответ
void getCursor(int* x, int* y) {
printf("\033[6n");
scanf("\033[%d;%dR", x, y);
}
Я использую следующую последовательность ANSI побега:
Состояние устройства Отчет - ESC [6n
Сообщает позицию курсора в применения в качестве (как будто набирается на клавиатуре) ESC [п, мР, где п строка и m - столбец.
Код компилируется и последовательность ANSI передается, но, получив его, терминал печатает ^[[x;yR
строку в stdout
вместо stdin
делает его невозможным для меня, чтобы извлечь его из программы:
Очевидно, что строка предназначена для программы, поэтому я должен что-то делать неправильно. Кто-нибудь знает, что это?
Нет ли способа заставить команду ANSI не выписывать '^ [[x; yR' на терминал вообще? Я хотел бы тихо получить координаты без каких-либо видимых изменений на экране терминала. Но это записывается на терминал (нежелательно при создании текстового графического интерфейса) и таким образом изменяет координаты курсора (что делает его абсолютно бесполезным). – Witiko
Вот почему проклятия (и ncurses) существуют, поэтому вам не нужно беспокоиться обо всех этих деталях. – Craig
Несомненно, но ncurses - полная версия. Вот почему я пишу свои легкие escape-последовательности ANSI lib, которые поддерживают только VT100. Но да, похоже, мне просто нужно будет выполнить ncurses и попытаться перестроить его, чтобы найти решение этой проблемы. – Witiko