Код: Выделить всё
int getCursorPosition(int *rows, int *cols) {
char buf[32];
u_int i = 0;
if (write(STDOUT_FILENO, "\x1b[6n", 4) != 4) return -1;
while (i < sizeof(buf) - 1) {
if (read(STDIN_FILENO, &buf[i], 1) != 1) break;
if (buf[i] == 'R') break;
i++;
}
buf[i] = '\0';
if (buf[0] != '\x1b' || buf[1] != '[') return -1;
if (sscanf(&buf[2], "%d;%d", rows, cols) != 2) return -1;
return 0;
}
По сути, это запасная функция на случай, если система, на которой работает редактор, не может получить доступ к termios.h для измерения размера терминала, на котором работает редактор. приложение. Функция использует escape-код VT100 ^[6n, чтобы получить текущую позицию курсора из терминала, который возвращает ^[;R.
Что я не могу понять, так это то, что sscanf, похоже, имеет доступ к ответу терминала и присваивает эти значения. Я пробовал работать с sstream, но, похоже, не могу воспроизвести такое поведение. Неужели в C++ нет ничего, что могло бы это сделать?
Подробнее здесь: https://stackoverflow.com/questions/781 ... -libraries
Мобильная версия