2017-05-12 8 views
0

後で復元できるように、termcapsを使用して複数のカーソル位置を保存することが可能かどうかを知りたいですか?例えば後で復元できるように、termcapsを使用して複数のカーソル位置を保存することはできますか?

char *c_pos_1 = tgetstr("sc", NULL); //save cursor position at position 1 

後のコードで

char *c_pos_2 = tgetstr("sc", NULL); 

後のコードで

char *c_pos_3 = tgetstr("sc", NULL); 

後でコード

tputs(c_pos_2, 1, my_out); // restoring cursor at c_pos_2 
0123に

以降のコード

tputs(c_pos_1, 1, my_out); //restoring cursor at c_pos_1 

でそして、それが不可能な場合はどのようにそれを行うには?

はあなたの助けをありがとう:)

+0

ncursesのようにもっと快適なものを使用してみませんか? – Olaf

+0

それは学校プロジェクトで、私たちはtermcapしか使用できません –

+0

ncursesはtermcapを使用します。 – Olaf

答えて

2

あなたは、少なくとも二つのことについて混乱しているように見える:c_pos_1の内容、およびカーソル位置を保存するための責任があります。

char *c_pos_1 = tgetstr("sc", NULL); 

c_pos_1にあるものは、決してカーソル位置の表現ではありません。端末がカーソル位置の保存をサポートしている場合、c_pos_1は、端末に送信してカーソル位置を保存するように端末に要求できる文字列を指します。それを別の方法で、あなたのコード

tputs(c_pos_1, 1, my_out); // restoring cursor at c_pos_2 

を言うために、実際には、カーソル位置を復元しない、を節約する効果があります。

カーソル位置は(現実的に、それはあなたの端末エミュレータ、おそらくxtermまたはitermまたはTerminal.appまたはCMD.EXEまたは何を実行中のプロセスに保存されている)、端末に保存され、お使いの過程で保存されません。

端末がsc文字列をサポートしている場合は、rc文字列をサポートしています。この文字列を送信して、以前に保存したカーソル位置を復元できます。繰り返しますが、rc文字列にはカーソル位置が含まれていません。これは、端末(または端末エミュレータ)に端末が以前に保存したカーソル位置を復元するように指示する文字列です(sc文字列を送信したとき)。

複数のカーソル位置を保存するには、端末が複数の異なる「保存カーソル」と「復元カーソル」コマンド文字列をサポートする必要がありますが、termcapには複数の異なる「保存カーソル」と「復元カーソル」コマンド文字列。または、端末は、保存された位置をスタックとして扱い、scコマンドを受け取るたびにカーソル位置をスタックにプッシュし、rcコマンドを受信するたびにポップする必要があります。私は現代的な、共通の端末エミュレータがそれをしているのか疑問に思う。

通常、カーソル位置を「保存」および「復元」する方法は、プログラム内でカーソルの位置を追跡し、出力するすべてのものの効果(カーソル上)を慎重に追跡することです。カーソル位置を保存して復元できるように端末に依存する。これは、ncursesのようなライブラリの機能です。

+0

あなたの完全な回答をありがとう –

関連する問題