![](/img/trans.png)
[英]How to use the new support for ANSI escape sequences in the Windows 10 console?
[英]How to create scrollable console application that support ANSI escape code sequences
我在此基于我所了解的技术做出一些假设,但也欢迎其他技术建议。
我的目标:编写一个ANSI Art查看器,使其尽可能类似于在DOS机器上进行查看,最好不要运行dosbox。 这将在Raspberry Pi上运行。
我已经有了控制台,可以使用适当的字符,颜色等适当地显示ANSI。“查看器”的好处是我希望能够使用箭头键在文档中上下滚动,就像,例如,“较少”命令可以。
根据我的研究,诅咒是一个完美的选择。 问题是curses不支持ANSI转义码序列。 有一个使用C ++编写的ANSI编辑器,它使用curses,但是它为解析转义码序列建立了自己的支持。 现在这是我的不得已的方法。
所以我的问题是:是否有更好的方法来创建可滚动的控制台模式应用程序,以在Linux上的python中查看ANSI Art(代码页437 + ANSI转义代码序列)?
实际上只有两种可能性:将ANSI序列解析为curses
可以接受的内容,或者按原样使用ANSI序列。
起初,后者似乎更具吸引力。 大多数限制与您无关,或者很容易处理:
cat
命令不起作用。 (您可能仍然对颜色设置有疑问,但是我想您也知道如何解决该问题。) decode('cp437')
然后在您的代码中进行适当编码即可; 转义序列将原样通过。 tty.setraw(sys.stdin.fileno())
一样简单,只需将stdin读取为无缓冲文件即可。 (好吧,您可能想tcgetattr
原始tcgetattr
以便以后可以恢复它,但这并不难。) 最后一个听起来很简单,但事实并非如此。 例如,我抓取了一个随机文件GR-BANT ; 它只有33行,但其中有154条换行符。 这将非常普遍。 在许多情况下,以esc-[-A开头的只是“重叠线”,您必须将其视为上一行的一部分,这并不难做到,但是在很多情况下,都需要不仅如此。
因此,无论如何,您都必须至少进行一些 ANSI解析。
一旦开始,我想您将通过完全解析并手动绘制到诅咒板上的“最后一招”找到更轻松的时间。 (当然,这样做的副作用是可以处理动画文件,在非ANSI终端上工作,更轻松地在所有终端上处理“小键盘”键……)
但是,如果您想采用第二种方法, 这里有一个快速的技巧可以帮助您入门。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.