Удалить текущую строку ввода терминала - PullRequest
0 голосов
/ 15 января 2020

Я пытаюсь написать небольшую консольную чат-программу в C на linux.

До сих пор я кодировал ее так, что оба партнера по чату могут только попеременно отправлять / получать, потому что эти вызовы функций по умолчанию блокируются.

Теперь я хотел бы изменить эту программу, чтобы обе могли отправлять и получать одновременно.

Проблема, которую я обнаружил, заключается в том, что однажды вы набрали какой-то ввод в терминал, я не знаю, как выводить полученные сообщения, не путая текущую строку ввода терминала.

Если бы был способ удалить эту текущую строку ввода, вы могли бы временно сохраните эту строку, распечатайте новое сообщение и верните строку ввода обратно.

Однако я не смог найти решение этой проблемы в inte rnet.

Is Можно ли удалить текущую строку ввода, и если нет, как еще я могу достичь того, что я хочу?

1 Ответ

2 голосов
/ 15 января 2020

Я думаю, вы должны изучить ncurses , как сказал Эдд в своем комментарии. Это позволит вам легко управлять контентом в окне терминала, что кажется хорошей идеей для вашей программы чата. Все, что вам нужно сделать, это сохранить ваши сообщения в двухсимвольных массивах:

char incoming[MSG_MAX]
и
char outgoing[MSG_MAX]

Затем вы можете выводить эти сообщения, где хотите в вашем терминальном окне, так как ncurses позволяет вам указать x, y координаты того, где разместить ваш текст. Тогда простая оболочка для одной из функций семейства ncurses erase() позволит вам удалять символы из указанных x, y координат в вашем терминальном окне.

Редактировать: MSG_MAX не является фактический макрос ncurses.

...