2

私は、http://javassh.org/download/source/de/mud/terminal/vt320.htmlにあるvt320ターミナルエミュレータにクリックドラッグメソッドを追加することに興味を持っているアマチュアプログラマーです。私はマウスプレス機能のソースを調べていて、これに出くわしました:

byte b[] = new byte[6];
b[0] = 27;
b[1] = (byte) '[';
b[2] = (byte) 'M';
b[3] = (byte) mousecode;
b[4] = (byte) (0x20 + x + 1);
b[5] = (byte) (0x20 + y + 1);

write(b); // FIXME: writeSpecial here

ここで、xとyは文字の位置であり、マウスコードはマウスボタンと関係があります。マウスドラッグメッセージを追加するのはかなり簡単なようです。誰かがバイトがどうあるべきかという方向に私を向けることができますか?それとも私は非常に明白な障害を見逃していますか?私は主に、Android用のConnectbotで実行されているvimにクリックドラッグを送信することに興味があります。持っているのは本当に甘いもののようです。

4

1 に答える 1

2

ターミナルマウスモードは、おそらくxtermのctlseqsドキュメントで最もよく説明されています。要約すると、端末がマウスレポートモードの1つにある場合、端末は次の形式でイベントを送信します。

CSI M Ps Px Py

ここで、CSIは、単一のC1 CSIコントロール(0x9b)または2バイトシーケンスESC(0x1b)[のいずれかです。

Ps、Px、およびPyは、「ステータス」、x、およびy座標を0x20、C0制御バイトではなくGL印刷可能であることを保証するためにオフセットされた、単一バイトとしてエンコードします。PxとPyは明らかなはずです。Psは、次のフィールドを含むビットマスクです。

  • ビット0から1は、ボタン番号をエンコードします。ボタン1〜3の場合、または0リリースの場合(どのボタンがリリースされたかはエンコードされません)23
  • 修飾子が保持されている場合、ビット2が設定さShiftれます(ただし、ほとんどの端末はマウスを内部でキャプチャし、この状態ではアプリケーションに報告しません)
  • Alt修飾子が保持されている場合、ビット3が設定されます
  • Ctrl修飾子が保持されている場合、ビット4が設定されます
  • マウスイベントが押すのではなくドラッグモーションである場合、ビット5が設定されます。
  • ビット6は、マウスボタンの範囲をスクロールホイールに使用されるボタン4および5に拡張するように設定されています。

このレポートを使用するマウスモードは3つあり、すべてDECSMによって設定されます。DECプライベートモードを設定します(CSI?Pn h):

  • モード1000は、マウスのプレスおよびリリースイベントのみを報告します
  • モード1002は、ボタンが押された(ドラッグ)ときのマウスの押下、リリース、およびモーションを報告します
  • モード1003は、ボタンが押されていなくても、マウスの押下、リリース、およびモーションイベントを報告します
于 2012-04-09T14:07:04.443 に答える