#io #output #julia #ansi-escape
#io #выходной сигнал #джулия #ansi-escape #вывод
Вопрос:
Я нашел несколько интересных вещей в пакете Julia (ProgressMeter), который позволяет пользователю управлять тем, где находится курсор для распечатки сообщений, т.Е.
print(io, "u1b[1G") # go to first column
print_with_color(color, io, s)
print(io, "u1b[K") # clear the rest of the line
Как называются эти "u1b[1G"
фрагменты, у меня возникли проблемы с поиском их в документации. Какие еще вещи возможны? Могу ли я переместить курсор на 1 строку вверх?
Редактировать:
Я провел несколько экспериментов:
### Without any unicode characters
julia> println("Hello First row"); print("hello "); print("Second row")
Hello First row
hello Second row
### u1b[1A ###
julia> println("Hello First row"); print("hello u1b[1A"); print("Second row")
Hello Second row
### u1b[1S
julia> println("Hello First row"); print("hello u1b[1S"); print("Second row")
Hello First row
hello
Second row
### u1b[1D
julia> println("Hello First row"); print("hello u1b[1D"); print("Second row")
Hello First row
helloSecond row
### u1b[1F
julia> println("Hello First row"); print("hello u1b[1F"); print("Second row")
Second rowt row
### u1b[1G
julia> println("Hello First row"); print("hello u1b[1G"); print("Second row")
Hello First row
Second row
Когда я использовал u1b[1H
, он переместил курсор в верхнюю часть консоли и u1b[1J
переместил его в верхнюю часть консоли и очистил остальную часть консоли.
### u1b[1K
julia> println("Hello First row"); print("hello u1b[1K"); print("Second row")
Hello First row
Second row
Комментарии:
1. При попытке сделать это на Mac в iTerm управляющие последовательности, похоже, не работают. Например, когда я пытаюсь:
julia --color=yes --eval 'println("Hello First row"); print("hello u1b[1F"); print("Second row")' Hello First row hello Second row
он не поднимается на одну строку вверх перед печатью второй. Тем не менее, когда я пробую ProgressMeter, он ведет себя так, как ожидалось. Требуется какая-либо специальная настройка?2. Я нашел решение, используя последовательность перемещения курсора вверх (» u1b[A»), а не в линию (» u1b[F»). Последнее не ANSI.SYS так что поддерживается не везде.
Ответ №1:
Все это примеры управляющих последовательностей ANSI, которые являются особенностью эмуляторов терминалов и не являются специфичными для Julia. Первым символом является u1b
, который определяет символ Юникода в 0x1b (десятичный 27, код ключа, отправленный для ESC, и часто записывается как e
). Последовательность e[
является «Инициатором последовательности управления», или CSI. Вы можете увидеть неполный список управляющих последовательностей в статье Википедии, включая A
, D
, F
, G
K
, S
и, как вы обнаружили. Начальное число изменяет команду, часто указывая количество повторений.
Комментарии:
1. Спасибо! Было трудно найти, как это называется.