Удаление цветовых кодов ANSI printf

#c #shell #colors

#c #оболочка #Цвет

Вопрос:

Я разрабатываю нанооболочку для школьной работы, и у меня проблема с цветовыми кодами ANSI.

Итак, когда я запускаю программу, и я что-то пишу, и нажимаю TAB, тогда, если я отступлю на вкладку, я также смогу удалить свой предыдущий printf, скриншот ниже.

Мне интересно, существует ли на C другой способ сделать мой printf цветным, или я могу запретить пользователю нажимать TAB.

После printf я использую fgets для чтения введенных пользователем аргументов.

 fgets(readpos, bufSize, stdin);
  

Мой printf: printf("33[1;31mnanoShell$ 33[0m");

Пример:

введите описание изображения здесь

Комментарии:

1. Возможно, вы захотите прочитать о библиотеке ncurses .

2. @pmg Я искал это, потому что я пробовал canio.h, но потом я обнаружил, что эта библиотека больше не реализована для пользователей в целом, поэтому они рекомендуют ее, но я не нашел, как изменить цвета printfs.

3. Возможно, GNU Readline может сделать то, что вы хотите… Я никогда не использовал его.

4. @pmg Для блокировки, клавиша табуляции, может быть, getchar или что-то в этом роде! Но я думаю, что проще изменить цвет printf без цветов ansi

5. Проблема со стандартными библиотечными функциями заключается в том, что они (обычно) буферизуются по строкам, т. Е. Вы не получаете <TAB> или <BACKSPACE> или что-то еще, пока пользователь не введет <ENTER> , а между тем положение курсора не находится под вашим контролем. Существуют решения для этой буферизации и управления (которые используют эти библиотеки) с настройкой атрибутов устройства или чего-то еще.