実際には 2 つの可能性しかありません。ANSI シーケンスを解析してcurses
受け入れ可能なものにするか、ANSI シーケンスをそのまま使用します。
最初は、後者の方が魅力的に見えるかもしれません。ほとんどの制限は、あなたには関係ないか、簡単に対処できます。
- アニメーション ファイルではなく、静的な ANSI アートでのみ機能します。アニメーション ファイルで「スクロール アップ」するのはあまり意味がないため、これはかなり合理的です。(もちろん、その場でキャンバスにレンダリングし、その中でウィンドウを上下にスクロールすることもできますが、そのレンダリングとウィンドウ処理が何を意味するのかを考え始めると、ANSI アートを解析していることになります。)静的 ANSI アートのみが必要です。
- 端末が(十分に近い)ANSI互換である場合にのみ機能しますが、そうである(またはそうすることができる)場合、
cat
コマンドは機能しません。(まだ色の設定に問題があるかもしれませんが、それを回避する方法も知っていると思います。)
- 端末が cp437 の場合にのみ機能しますが、これはより問題になる可能性があります... しかし、それを回避するのは簡単です。
decode('cp437')
次に、コードで適切にエンコードします。エスケープ シーケンスは変更されずに通過します。
- おそらく生のキーボード入力が必要です。しかし、これは
tty.setraw(sys.stdin.fileno())
標準入力をバッファリングされていないファイルとして読み取るのと同じくらい簡単です。(まあ、後で元に戻せるように元のファイルを隠しておきたいと思うかもしれませんtcgetattr
が、それほど難しくはありません。)
- キーボード入力のエスケープ シーケンスを自分で解析する必要があります。これは一般的には大変な作業ですが、ANSI-art 互換の端末で上下の矢印を操作するだけなら簡単です。
- ANS ファイルを実際の行にマップする方法を知っている必要があります。
最後の部分は簡単なように聞こえますが、そうではありません。たとえば、ランダムなファイルGR-BANT を取得しました。長さはわずか 33 行ですが、改行は 154 行あります。そして、それはかなり一般的になります。多くの場合、前の行の一部として扱わなければならないのは esc-[-A で始まる「オーバーレイ行」になります。これは難しくありませんが、必要な場合はたくさんあります。それ以上の何か。
そのため、何があっても、少なくともいくつかのANSI 解析を行う必要があります。
そして、それを始めたら、完全な解析を行い、curses パッドに手動で描画するという「最後の手段」で、より簡単な時間を見つけることができると思います。(もちろん、これには、アニメーション ファイルの処理、非 ANSI 端末での作業、「キーパッド」キーの処理がより簡単になり、すべての端末で可能になるという副作用があります…)
しかし、2 番目の方法に進みたい場合は、ここにある簡単なハックから始めてください。