Изоляция stdin и stdout внутри терминала


Я разрабатываю программу CLI на языке C для своего проекта класса systems, и она должна отображать входящий текст, сохраняя командную строку. Оставшись один, входящий текст будет видеть все, что вы пытаетесь напечатать. В других приложениях я видел, как входящий текст печатается выше (или ниже) самого приглашения. Есть ли способ реализовать это в ANSI escapes? ncurses кажется излишним.

2 3

2 ответа:

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

С последовательностями ANSI или специфичными для терминала библиотеками вы можете сделать еще больше, но это, я думаю, все, что вы можете сделать надежно, используя только ASCII. Помимо печати 242 пустых строк, чтобы перерисовать весь экран, конечно.

Edit: Извините, я этого не делал ответьте на часть ANSI правильно. С помощью кодов управления движением курсора и пространства для печати над существующими символами вы можете делать практически все, и есть некоторые удобные действия, которые помогут вам, такие как "удалить строку". Но имейте в виду, что Windows не играет хорошо w/ ANSI post XP, и ни одна другая система не гарантирует этого.

Во-первых, если вы хотите сохранить запрос во время печати, вы не можете использовать такие вещи, как scanf. Вы должны перехватить события клавиатуры или использовать метод без ожидания, чтобы получить ввод. Затем вы можете получить номер терминала строк (n) и распечатать последние N-1 строк вашего вывода, а затем запрос.

My2c