2012-04-07 71 views
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是字符位置和mousecode與鼠標按鈕做。似乎相當直接添加鼠標拖動消息。任何人都可以指向我應該是什麼字節的方向?還是我錯過了一個非常明顯的障礙?我最感興趣的是發送點擊拖動vim,運行在Android的Connectbot上。似乎這將是一件非常可愛的事情。

回答

2

終端鼠標模式可能是xterm的ctlseqs文檔中最好的描述。總之,當終端處於鼠標報告模式中的一個時,它發送事件的形式

CSI中號詩Px的PY

當CSI是任一單C1 CSI控制(0x9b)或雙字節序列ESC(0x1b)[。

Ps,Px和Py將「status」,x和y座標編碼爲單個字節,其偏移量爲0x20,以確保它是GL可打印而不是C0控制字節。 Px和Py應該很明顯。 Ps是包含以下字段的位掩碼:

  • 位0到1編碼按鈕編號; 02爲按鈕1至3,或3以便在一釋放(它不編碼哪個按鈕被釋放),如果Shift改性劑被保持(儘管大多數終端將捕獲鼠標內部,它不報告給
  • 位2被設定在這種條件下的應用程序),如果Alt改性劑保持的,如果Ctrl改性劑保持被如果鼠標事件是拖動運動而不是按下
  • 位5被設定
  • 位4被設置
  • 位3被設定。
  • 位6設置爲將鼠標按鈕範圍擴展到用於滾輪的按鈕4和5。

有三種使用此報告的鼠標模式,全部由DECSM設置;設置DEC私有模式(?CSI光合速率H):

  • 1000個模式報告鼠標按下和釋放事件僅
  • 模式1002報告鼠標按下,釋放,而當按下按鈕的運動(拖拽)
  • 即使沒有按鈕,模式1003報告鼠標按下,釋放和運動事件
+0

非常感謝!確切地說我在找什麼......我只是發送鼠標信號來查看它是否工作,不確定如何處理DECSM代碼...... – q335r49 2012-04-10 23:30:44

相關問題