Java 如何让终端仿真器发送点击拖动消息?

Java 如何让终端仿真器发送点击拖动消息?,java,vim,terminal,emulation,xterm,Java,Vim,Terminal,Emulation,Xterm,我是一名业余程序员,对在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 he

我是一名业余程序员,对在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是字符位置,鼠标编码与鼠标按钮有关。似乎很容易添加鼠标拖动消息。有人能告诉我字节应该是什么方向吗?还是我错过了一个非常明显的障碍?我最感兴趣的是将点击拖动发送到vim,在android的Connectbot上运行。似乎拥有它真的是件好事。

终端鼠标模式也许是xterm文档中描述得最好的。总之,当终端处于一种鼠标报告模式时,它以

CSI-M-Ps-Px-Py

其中,CSI是单个C1 CSI控件(
0x9b
)或两字节序列ESC(
0x1b
)[

Ps、Px和Py将“状态”、x和y坐标编码为单个字节,该字节偏移量为
0x20
,以确保它是GL可打印的,而不是C0控制字节。Px和Py应该是明显的。Ps是包含以下字段的位掩码:

  • 位0至1编码按钮编号;按钮1至3的
    0
    2
    ,或释放的
    3
    (不编码释放的按钮)
  • 如果按住
    Shift
    修改器,则设置位2(尽管大多数终端将在内部捕获鼠标,并且在这种情况下不会向应用程序报告鼠标)
  • 如果按住
    Alt
    修改器,则设置位3
  • 如果按住
    Ctrl
    修改器,则设置位4
  • 如果鼠标事件是拖动而不是按下,则设置位5
  • 位6设置为将鼠标按钮范围扩展到用于滚轮的按钮4和5
有三种鼠标模式使用此报告,均由DECSM设置;设置DEC专用模式(CSI?Pn h):

  • 模式1000仅报告鼠标按下和释放事件
  • 模式1002在按住按钮(拖动)时报告鼠标按下、释放和移动
  • 模式1003报告鼠标按下、释放和移动事件,即使没有按下按钮

非常感谢!这正是我要找的……我将尝试发送鼠标信号,看看它是否有效,但不确定如何处理DECSM代码。。。