VT100 escape-последовательность для удаления уже напечатанной новой строки? - PullRequest
2 голосов
/ 12 октября 2011

Существует ли комбинация escape-последовательностей VT100, которая позволит моей программе на C напечатать что-то вроде:

Ожидание ......

на консольтаким образом, что точки появляются одна за другой?По сути, я хочу команду, которая позволит мне вставить дополнительный '.'перед новой строкой, которая уже была отправлена.

Я ищу быстрый однострочник для linux;это не должно быть портативным.Для этого ncurses излишни.

Ответы [ 2 ]

1 голос
/ 03 августа 2014

Вы можете добавить ESC [K (от конца до конца строки) к ESC [A (вверх на одну строку) и напечатать текст новой строки

пример использования Python:

import random, time
for _ in range(100):
    print('\x1b[A\x1b[Kthis will print each line cleanly: %d' %(random.randint(0, 100000)))
    time.sleep(0.1)

, если вы действительно хотите быть в курсе событий, используйте ESC7 (сохранить курсор) и ESC8 (восстановить курсор)

затем вы пишете свою строку и в конце ее используете ESC7. в начале оператора печати вы используете ESC8. обратите внимание, если вы не отключите автоматические переводы строк, это будет , а не работать в нижней части вашего tty. он будет работать на всех строках , но внизу.

import random, time

print('this will print each dot cleanly: \x1b7')
for _ in range(10):
    print('\x1b8.\x1b7')
    print('print more foo: %d' %_)
    time.sleep(0.1)

для сценариев оболочки (bash) вы должны использовать printf "..." без \ n или echo -n

1 голос
/ 12 октября 2011

Простой способ сделать это - использовать escape-последовательность

"\x1b[A"

для перемещения курсора вверх на одну строку. Затем перепечатайте сообщение «Ожидание ...», на одну точку больше, чем в прошлый раз.

...