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?

Ответы на вопрос(2)

Ваш ответ на вопрос