Перерисовать экран в терминале

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

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
8
0
9 649
9
Перейти к ответу Данный вопрос помечен как решенный

Ответы 9

Есть символы, которые могут быть отправлены на терминал и перемещают курсор назад. Затем текст можно перезаписать.

Есть список здесь. Обратите внимание на строки «переместить курсор на что-нибудь».

Теперь я понимаю, почему просмотр двоичных файлов в cat или less сломал бы мой терминал ... он всегда менял набор символов, и мне приходилось перезапускать, ха-ха.

krs013 22.03.2014 09:23

Если вы завершите строку, отправленную на терминал, с помощью возврата каретки ('\ 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 - это то, что нужно. Вот хороший учебник:

http://tldp.org/HOWTO/NCURSES-Programming-HOWTO/

В зависимости от терминала вы отправляете управляющие последовательности. Обычными последовательностями являются, например, esc [; H, чтобы отправить курсор в определенную позицию (например, в Ansi, Xterm, Linux, VT100). Однако это будет зависеть от типа или терминала, который есть у пользователя ... curses (в сочетании с файлами terminfo) будет переносить эту информацию за вас.

Другие вопросы по теме