Вопрос

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

Это было полезно?

Решение

Многие приложения используют проклятия библиотека или какая-либо языковая привязка к ней.

Для перезаписи в одну строку, например, для обновления информации о ходе выполнения, используется специальный символ "возврат каретки", часто задаваемый escape-последовательностью " ", может вернуть курсор в начало текущей строки, позволяя последующему выводу перезаписать то, что было там записано ранее.

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

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

попробуйте этот шеллскрипт

#!/bin/bash
i=1
while [ true ]
    do
            echo -e -n "\r $i"
            i=$((i+1))
    done

опция -n предотвращает перевод строки...и возвращает каретку...вы пишете снова и снова в одну и ту же строку - без прокрутки или чего-то еще

Если вы завершите строку, отправленную на терминал, возвратом каретки (' ') вместо перевода строки (' '), курсор переместится в начало текущей строки, что позволит программе напечатать больше текста. поверх того, что было напечатано раньше.Я иногда использую это для сообщений о ходе выполнения длительных задач.

Если вам когда-нибудь понадобится больше редактирования терминала, используйте ncurses или его вариант.

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

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

NCurses — это кроссплатформенная библиотека, позволяющая рисовать пользовательские интерфейсы на интеллектуальных терминалах.

Капрал Тучи ответил, как это делается на самом низком уровне.Для облегчения разработки библиотека проклятий дает более высокий уровень контроля, чем простая отправка символов на терминал.

Чтобы опираться на ответ @Corporal Touchy, существуют библиотеки, которые будут обрабатывать некоторые из этих функций, например проклятия/проклятия

Я согласен с Данио, ncurses — это то, что вам нужно.Вот хороший урок:

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top