@@ -353,7 +353,8 @@ export class ShellIntegrationAddon extends Disposable implements IShellIntegrati
353
353
return true ;
354
354
}
355
355
case VSCodeOscPt . Property : {
356
- const { key, value } = parseKeyValueAssignment ( args [ 0 ] ) ;
356
+ const deserialized = args . length ? deserializeMessage ( args [ 0 ] ) : '' ;
357
+ const { key, value } = parseKeyValueAssignment ( deserialized ) ;
357
358
if ( value === undefined ) {
358
359
return true ;
359
360
}
@@ -402,6 +403,8 @@ export class ShellIntegrationAddon extends Disposable implements IShellIntegrati
402
403
}
403
404
default : {
404
405
// Checking for known `<key>=<value>` pairs.
406
+ // Note that unlike `VSCodeOscPt.Property`, iTerm2 does not interpret backslash or hex-escape sequences.
407
+ // See: https://github.com/gnachman/iTerm2/blob/bb0882332cec5196e4de4a4225978d746e935279/sources/VT100Terminal.m#L2089-L2105
405
408
const { key, value } = parseKeyValueAssignment ( command ) ;
406
409
407
410
if ( value === undefined ) {
@@ -523,14 +526,13 @@ export function deserializeMessage(message: string): string {
523
526
}
524
527
525
528
export function parseKeyValueAssignment ( message : string ) : { key : string ; value : string | undefined } {
526
- const deserialized = deserializeMessage ( message ) ;
527
- const separatorIndex = deserialized . indexOf ( '=' ) ;
529
+ const separatorIndex = message . indexOf ( '=' ) ;
528
530
if ( separatorIndex === - 1 ) {
529
- return { key : deserialized , value : undefined } ; // No '=' was found.
531
+ return { key : message , value : undefined } ; // No '=' was found.
530
532
}
531
533
return {
532
- key : deserialized . substring ( 0 , separatorIndex ) ,
533
- value : deserialized . substring ( 1 + separatorIndex )
534
+ key : message . substring ( 0 , separatorIndex ) ,
535
+ value : message . substring ( 1 + separatorIndex )
534
536
} ;
535
537
}
536
538
0 commit comments