DEC ANSIコマンドシーケンスの質問。カーソルの動き


8

だから私はターミナルエミュレーションを書いて(わかっている、パテなどをコンパイルするだけでいい)、それが正しいことを確認するためにvttestを駆使する段階にいます。今はVT102をベースにしていますが、基本が正しく機能している場合は、カラーなどのターミナル機能を追加します。

コマンドセットは主にANSIです。DECは独自のコマンドセットを備えていましたが、1973年頃からANSIコマンドをサポートしていました。これらのANSI標準は明らかに現在利用できませんが、ECMAの同等物は利用できます。見ることができます。ほとんどのANSIコマンドシーケンスは、ESCで始まります。多くのコマンドは、ここではCSIとして示され、データ内で0x1c 0x5b(ESC [)、または8ビット通信が可能な場合は0xdbとして表されるコマンドシーケンス識別子で始まります。次に、コマンドを識別するシーケンスが続きました。コマンドの中には、カーソルの位置に影響を与えるもの、画面に影響を与えるもの、ホストへの応答を引き起こすものなどがあります。

一部の端末コマンドには数値引数が含まれています。例CSI 10 ; 5 Hは、カーソル位置を行10、列5にすることを意味します。数値引数がない場合、使用するデフォルト値があります。CSI 10 ; Hつまり、引数が指定されない場合のデフォルト値は1であるため、カーソル位置を行10、列1にします。

私はvt100.net(素晴らしいリソース)からのvt102マニュアルを持っており、これらのコマンドシーケンスに関する部分的な情報を提供する約12のページがあります。どうやら、完全なゴスペルDEC端末仕様はDECから外れたことはありません。

明らかなのは、CSI Cカーソルを右に移動することと、デフォルト値が1であることです。

はっきりしないのは、の意味ですCSI 0 C

なぜそこにゼロがあるのですか、それはコマンドが何もしないように思われるでしょうか?「デフォルト値を使用」を意味する場合は、代わりに1として送信された可能性がありますが、短い文字列には引数がなく、いずれにしてもデフォルト値が1として解釈されることに依存します。これらの実際の物理VT端末は300ボー以下で使用されることが多かったため、1文字で問題ありませんでした。

私はvttestをあまり使いこなしていないので、両方の方法を試してみて、すべてが完璧になるかどうかを確認できますが、このような小さな質問が問題になり始めるほど十分です。


2
用語の注記:CSIはescape- [であり、2文字のシーケンスESC [として、または[8番目のビットセットと同じようにエンコードできます。(一部のモデルはのみをサポートしている場合がありESC [ます)CSI 0 Cvt102で何が行われたかわかりません。xtermではと同等CSI 1 Cです。私は疑っていますが、確かではありませんが、0と値の不在は、ある時点で同じように解析されると思います(と考えてくださいatoi)。xtermソースでコメントを探しましたか?
Gilles「SO-邪悪なことをやめなさい」

編集に感謝します。さらに手がかりを得るためにソースを調べる必要があると思います。
Adam Eberbach

回答:


4

彼はそれを説明-私はのxtermを維持し、vttestはトーマス・ディッキー(invisible-island.net)と連絡を取っCSI 0 C同じであるCSI 1 CCSI Cのxtermインチ

端末プログラミングの詳細をお探しの方は、自分がホストしているxtermソース、特にxterm内のctlseqs.txtを確認することを強くお勧めします。


このソースファイルは、CSIコードを見つけるのに役立ちました。言及されたctlseqs.txtから0x9bバイトとして表されているCSIに関する情報は間違っているようです、実際には0x1bです
Hi-Angel

1

多くの異なる端末の機能を特定のコードシーケンスにマッピングするデータベースがすでにあるのに、なぜ特定の端末タイプのハードコード互換性があるのですか?(terminfoデータベースは通常/ usr / shareにあり、ほとんどのncursesディストリビューションに含まれています)。cursesのリソースはすべて、これらの関数のラベル付け方法を説明する必要があります。

terminfoファイルは通常(ticを使用して)コンパイルされるため、terminfoソースファイルを見つけるには少し掘り下げる必要がある場合があることに注意してください。

http://tldp.org/HOWTO/Text-Terminal-HOWTO.html#toc16も参照してください(terminfo.srcファイルの1つのリポジトリへのリンクがあります)


私が端末を配置しているデバイスには、terminfoやncursesがなく、特定の端末エミュレーションを作成することは、netbackを実行するための最良の方法のようです。iPad用のネットハックはすでにありますが、タッチコントロール方式のGUIではなく、DECgraphicsモードのキーボードでプレイできるようにしたいだけです。これが世界に火をつけるとは思わないが、ネットハックをプレイしたい方法だ。
Adam Eberbach

1
いいえ-ハードウェアのterminfoにエントリがあるべきだと言っているのではありません-VT102のエントリはありますが、nethackまたは他のcursesベースのアプリケーションが使用するすべてのコマンドシーケンスについて説明しています。
symcbean '26

ああ、ありがとう-それは良いコンパクトなリファレンスになるでしょう。
Adam Eberbach、2011年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.