Io 朱莉娅:控制光标在打印输出中的位置

Io 朱莉娅:控制光标在打印输出中的位置,io,output,julia,ansi-escape,Io,Output,Julia,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行吗 编辑: 我做了一些

我在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

这些都是的示例,这是终端模拟器的一个功能,并且不是Julia特有的。第一个字符是
\u1b
,它指定0x1b处的unicode字符(十进制27,为ESC发送的关键代码,通常写为
\e
)。序列
\e[
是“控制序列启动器”或者CSI。您可以在中看到转义序列的不完整列表,包括
A
D
F
G
K
,以及
S
,正如您所发现的那样。前导号修改命令,通常指定重复次数。

谢谢!很难搜索这被称为什么。当在iTerm中的Mac上执行此操作时,控制序列似乎不起作用。例如,当我尝试:
julia--color=yes--eval'println(“Hello First row”);print(“Hello\u1b[1F”);print(“Second row”)“Hello First row Hello Second row
在打印第二行之前,它不会向上移动一行。但是,当我尝试ProgressMeter时,它的行为与预期的一样。需要任何特殊设置吗?我通过使用光标向上(“\u1b[a”)而不是对齐(\u1b[F”)序列找到了解决方案。后者不是ANSI.SYS,因此不支持任何地方。