1

ここでは、私が知っていることに基づいてテクノロジーについていくつかの仮定を立てていますが、他のテクノロジーに関する推奨事項は大歓迎です。

私の目標:できれば dosbox を実行するオーバーヘッドなしで、DOS マシンでの表示に可能な限り似たANSI Artビューアーを作成します。これは Raspberry Pi で実行されます。

適切な文字、色などで ANSI を適切に分類するようにコンソールを取得しました。「ビューア」のキャッチは、矢印キーを使用してドキュメントを上下にスクロールできるようにしたいということです。たとえば、「less」コマンドはそうです。

私が調査できたことから、呪いはこれの完璧な候補です。問題は、curses が ANSI エスケープ コード シーケンスをサポートしていないことです。curses を使用する C++ で記述された ANSI エディターがありますが、エスケープ コード シーケンスを解析するための独自のサポートを構築します。今のところ、これが私の最後の手段です。

私の質問は次のとおりです。 Linux 上の Python で ANSI アート (コード ページ 437 + ANSI エスケープ コード シーケンス) を表示するためのスクロール可能なコンソール モード アプリケーションを作成するためのより良い方法はありますか?

4

1 に答える 1

0

実際には 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 番目の方法に進みたい場合は、ここにある簡単なハックから始めてください。

于 2013-08-22T00:13:27.630 に答える