+
+int Term_HandleVT100_OSC(tTerminal *Term, int Len, const char *Buf)
+{
+ tVT100State *st = Display_GetTermState(Term);
+
+ int ofs = 0;
+ // OSC Ps ; Pt [ST/BEL]
+ if(Len < 2) return 0; // Need moar
+
+ int Ps = 0;
+ while( ofs < Len && isdigit(Buf[ofs]) ) {
+ Ps = Ps * 10 + (Buf[ofs] - '0');
+ ofs ++;
+ }
+
+ if( ofs == Len ) return 0;
+ if( Buf[ofs] != ';' ) {
+ // Error
+ st->Mode = MODE_STRING;
+ st->StringType = STRING_IGNORE;
+ return ofs;
+ }
+ ofs ++;
+
+ switch(Ps)
+ {
+ case 0: // Icon Name + Window Title
+ case 1: // Icon Name
+ case 2: // Window Title
+ st->Mode = MODE_STRING;
+ st->StringType = STRING_TITLE;
+ break;
+ case 3: // Set X Property
+ _SysDebug("TODO: \\e]3; Support X properties");
+ st->Mode = MODE_STRING;
+ st->StringType = STRING_IGNORE;
+ break;
+ case 4: // Change colour number
+ case 5: // Change special colour number
+ _SysDebug("TODO: \\e]%i;c; Support X properties", Ps);
+ st->Mode = MODE_STRING;
+ st->StringType = STRING_IGNORE;
+ break;
+ case 10: // Change foreground to Pt
+ case 11: // Change background to Pt
+ case 52:
+ // TODO: Can be Pt = [cps01234567]*;<str>
+ // > Clipboard data in base-64, cut/primary/select buffers 0-7
+ // > <str>='?' returns the clipbard in the same format
+ default:
+ _SysDebug("Unknown VT100 OSC \\e]%i;", Ps);
+ st->Mode = MODE_STRING;
+ st->StringType = STRING_IGNORE;
+ break;
+ }
+ return ofs;
+}
+