From 8aff33d59c3d75a12321425388a27041af7d55a9 Mon Sep 17 00:00:00 2001 From: Eugene Pankov Date: Sat, 25 Aug 2018 10:45:45 +0200 Subject: [PATCH] remember CSI color overrides (fixes #59) --- terminus-terminal/src/hterm.ts | 35 +++++++++++++++++++ .../src/terminalContainers/htermContainer.ts | 7 +++- 2 files changed, 41 insertions(+), 1 deletion(-) diff --git a/terminus-terminal/src/hterm.ts b/terminus-terminal/src/hterm.ts index 2c1454fa..583257ee 100644 --- a/terminus-terminal/src/hterm.ts +++ b/terminus-terminal/src/hterm.ts @@ -67,6 +67,41 @@ hterm.hterm.VT.CSI[' q'] = function (parseState) { this.terminal.applyCursorShape() } +hterm.hterm.VT.OSC['4'] = function (parseState) { + let args = parseState.args[0].split(';') + + let pairCount = args.length / 2 + let colorPalette = this.terminal.getTextAttributes().colorPalette + let responseArray = [] + + for (let pairNumber = 0; pairNumber < pairCount; ++pairNumber) { + let colorIndex = parseInt(args[pairNumber * 2]) + let colorValue = args[pairNumber * 2 + 1] + + if (colorIndex >= colorPalette.length) { + continue + } + + if (colorValue === '?') { + colorValue = hterm.lib.colors.rgbToX11(colorPalette[colorIndex]) + if (colorValue) { + responseArray.push(colorIndex + ';' + colorValue) + } + continue + } + + colorValue = hterm.lib.colors.x11ToCSS(colorValue) + if (colorValue) { + this.terminal.colorPaletteOverrides[colorIndex] = colorValue + colorPalette[colorIndex] = colorValue + } + } + + if (responseArray.length) { + this.terminal.io.sendString('\x1b]4;' + responseArray.join(';') + '\x07') + } +} + const _collapseToEnd = Selection.prototype.collapseToEnd Selection.prototype.collapseToEnd = function () { try { diff --git a/terminus-terminal/src/terminalContainers/htermContainer.ts b/terminus-terminal/src/terminalContainers/htermContainer.ts index fa46c2d1..d3f2fe66 100644 --- a/terminus-terminal/src/terminalContainers/htermContainer.ts +++ b/terminus-terminal/src/terminalContainers/htermContainer.ts @@ -85,7 +85,10 @@ export class HTermContainer extends TermContainer { } if (config.terminal.colorScheme.colors) { - preferenceManager.set('color-palette-overrides', config.terminal.colorScheme.colors) + preferenceManager.set( + 'color-palette-overrides', + Object.assign([], config.terminal.colorScheme.colors, this.term.colorPaletteOverrides) + ) } if (config.terminal.colorScheme.cursor) { preferenceManager.set('cursor-color', config.terminal.colorScheme.cursor) @@ -222,5 +225,7 @@ export class HTermContainer extends TermContainer { size.height += this.configuredLinePadding return size } + + this.term.colorPaletteOverrides = [] } } -- GitLab