从字符串中删除ansi-escape-sequences,同时仍然遵守它们

时间:2014-03-10 18:35:11

标签: ruby string io ansi-escape

如果我有一个包含ansi转义序列的字符串,当我将它们打印到终端时,它们可以为我移动光标,所以我最终得到以下内容:

puts "xxx\nxxx\nxxx\n\e[2Fbe\e[2E"

# terminal sees
xxx
bex
xxx

##    
# breakdown of "xxx\nxxx\nxxx\n\e[2Fbe\e[2E"

# 1st, the "xxx\nxxx\nxxx\n" is printed
xxx
xxx
xxx
*

# then with `\e[2F` the cursor is moved up 2 lines
xxx
*xx


# then `be` is printed
xxx
bex

# then the cursor is returned to the bottom with `\e[2F`
xxx
bex
xxx
*

如何编写将字符串编码为最终输出的方法。这种方法需要比仅仅去除转义序列更复杂 - 因为它们实际上需要对最终字符串产生影响。

换句话说,如何编写some_magic来为任意输入字符串提供这种输出。

x = my_method(""xxx\nxxx\nxxx\n\e[2Fbe\e[2E"")
#=> "xxx\nbex\nxxx"

0 个答案:

没有答案