8

一部のプログラムは、端末に表示されているものをどのように編集しますか (無作為に例を挙げると、プログラム 'sl')。ここでは Linux ターミナルのことを考えています。他の OS でも発生する可能性がありますが、わかりません。テキストが表示されると、そこにとどまるといつも思っていました。画面全体を再描画せずに変更するにはどうすればよいですか?

4

9 に答える 9

6

端末によっては、制御シーケンスを送信します。一般的なシーケンスは、たとえば esc[;H で、カーソルを特定の位置に送ります (Ansi、Xterm、Linux、VT100 など)。ただし、これはユーザーが使用しているタイプまたは端末によって異なります... curses (terminfo ファイルと組み合わせて) がその情報をラップします。

于 2010-02-08T15:22:10.200 に答える
5

このシェルスクリプトを試してください

#!/bin/bash
i=1
while [ true ]
    do
            echo -e -n "\r $i"
            i=$((i+1))
    done

-nオプションは改行を防ぎます...そして\rはキャリッジリターンを行います...同じ行に何度も何度も書き込みます-スクロールなどはありません

于 2008-09-16T22:40:04.043 に答える
4

ラインフィード ('\n') の代わりにキャリッジ リターン ('\r') を使用して端末に送信された行を終了すると、カーソルが現在の行の先頭に移動し、プログラムがさらにテキストを出力できるようになります。以前に印刷したものの上に。これは、長いタスクの進行状況メッセージにときどき使用します。

それ以上の端末編集が必要な場合は、ncursesまたはその変種を使用してください。

于 2008-09-16T22:37:57.620 に答える
4

多くのアプリケーションは、cursesライブラリ、またはそれにバインドされた言語を利用しています。

進行状況情報の更新など、1 行を書き換える場合、エスケープ シーケンス「\r」で指定されることが多い特殊文字「キャリッジ リターン」を使用すると、カーソルを現在の行の先頭に戻すことができます。以前そこに書かれていました。

于 2008-09-16T22:41:08.907 に答える
2

カーソルを戻すために端末に送信できる文字があります。その後、テキストを上書きできます。

ここに リスト があります. 「カーソルを何かに移動」行に注意してください。

于 2008-09-16T22:35:37.470 に答える
1

トッシー伍長は、これが最も低いレベルでどのように行われるかについて答えています。開発を容易にするために、curses ライブラリーは単に文字を端末に送信するよりも高いレベルの制御を提供します。

于 2008-09-16T22:40:20.970 に答える
1

NCurses は、スマート端末でユーザー インターフェイスを描画できるクロスプラットフォーム ライブラリです。

于 2008-09-16T22:41:14.570 に答える
0

@Corporal Touchyの回答に基づいて構築するために、curses/ncursesなど、この機能の一部を処理するライブラリが利用可能です

于 2008-09-16T22:38:52.983 に答える
0

私はダニオに同意します.ncursesが道です。ここに良いチュートリアルがあります:

http://tldp.org/HOWTO/NCURSES-プログラミング-HOWTO/

于 2008-09-16T22:44:56.543 に答える