LINUX.ORG.RU

Как очистить терминал

 


0

2

Здравствуйте.

Программа на СИ. Linux.

Скажите как очистить терминал из своей программы?

Я в терминал вывожу строку с разными значениями и хочу чтоб было не куча бегущих строк, а одна.

Пробовал «clear», «reset», «printf(»\033c");", но строчка дёргается. Может есть какой способ сделать чтоб было без дерганий-морганий.

Ещё можно очистить с помощью «Ctrl + L», но я не знаю как послать такую команду.

Или может я вообще неправильно мыслю и надо как-то по другому делать, чтоб в терминал выводилась только одна строка?

Спасибо.


Скорее всего неправильно. Нужно не очищать терминал, а удалять ненужные символы и выводить нужные. Это наверняка реализовано во всяких curses.

anonymous
()

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

while sleep 1; do date | tr \\n \\r; done
Вот пример идущих часов. Работает довольно плавно.

Xenius ★★★★★
()
Последнее исправление: Xenius (всего исправлений: 1)
Ответ на: комментарий от Xenius

Спасибо, идея хорошая, но мне нужно несколько строк выводить, если быть точным, то три.

А не подскажите, можно ли как-то «Ctrl + L» послать, чтоб попробовать хотя бы.

stD
() автор топика
Ответ на: комментарий от stD

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

peregrine ★★★★★
()

Есть 2 способа: Linux-only и портативный.

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

Второй заключается в использовании terminfo (e.g. tput cuu1 для перемещения на строку вверх, tput bicr для перемещения курсора в начало строки) или ncurses.

anonymous
()
Ответ на: комментарий от cdslow

Эти варианты хуже чем «printf(»\033c");", во всяком случае так показалось. То есть больше дерганий.

stD
() автор топика
Ответ на: комментарий от anonymous

Спасибо, буду разбираться. Очень прикольная штука.

stD
() автор топика
Ответ на: комментарий от anonymous

Вообще всё супер! Спасибо огромное!

Для тех кто столкнётся с этим небольшая инструкция:

Инклюдим - #include <curses.h> (нужно установить пакет - libncurses5-dev).

Читаем это - https://www.opennet.ru/soft/ruprog/curter.txt

Простой пример:

Вначале программы один раз вызываем функцию - initscr();

Далее в программе выводим что надо…

Устанвливает позицию курсора:

move(LINES - LINES + 1, COLS - COLS + 1);

Приготавливает строку (помещает её во временный буфер):

addstr(«Bla-Bla-Bla\n»);

Приготавливает форматированную строку:

printw(«Bla %d\n», var);

Выводит всё из буфера на экран:

refresh();

При компиляции добавить флажок:

-lncurses

stD
() автор топика
Последнее исправление: stD (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.