В настоящее время я разрабатываю интерфейс CLI для linux и по разным причинам Я не могу использовать ncurses. Я использую исключительно C++ и Qt framework.Linux - перемещение курсора курсора visual
Поэтому для того, чтобы иметь удобный интерфейс, я должен запустить этот Геч цикл в отдельном потоке:
https://stackoverflow.com/a/912796/3605689
Который в основном означает, что я должен выполнять все основные функциональные возможности (например, backspace). Я уже реализовал завершение команд и историю команд (например, когда вы нажимаете вкладку или uparrow/downarrow в linux), но я не могу понять, как реализовать leftarrow/rightarrow (ака ищет через typeahead).
Как правило, я реализую его так: при каждом gech, который не равен -1, я проверяю, нажал ли пользователь специальный ключ (тот, который каким-то образом изменяет typeahead). Затем я очищаю stdout, используя следующую функцию:
void inputobject::clear_line(int nletters)
{
QTextStream(stdout) << "\033[2K";
for(int i = 0; i < nletters;i++){
QTextStream(stdout) << "\b";
}
rewind(stdout);
}
И замените его чем-то другим, эффективно имитирующим typeahead. Например, в случае backspace я бы сохранил командный вызов clear_line
и снова распечатал команду, только с одним меньшим количеством букв, ведя себя точно так же, как и обычное консольное приложение.
Моя реальная проблема с курсором, в случае левого/Rightarrow, мне нужно переместить курсор визуальный для того, чтобы иметь возможность указать, где в тексте пользователь ищет:
Из-за характер того, как я переписываю данную строку stdout для имитации typeahead, на самом деле не имеет значения, где находится курсор ДЕЙСТВИТЕЛЬНО, до тех пор, пока он остается на одной строке - это просто визуальное значение. Как я могу добиться перемещения визуализации курсора в Linux?
Рассматривали ли вы, глядя на 'ncurses', чтобы узнать, как это сделать? –
http://www.tldp.org/HOWTO/Bash-Prompt-HOWTO/x361.html не тот, что вы ищете? – evilruff
Да, спасибо! – user129186