私はjQuery端末用のANSIフォーマットコードを書いています。ほとんど動作しますが、問題があります。カーソルを移動する必要がある0A ansiコードに関連しています(他の0カーソルコードもあります:BCDEF)。
私はテストしましたアイビー図書館\x1b\[0[A-D]
端末に出力する前に文字列から削除すると効果があります。
ANSIエスケープが正しく処理されるかどうかはわかりません。各行の前に出力を複数行に分割し、y位置を大きくしてxを0に設定し、カーソルANSIエスケープコードがある場合はカーソルを移動します。私は画面の出力を保存するために配列の配列を使用します。 (確かではありませんが、最後まで1行に接続しないと、より速いようですが、速度のためではなく、最初のアイデアだったのでそうしました。)
0があればどうすればいいかわかりません。
これは、ervyライブラリの2つのプロットの出力です。
正しいプロット
コードがゼロの画像はありません。
私のコードをデバッグしようとしています(いつかプロットが2番目の画面に表示されるようです)0 ANSIエスケープコードを処理する方法がわかりません。
私はそれを使用していますウィキペディア参照。
答え1
\e[5A
これらのエスケープシーケンスは、カーソルを5行上に移動し、カーソルを\e[10C
右に10列移動するなど、反復回数を引数として使用します。この値は次のとおりです。省略、デフォルトは1です。
しかし、パラメータが明示的に0に指定された場合はどうなりますか?
基準を見てみましょう。 ECMA-48とctlseqs.html(xtermの動作を文書化)はこれについて何も言いません。つまり、暗黙的にゼロに移動する必要があることを意味します。一方、DEC STD 070では、値0を1ずつ移動する必要があることが示されています。
実装を見てみましょう。これらのシーケンスの一部では、urxvtは、たとえば垂直カーソル移動の場合は0を0と解釈しますが、水平カーソル移動の場合は解釈しません(1)。私が確認した他のすべての端末はこれを1と解釈します(xtermを含むアクションとドキュメントが一致しません)。
標準は一貫性がありません。実装は一貫性がありません。
あなたは何ができますか?これを使用しないでください。これらのエラーが発生するライブラリが見つかった場合は、バグを報告し、開発者に問題のあるエスケープシーケンスの使用を中止するように依頼してください。これは、期待にかかわらず、いくつかの規格に違反し、一部の端末を確実に損傷する可能性があるためです。
答え2
DEC VTの動作は、ZDM(Zero Default Mode)を考慮すると理解しやすくなります。 ECMA-48から:
パラメータ値0はデフォルトのパラメータ値を表し、0と異なる場合があります。
カーソル移動シーケンスの場合、仕様はデフォルト値を「1」と定義するため、ZDMでも同じです。
CSI A
(パラメータ省略のデフォルト値は1です。)CSI 0 A
(0はデフォルトとして特別な意味を持ちます)CSI 1 A
(param がデフォルト値)
私が知る限り、DECデバイスに実装されているすべてのCSIシーケンスはZDM方式に従います。
ZDMは後で仕様から削除されたため、「0」は数字で読み取る必要があり、デフォルトの特別なプレースホルダーではなくなりました。ただし、DECデバイスはこの動作を変更していません。したがって、一つの質問に帰結します。 VT100+準拠のエミュレータは仕様に完全に準拠していますか?