2017-02-26 4 views
1

テキスト行を読み込み、TERMCAPルーチン( "readline"ライブラリに似ています)を使用してカーソルの移動と編集ができるCコードで作業します。問題はこれです:1つ以上の文字を行末から消去する必要がある場合は、(1)カーソルをEOLに移動して\b \bシーケンスを発行する方が効率的です。または(2)、カーソルを切り捨てポイントに移動し、単一の「行末消去」コマンドを発行しますか?後者のコマンドが、特にワイド端末では「高価」であるかどうかは不明です。誰でもトレードオフ/ガイドラインが何であるか知っていますか?TUIテキスト編集

+0

\ bで消去することは、行末まで消去することと異なります。同じ行に2つの単語があり、最初の単語からいくつかの文字を削除したい場合はどうなりますか?回線の最後までクリアするほうが高速です(現代のハードウェアでは重要ではありません)が、2番目の単語も消去されます。 – linuxfan

答えて

1

出力デバイス(端末)と、消去される文字の数によって異なります。通常、デバイスがErase-to-EOLを最初にサポートしている場合は、1つまたは複数のErase-Single-Character操作よりも高速であるため、デバイスがそこにあります。

非常に遅い接続で動作している場合を除き、おそらく問題ありません。 80年代には、この種のことが懸念されました。なぜなら、私たちはしばしば1200bps以上の接続などで作業していたからです。それは人々がしばしばcurses(3)を避けてtermcapに向かう理由です。最近では、通信デバイスと出力デバイスの両方が、ユーザーの反応時間よりも非常に高速であるため、多くの場合、画面を完全に再描画してしまうことがあります。

好奇心で、なぜtermcapを使うのですか?何十年も前のUNIXプラットフォームでは、terminfoに取って代わりました。 cursesのような高レベルのライブラリが利用できることは言うまでもありません。

+0

良い点。遅い接続で回線を再描画するのにかかる時間は唯一の真の関心事であり、最近問題になる可能性は低いです。カーソルの動きを最小限に抑えるためにコードを少し最適化しようとしています。私は、行末の1文字に「消去一文字」を使用すると思います。それ以外の場合は、バックアップしてEOLに消去します。 – italia389

+0

私はtermcapシステムコールを使用しています(これは、macOSの下でterminfoライブラリに実装されています)。私は問題が何であるかを把握したら、terminfoに切り替える予定です。ありがとう。 – italia389

関連する問題