Я пытаюсь написать клиент консольного чата, используя только escape-коды readline и ANSI.
Моя цель - просто позволить терминалу обрабатывать прокрутку и прокрутку истории чата, при этом всегда предоставляя подсказку readline после сообщений для нового ввода.
Я пробовал следующее с моими двумя потоками. Мой поток ввода консоли:
printf("\x1B[s"); // Save cursor position
message = readline("Prompt > ");
И моя ветка получения сообщений:
message = receive_message(); // Blocks for next message
printf("\x1B[u"); // Restore cursor to before the prompt
printf("\x1B[J"); // Erase readline prompt and input (down to bottom of screen)
printf("%s\n", message); // Print the message (where readline was)
printf("\x1B[s"); // Save new cursor position
rl_forced_update_display(); // Restore readline
Вышеупомянутое работает до тех пор, пока ввод readline не переносится. Когда он оборачивается, восстановление сохраненной позиции курсора не работает должным образом, кажется, что восстанавливается только горизонтальное положение, а не вертикальное.
Как я могу адаптировать приведенный выше код для работы, даже если строка ввода переносится?