Изоляция стандартного ввода и вывода в терминале - PullRequest
3 голосов
/ 27 января 2011

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

Ответы [ 2 ]

2 голосов
/ 27 января 2011

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

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

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

0 голосов
/ 27 января 2011

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

my2c

...