2012-04-07 4 views
2

Ich bin ein Amateur-Programmierer, der daran interessiert ist, dem vt320-Terminalemulator unter http://javassh.org/download/source/de/mud/terminal/vt320.html eine Click-Drag-Methode hinzuzufügen. Ich bin auf der Suche durch die Quelle für Presse Funktion Maus und kam auf diese:Wie kann ein Terminalemulator Click-Drag-Nachrichten senden?

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 

Wo x und y die Zeichenpositionen und mousecode sind, hat mit der Maustaste zu tun. Es scheint ziemlich einfach zu sein, eine Maus-Drag-Nachricht hinzuzufügen. Kann mir jemand in die Richtung zeigen, was die Bytes sein sollten? Oder fehlt mir eine sehr offensichtliche Roadblock? Ich bin hauptsächlich daran interessiert, click-drag nach vim zu schicken und auf Connectbot für Android zu laufen. Es scheint, als wäre es eine wirklich süße Sache zu haben.

Antwort

2

Terminal-Maus-Modus ist vielleicht am besten beschrieben von Xterm ctlseqs Dokument. Zusammenfassend, wenn das Terminal in einen der Mausberichtsart ist, sendet er Ereignisse in Form

CSI M Ps Px Py

CSI Wo entweder die einzelne C1 CSI Steuerung (0x9b) oder zwei- Bytefolge ESC (0x1b) [.

Ps, Px und Py codieren die "Status", X- und Y-Koordinaten als ein einzelnes Byte, das um 0x20 versetzt ist, um sicherzustellen, dass es ein GL-druckbares und kein C0-Steuerbyte ist. Px und Py sollten offensichtlich sein. Ps ist eine Bitmaske, die die folgenden Felder enthält:

  • Bits 0 bis 1 kodieren die Tastennummer; 0-2 für den Tasten 1 bis 3 oder 3 für eine Freigabe (es kodiert nicht die Taste losgelassen wurde)
  • Bit 2 gesetzt, wenn der Shift Modifikator gehalten wird (obwohl die meisten Terminals Maus intern erfassen wird und melden Sie es nicht zu Anwendungen in diesem Zustand)
  • Bit 3 gesetzt, wenn der Alt Modifikator gehalten wird
  • Bit 4 wird gesetzt, wenn der Ctrl Modifikator gehalten wird
  • Bit 5 gesetzt sind, wenn das Mausereignis eine Schleppbewegung statt einer Presse ist .
  • Bit 6 ist so eingestellt, dass der Mausbereich auf die Tasten 4 und 5 für das Scrollrad erweitert wird.

Es gibt drei Mausmodi, die diese Berichterstellung verwenden, die alle von DECSM festgelegt wurden. Stellen Dezember privater Modus (? CSI Pn h):

  • Modus 1000 Berichte Maus drücken und loslassen Ereignisse nur
  • Modus 1002 Berichte Maus drücken, Freigabe und Bewegung, wenn eine Taste gedrückt wird (Drag)
  • Modus 1003 meldet Maus drücken, loslassen und Bewegungsereignisse auch ohne eine Taste gedrückt zu halten
+0

Vielen Dank! Genau das, was ich gesucht habe ... Ich werde mit den Maus-Signalen herumspielen, um zu sehen, ob es funktioniert, nicht wirklich sicher, was ich mit den DECSM-Codes machen soll ... – q335r49

Verwandte Themen