Перерисовать экран в терминале - PullRequest
8 голосов
/ 17 сентября 2008

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

Ответы [ 9 ]

6 голосов
/ 08 февраля 2010

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

5 голосов
/ 17 сентября 2008

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

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

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

4 голосов
/ 17 сентября 2008

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

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

4 голосов
/ 17 сентября 2008

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

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

2 голосов
/ 17 сентября 2008

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

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

1 голос
/ 17 сентября 2008

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

1 голос
/ 17 сентября 2008

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

0 голосов
/ 17 сентября 2008

Я согласен с Данио, ncurses это путь. Вот хороший учебник:

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

0 голосов
/ 17 сентября 2008

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...