Linux - перемещение консоли курсора визуально
В настоящее время я разрабатываю интерфейс CLI для Linux, и по разным причинамЯ не могу использовать ncurses, Я использую исключительно C ++ и фреймворк Qt.
Поэтому, чтобы иметь удобный интерфейс, я должен запустить этот цикл getch в отдельном потоке:
https://stackoverflow.com/a/912796/3605689
Что в основном означает, что я должен реализовать все основные функции (такие как backspace) самостоятельно. Я уже реализовал завершение команд и историю команд (например, когда вы нажимаете tab или uparrow / downarrow в linux), но я не могу понять, как реализовать leftarrow / rightarrow (так называемый поиск через typeahead).
Обычно я реализую это следующим образом: на каждом gech, который не равен -1, я проверяю, нажал ли пользователь специальную клавишу (ту, которая каким-то образом изменяет typeahead). Затем я очищаю стандартный вывод, используя следующую функцию:
void inputobject::clear_line(int nletters)
{
QTextStream(stdout) << "\033[2K";
for(int i = 0; i < nletters;i++){
QTextStream(stdout) << "\b";
}
rewind(stdout);
}
И замените его чем-то другим, эффективно имитируя ввод текста. Например, в случае возврата, я бы сохранить вызов командыclear_line
и снова напечатайте команду, просто на одну букву меньше, ведя себя точно так же, как обычное консольное приложение.
Моя настоящая проблема с курсором, в случае левой / правой стрелки мне нужно переместить курсор визуально, чтобы иметь возможность указать, где в тексте пользователь ищет:
Из-за характера того, как я переписываю данную строку stdout для имитации заголовка, на самом деле не имеет значения, где находится курсор REALLY, пока он остается на той же строке - важен только визуал. Как я могу добиться перемещения курсора визуально на Linux?