mirror of
https://github.com/Eugeny/tabby.git
synced 2025-06-29 15:59:54 +00:00
preload sixel worker code
This commit is contained in:
parent
f094db9de2
commit
2fcad26a4e
@ -16,6 +16,7 @@ import deepEqual from 'deep-equal'
|
|||||||
import { Attributes } from 'xterm/src/common/buffer/Constants'
|
import { Attributes } from 'xterm/src/common/buffer/Constants'
|
||||||
import { AttributeData } from 'xterm/src/common/buffer/AttributeData'
|
import { AttributeData } from 'xterm/src/common/buffer/AttributeData'
|
||||||
import { CellData } from 'xterm/src/common/buffer/CellData'
|
import { CellData } from 'xterm/src/common/buffer/CellData'
|
||||||
|
import sixelWorkerScript from 'xterm-addon-image/lib/xterm-addon-image-worker.js'
|
||||||
|
|
||||||
const COLOR_NAMES = [
|
const COLOR_NAMES = [
|
||||||
'black', 'red', 'green', 'yellow', 'blue', 'magenta', 'cyan', 'white',
|
'black', 'red', 'green', 'yellow', 'blue', 'magenta', 'cyan', 'white',
|
||||||
@ -133,7 +134,7 @@ export class XTermFrontend extends Frontend {
|
|||||||
this.xterm.loadAddon(new ImageAddon(
|
this.xterm.loadAddon(new ImageAddon(
|
||||||
URL.createObjectURL(
|
URL.createObjectURL(
|
||||||
new Blob(
|
new Blob(
|
||||||
[require('xterm-addon-image/lib/xterm-addon-image-worker.js')],
|
[sixelWorkerScript],
|
||||||
{ type: 'application/javascript' },
|
{ type: 'application/javascript' },
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
@ -222,7 +223,6 @@ export class XTermFrontend extends Frontend {
|
|||||||
}
|
}
|
||||||
|
|
||||||
async attach (host: HTMLElement): Promise<void> {
|
async attach (host: HTMLElement): Promise<void> {
|
||||||
this.configure()
|
|
||||||
this.element = host
|
this.element = host
|
||||||
|
|
||||||
this.xterm.open(host)
|
this.xterm.open(host)
|
||||||
@ -231,6 +231,9 @@ export class XTermFrontend extends Frontend {
|
|||||||
// Work around font loading bugs
|
// Work around font loading bugs
|
||||||
await new Promise(resolve => setTimeout(resolve, this.hostApp.platform === Platform.Web ? 1000 : 0))
|
await new Promise(resolve => setTimeout(resolve, this.hostApp.platform === Platform.Web ? 1000 : 0))
|
||||||
|
|
||||||
|
// Just configure the colors to avoid a flash
|
||||||
|
this.configureColors()
|
||||||
|
|
||||||
if (this.enableWebGL) {
|
if (this.enableWebGL) {
|
||||||
this.webGLAddon = new WebglAddon()
|
this.webGLAddon = new WebglAddon()
|
||||||
this.xterm.loadAddon(this.webGLAddon)
|
this.xterm.loadAddon(this.webGLAddon)
|
||||||
@ -249,6 +252,9 @@ export class XTermFrontend extends Frontend {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Allow an animation frame
|
||||||
|
await new Promise(r => setTimeout(r, 100))
|
||||||
|
|
||||||
this.ready.next()
|
this.ready.next()
|
||||||
this.ready.complete()
|
this.ready.complete()
|
||||||
|
|
||||||
@ -262,6 +268,9 @@ export class XTermFrontend extends Frontend {
|
|||||||
|
|
||||||
this.resizeHandler()
|
this.resizeHandler()
|
||||||
|
|
||||||
|
// Allow an animation frame
|
||||||
|
await new Promise(r => setTimeout(r, 0))
|
||||||
|
|
||||||
host.addEventListener('dragOver', (event: any) => this.dragOver.next(event))
|
host.addEventListener('dragOver', (event: any) => this.dragOver.next(event))
|
||||||
host.addEventListener('drop', event => this.drop.next(event))
|
host.addEventListener('drop', event => this.drop.next(event))
|
||||||
|
|
||||||
@ -352,6 +361,28 @@ export class XTermFrontend extends Frontend {
|
|||||||
this.xtermCore._scrollToBottom()
|
this.xtermCore._scrollToBottom()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private configureColors () {
|
||||||
|
const config = this.configService.store
|
||||||
|
|
||||||
|
const theme: ITheme = {
|
||||||
|
foreground: config.terminal.colorScheme.foreground,
|
||||||
|
selectionBackground: config.terminal.colorScheme.selection || '#88888888',
|
||||||
|
selectionForeground: config.terminal.colorScheme.selectionForeground || undefined,
|
||||||
|
background: config.terminal.background === 'colorScheme' ? config.terminal.colorScheme.background : '#00000000',
|
||||||
|
cursor: config.terminal.colorScheme.cursor,
|
||||||
|
cursorAccent: config.terminal.colorScheme.cursorAccent,
|
||||||
|
}
|
||||||
|
|
||||||
|
for (let i = 0; i < COLOR_NAMES.length; i++) {
|
||||||
|
theme[COLOR_NAMES[i]] = config.terminal.colorScheme.colors[i]
|
||||||
|
}
|
||||||
|
|
||||||
|
if (this.xtermCore._colorManager && !deepEqual(this.configuredTheme, theme)) {
|
||||||
|
this.xterm.options.theme = theme
|
||||||
|
this.configuredTheme = theme
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
configure (): void {
|
configure (): void {
|
||||||
const config = this.configService.store
|
const config = this.configService.store
|
||||||
|
|
||||||
@ -385,23 +416,7 @@ export class XTermFrontend extends Frontend {
|
|||||||
|
|
||||||
this.copyOnSelect = config.terminal.copyOnSelect
|
this.copyOnSelect = config.terminal.copyOnSelect
|
||||||
|
|
||||||
const theme: ITheme = {
|
this.configureColors()
|
||||||
foreground: config.terminal.colorScheme.foreground,
|
|
||||||
selectionBackground: config.terminal.colorScheme.selection || '#88888888',
|
|
||||||
selectionForeground: config.terminal.colorScheme.selectionForeground || undefined,
|
|
||||||
background: config.terminal.background === 'colorScheme' ? config.terminal.colorScheme.background : '#00000000',
|
|
||||||
cursor: config.terminal.colorScheme.cursor,
|
|
||||||
cursorAccent: config.terminal.colorScheme.cursorAccent,
|
|
||||||
}
|
|
||||||
|
|
||||||
for (let i = 0; i < COLOR_NAMES.length; i++) {
|
|
||||||
theme[COLOR_NAMES[i]] = config.terminal.colorScheme.colors[i]
|
|
||||||
}
|
|
||||||
|
|
||||||
if (this.xtermCore._colorManager && !deepEqual(this.configuredTheme, theme)) {
|
|
||||||
this.xterm.options.theme = theme
|
|
||||||
this.configuredTheme = theme
|
|
||||||
}
|
|
||||||
|
|
||||||
if (this.opened && config.terminal.ligatures && !this.ligaturesAddon && this.hostApp.platform !== Platform.Web) {
|
if (this.opened && config.terminal.ligatures && !this.ligaturesAddon && this.hostApp.platform !== Platform.Web) {
|
||||||
this.ligaturesAddon = new LigaturesAddon()
|
this.ligaturesAddon = new LigaturesAddon()
|
||||||
|
Loading…
x
Reference in New Issue
Block a user