我在这里基于我所知道的技术做出一些假设,但欢迎其他技术建议。
我的目标:编写一个ANSI Art查看器,尽可能接近在DOS计算机上查看,最好不要运行dosbox。这将在Raspberry Pi上运行。
我已经让我的控制台正确地使用正确的字符,颜色等来捕获ANSI。“查看器”的捕获是我希望能够使用箭头键在文档中上下滚动,就像说“少”命令一样。
根据我的研究成果,诅咒是一个完美的候选人。问题是curses不支持ANSI转义码序列。有一个用C ++编写的ANSI编辑器使用curses,但是它构建了自己对解析转义码序列的支持。现在这是我的最后一招。
所以我的问题是:在linux上的python中创建可滚动的控制台模式应用程序以查看ANSI Art(代码页437 + ANSI转义码序列)是否有更好的途径?
答案 0 :(得分:0)
实际上只有两种可能性:将ANSI序列解析成curses
可以接受的内容,或按原样使用ANSI序列。
起初,后者可能看起来更具吸引力。大多数限制要么与您无关,要么易于处理:
cat
命令不起作用。 (您可能仍然遇到颜色设置问题,但我认为您也知道如何解决这个问题。)decode('cp437')
然后在您的代码中进行适当编码;转义序列将保持不变。tty.setraw(sys.stdin.fileno())
一样简单,只是将stdin作为无缓冲文件读取。 (好吧,你可能想隐藏原来的tcgetattr
,以便你以后可以恢复它,但这并不难。)最后一个听起来像是容易的部分,但事实并非如此。例如,我抓了一个随机文件GR-BANT;它只有33行,但它有154个新行。这将是相当普遍的。在许多情况下,它只是“覆盖线”,以esc开头 - [ - A,你必须将其视为前一行的一部分,这不难做到,但会有很多需要的情况不止于此。
所以,无论如何,你至少必须做一些 ANSI解析。
一旦你开始这样做,我认为你会发现一个更容易的时间用你的“最后手段”做一个完整的解析并手动绘制到一个curses pad。 (当然,这样做的副作用是可以处理动画文件,在非ANSI终端上工作,更轻松地在所有终端上处理“键盘”键,......)
但如果你想采取第二种方式,here是一个快速入侵,应该让你开始。