2016-12-13 7 views
0

ある行に印刷されたテキストを別の行に置き換えようとしました。 そのために、私はANSIエスケープコードを使用しています。 私の問題は、置き換えられる行が画面に表示されなくなったときです(ただし、ウィンドウをスクロールしても表示されます)。私はもうそれを変更できないようです。ここ は私の問題の簡単なスタンドアロンの例である:ANSIエスケープコードで端末に表示されない行にPython印刷

import os 

nb_lines_term = int(os.popen('stty size', 'r').read().split()[0]) 

tot_lines = nb_lines_term + 5 
for i in range(tot_lines): 
    print 'line', tot_lines - i 

line_to_replace = nb_lines_term + 2 
new_str = "\033[F" * line_to_replace # go u 
new_str += 'replacing line ' + str(line_to_replace) 
new_str += "\033[E" * (line_to_replace - 1) # go back down 
print new_str 

はまだラインにアクセスする方法がありますか? ANSIエスケープコードまたは他の方法で

+1

これは、['curses'](https://docs.python.org/2/library/curses.html)(' tigetstr() 'と友人)を使用してください。制御シーケンスは端末特有のものである(例えば、「CSI F」は古典的なxtermの「終了」キーである)。 Linuxでは 'CSI F'はカーソルをレベルアップさせ、ターミナルバッファの文字を上書きしています...もう復元する行はありません – dhke

答えて

1

ショート:NOは

長く:データは、可視スクリーンを離れた後慣例により、端末エミュレータ読み取り専用スクロール領域に視界の外にスクロールしたデータを残すことができます。

これは、ハードウェア端末のエミュレータへの適応を反映しています。より広い領域でパンニングするために用意されたハードウェア端末はごくわずかです(見えなくスクロールしたデータを見るための手段はほとんどありません)。標準化されたものは、この種の機能を提供しませんでした。なぜなら、既存の制御シーケンスは可視の画面を扱うからです。

例外はありますが(Hewlett Packardは、エミュレータが見つからない興味深い端末をいくつか作りました)。 xterm(そしてその機能をコピーしたもの)は、をクリアしてスクロールバックすることができます。しかし、(プログラム制御下で)スクロールバック領域をスクロールバックおよび変更できるようなものを見つけることはまずありません。

アプリケーションの開発者は、視覚障害情報を提供するために端末に頼るのではなく、独自のデータを使用して可視表示を管理します。

+0

ありがとうございました...それは私が恐れていたものです! –

関連する問題