Как некоторые программы редактируют то, что отображается на терминале (например, программа 'sl')? Я думаю о терминале Linux здесь, это может случиться и в других ОС, я не знаю. Я всегда думал, что как только какой-то текст отображается, он остается там. Как его изменить, не перерисовывая весь экран?





Есть символы, которые могут быть отправлены на терминал и перемещают курсор назад. Затем текст можно перезаписать.
Есть список здесь. Обратите внимание на строки «переместить курсор на что-нибудь».
Если вы завершите строку, отправленную на терминал, с помощью возврата каретки ('\ r') вместо перевода строки ('\ n'), он переместит курсор в начало текущей строки, позволяя программе печатать больше текста. поверх того, что было напечатано ранее. Я иногда использую это для сообщений о ходе выполнения длинных задач.
Если вам когда-либо понадобится выполнить больше редактирования терминала, используйте ncurses или его вариант.
Чтобы использовать ответ @Corporal Touchy, доступны библиотеки, которые будут обрабатывать некоторые из этих функций для вас, например проклятия / ncurses
попробуйте этот сценарий оболочки
#!/bin/bash
i=1
while [ true ]
do
echo -e -n "\r $i"
i=$((i+1))
done
параметры -n предотвращают новую строку ... и \ r выполняет возврат каретки ... вы пишете снова и снова в одну и ту же строку - без прокрутки или чего-то подобного
Капрал Тучи ответил, как это делается на самом низком уровне. Для упрощения разработки библиотека проклятий дает более высокий уровень контроля, чем просто отправка символов на терминал.
Многие приложения используют библиотеку проклятия или некоторую языковую привязку к ней.
Для перезаписи в одной строке, например, обновления информации о ходе выполнения, специальный символ «возврат каретки», часто задаваемый управляющей последовательностью «\ r», может вернуть курсор в начало текущей строки, позволяя последующему выводу перезаписать то, что было ранее. написано там.
NCurses - это кроссплатформенная библиотека, которая позволяет рисовать пользовательские интерфейсы на смарт-терминалах.
Я согласен с Данио, ncurses - это то, что нужно. Вот хороший учебник:
В зависимости от терминала вы отправляете управляющие последовательности. Обычными последовательностями являются, например, esc [; H, чтобы отправить курсор в определенную позицию (например, в Ansi, Xterm, Linux, VT100). Однако это будет зависеть от типа или терминала, который есть у пользователя ... curses (в сочетании с файлами terminfo) будет переносить эту информацию за вас.
Теперь я понимаю, почему просмотр двоичных файлов в
catилиlessсломал бы мой терминал ... он всегда менял набор символов, и мне приходилось перезапускать, ха-ха.