Джулия: управление тем, где находится курсор в печатном выводе

#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. Спасибо! Было трудно найти, как это называется.