2

VT100 エスケープ シーケンスで制御される Telnet CLI アプリケーションを作成しています。たとえば、カーソルを左に移動するには、<ESC>[D エスケープ シーケンスが Telnet サーバーからクライアント (Putty または Gnome ターミナル) に送信されます。残念ながら、Putty の行の長さよりも長い行では、上記のエスケープ シーケンスでは現在の行より上の行にカーソルを移動できません。

例。カーソルは「|」です。コメントは「//」でマークされています

----------------
>potato| // Now I press left arrow which sends esc sequence to application
----------------
>potat|o // Works as expected. The cursor moved left
----------------

もう一つの例

----------------
>potatopotatopot // This is a long command which goes over two lines
|ato             // Now I press left arrow which sends esc sequence to application
----------------
>potatopotatopot // The cursor didn't move, since the escape sequence 
|ato             // does nothing if the cursor is at the edge
----------------

端にいるときにラップアラウンドする他のエスケープシーケンスを探していましたが、見つかりませんでした。端末モードをラップできるものに変更するエスケープ シーケンスも見つかりませんでした。

では、このような端末ナビゲーションは一般的にどのように処理されるのでしょうか?

4

2 に答える 2

0

termcap 端末の説明のbw機能は、画面の端で左に移動すると前の行に折り返されるかどうかを示します。これは、私がチェックした PuTTy の記述 ( infocmp puttyncurses の下) には存在していましたが、他の多くの記述には存在しませんでした (例: には存在しませんinfocmp gnome)。

カーソルがどの列にあるかを追跡し、前の行に折り返す場合は移動制御シーケンスを使用することができます。ユーザーの画面の幅を知る必要があります。これは、LINESおよびCOLS環境変数を設定することで実行できます。

于 2014-09-09T11:25:09.500 に答える