Explorar o código

fixed #9845, fixed #10302 - allow alternative OSC52 suffix

Eugene hai 1 ano
pai
achega
e407ee8bf1
Modificáronse 1 ficheiros con 15 adicións e 4 borrados
  1. 15 4
      tabby-terminal/src/middleware/oscProcessing.ts

+ 15 - 4
tabby-terminal/src/middleware/oscProcessing.ts

@@ -3,7 +3,7 @@ import { Subject, Observable } from 'rxjs'
 import { SessionMiddleware } from '../api/middleware'
 
 const OSCPrefix = Buffer.from('\x1b]')
-const OSCSuffix = Buffer.from('\x07')
+const OSCSuffixes = [Buffer.from('\x07'), Buffer.from('\x1b\\')]
 
 export class OSCProcessor extends SessionMiddleware {
     get cwdReported$ (): Observable<string> { return this.cwdReported }
@@ -14,11 +14,22 @@ export class OSCProcessor extends SessionMiddleware {
 
     feedFromSession (data: Buffer): void {
         let startIndex = 0
-        while (data.includes(OSCPrefix, startIndex) && data.includes(OSCSuffix, startIndex)) {
+        while (data.includes(OSCPrefix, startIndex)) {
+            const si = startIndex
+            if (!OSCSuffixes.some(s => data.includes(s, si))) {
+                break
+            }
+
             const params = data.subarray(data.indexOf(OSCPrefix, startIndex) + OSCPrefix.length)
-            const oscString = params.subarray(0, params.indexOf(OSCSuffix)).toString()
 
-            startIndex = data.indexOf(OSCSuffix, startIndex) + OSCSuffix.length
+            const [closesSuffix, closestSuffixIndex] = OSCSuffixes
+                .map((suffix): [Buffer, number] => [suffix, params.indexOf(suffix)])
+                .filter(([_, index]) => index !== -1)
+                .sort(([_, a], [__, b]) => a - b)[0]
+
+            const oscString = params.subarray(0, closestSuffixIndex).toString()
+
+            startIndex = data.indexOf(closesSuffix, startIndex) + closesSuffix.length
 
             const [oscCodeString, ...oscParams] = oscString.split(';')
             const oscCode = parseInt(oscCodeString)