Linux - movendo o cursor do console visual
Atualmente, estou projetando uma interface CLI para Linux, e por várias razõesNão consigo usar ncurses. Estou usando exclusivamente C ++ e a estrutura Qt.
Portanto, para ter uma interface amigável, eu tenho que executar esse loop getch em um thread separado:
https://stackoverflow.com/a/912796/3605689
O que basicamente significa que eu tenho que implementar todas as funcionalidades básicas (como backspace) sozinho. Eu já implementei a conclusão e o histórico de comandos (como quando você pressiona tab ou uparrow / downarrow no linux), mas não consigo descobrir como implementar o leftarrow / rightarrow (também conhecido como busca pelo tipo de letra).
Normalmente, eu o implemento assim: em todo gech que não seja igual a -1, verifico se o usuário pressionou uma tecla especial (que modifica de alguma forma a cabeça de digitação). Em seguida, limpo o stdout usando a seguinte função:
void inputobject::clear_line(int nletters)
{
QTextStream(stdout) << "\033[2K";
for(int i = 0; i < nletters;i++){
QTextStream(stdout) << "\b";
}
rewind(stdout);
}
E substitua-o por outra coisa, simulando efetivamente a cabeça de impressão. Por exemplo, no caso de backspace, eu salvaria a chamada de comandoclear_line
e imprima o comando novamente, apenas com uma letra a menos, comportando-se exatamente como um aplicativo de console normal faria.
Meu verdadeiro problema é com o cursor, no caso de left / rightarrow, preciso mover o cursor visual para poder indicar onde no texto o usuário está procurando:
Devido à natureza de como eu reescrevo a linha stdout fornecida para simular o cabeçalho de digitação, não importa realmente onde está o cursor REALMENTE, desde que permaneça na mesma linha - é apenas o visual que importa. Como posso mover o cursor visual no linux?